lkml.org 
[lkml]   [2014]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH v2 03/11] time: Add rtc_tm_to_time64() safe version(using time64_t)
    On Thu, 30 Oct 2014, pang.xunlei wrote:

    Same $subject issue.

    > As part of addressing 2038 saftey for in-kernel uses, this patch
    > adds safe rtc_tm_to_time64() using time64_t. After this patch,
    > rtc_tm_to_time() should be replaced by rtc_tm_to_time64() one by
    > one. Eventually, rtc_tm_to_time() will be removed from the kernel
    > when it has no users.
    >
    > Signed-off-by: pang.xunlei <pang.xunlei@linaro.org>
    > ---
    > drivers/rtc/rtc-lib.c | 15 ++++++++++++++-
    > include/linux/rtc.h | 1 +
    > 2 files changed, 15 insertions(+), 1 deletion(-)
    >
    > diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c
    > index c4cf057..6948cbd 100644
    > --- a/drivers/rtc/rtc-lib.c
    > +++ b/drivers/rtc/rtc-lib.c
    > @@ -110,10 +110,23 @@ EXPORT_SYMBOL(rtc_valid_tm);
    >
    > /*
    > * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
    > + * Safe version for 2038 safety.

    Docbook comment missing. See the previous replies.

    > + */
    > +int rtc_tm_to_time64(struct rtc_time *tm, time64_t *time)

    What's the point of the return value? Just because rtc_tm_to_time()
    has one?

    Yes it does, but that does not mean that we blindly copy the existing
    nonsense when we implement a replacement interface.

    What's wrong with changing it to:

    time64_t rtc_tm_to_time64(struct rtc_time *tm)
    {
    return mktime64(......);
    }

    > +/*
    > + * Convert Gregorian date to seconds since 01-01-1970 00:00:00.
    > + * TODO: [2038 safety] should be replaced by rtc_tm_to_time64.

    Groan.

    > */
    > int rtc_tm_to_time(struct rtc_time *tm, unsigned long *time)
    > {
    > - *time = mktime(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
    > + *time = (unsigned long) mktime64(tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
    > tm->tm_hour, tm->tm_min, tm->tm_sec);

    And that would become

    *time = rtc_time_to_time64(tm);

    > return 0;
    > }

    Please stop doing purely mechanical changes. Just blindly copying
    stuff and make it take time64_t instead of unsigned long can be done
    with a script as well.

    Thanks,

    tglx


    \
     
     \ /
      Last update: 2014-10-30 15:01    [W:4.125 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site