From: Zhaolei <zhaolei@cn.fujitsu.com>
To: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>,
Andrew Morton <akpm@linux-foundation.org>,
mingo@elte.hu
Cc: Pavel Machek <pavel@ucw.cz>,
tglx@linutronix.de, linux-kernel@vger.kernel.org
Subject: Re: Re: [PATCH v3 1/2] Add function to convert between calendar time and broken-down time for universal use
Date: Tue, 28 Jul 2009 11:05:01 +0800 [thread overview]
Message-ID: <4A6E6ADD.6090602@cn.fujitsu.com> (raw)
In-Reply-To: <87k51u8xwa.fsf@devron.myhome.or.jp>
OGAWA Hirofumi wrote:
> Zhaolei <zhaolei@cn.fujitsu.com> writes:
>
>>>> + /* the number of years since 1900 */
>>>> + int tm_year;
>>> Why isn't this "long"? "int" can overflow.
>> I selected int to make it same with user-space struct tm.
>>
>> In 32-bit machine, long have same length with int, and still can overflow,
>> It we want to avoid it in all platform, we should use long long,
>> and make division complex.
>>
>> Maybe make it same with user-space struct tm is ok.
>
> time_t is also "long" on 32-bit machine, it does overflow?
Hello, Ogawa-san:
CC: Andrew, ingo:
Yes, time_t on 32-bit machine will overflow on year-2038.
So tm.tm_year will NEVER overflow on 32-bit machine.
And in 64-bit machine, int type of tm.tm_year will overflow in
year 2,147,485,548, Is that enough?
I also like your suggestion to use long for year, so gmtime/localtime
will never return false on both 32 and 64 bit machine.
(btw, I don't understand why time_t is long, it have different length(limit)
in different arch, and make disunity)
>>>> + /* the number of days since Sunday, in the range 0 to 6 */
>>>> + int tm_wday;
>>>> + /* the number of days since January 1, in the range 0 to 365 */
>>>> + int tm_yday;
>>>> +};
>>> Those are needed?
>> Those are not needed by FAT-fs's code, but as a library,
>> I keep them for generic use and keep same with user-space struct tm.
>
> Yes. But, if there is no users, why need?
> I guess it makes slow thing, and it is slow than FAT's one
> (because FAT's one is optimized for FAT's timestamp range more or less).
There is no users of printk("%pf"), why not remove this?
And at least, I found one: drivers/char/efirtc.c
If I continue searching, maybe more.
>>>> +static inline struct tm *localtime_r(__kernel_time_t totalsecs,
>>>> + struct tm *result)
>>>> +{
>>>> + return __offtime(totalsecs, -sys_tz.tz_minuteswest * 60, result);
>>>> +}
>>> I think those are confusable. The real function of those needs to handle
>>> timezone database. Especially, sys_tz.tz_minuteswest in localtime_r() is
>>> known as wrong.
>>>
>>> Are you going to fix it? Otherwise I don't think it would not be good to
>>> use it easily as generic function like this.
>> Actually, it is hard to select.
>>
>> I don't schedule to introduce complex timezone database into kernel,
>> but as you said, localtime() without timezone database is not complete.
>> But localtime_r is easy to use and understood, it is similar with
>> userspace same-name function...
>
> Actually it is both (gmtime() is also needed to handle timezone).
>
> I worry someone uses it and display/export to userland. After that, the
> user will report the bug of it.
IHMO, user of these functions should understand what these functions is and
use these functions for right way.
If we give user a cdrom, it is user's responsibility not using is as cup stand.
At least, there function can make following source a fairy:
fs/ncpfs/dir.c
fs/smbfs/proc.c
fs/fat/misc.c
fs/udf/udftime.c
fs/cifs/netmisc.c
net/netfilter/xt_time.c
drivers/scsi/ips.c
...
It is different with user-land just because it lakes of large-complex locale
database.
>>>> +/*
>>>> + * Nonzero if YEAR is a leap year (every 4 years,
>>>> + * except every 100th isn't, and every 400th is).
>>>> + */
>>>> +static int __isleap(unsigned int year)
>>> long year. This breaks negative time_t.
>
> Please "long year".
Ok, or int year(after we get conclusion of long/int).
>>>> +struct tm *__offtime(__kernel_time_t totalsecs, int offset, struct tm *result)
>>>> +{
>>> So, I suggest to consolidate this code only, and don't provide
>>> gmtime_r()/localtime_r(), and use more good function name for
>>> __offtime() (I'm not sure, however, personally I feel __offtime is not
>>> obvious what's doing).
>> What about just use gmtime_r(rename __offtime->gmtime_r)?
>
> gmtime() also need to handle timezone actually.
So, maybe another function name as unmktime?
>> In fact I think both way(hode original localtime/gmtime or delete them) have
>> merit and demerit.
>> Hode them will make it easy to use, delete them will make function more exact.
>
> Yes. But, how do you handle bug report?
I will thanks you for attention and reporting first, then discuss on LKML
about detail of this problem, and get a conclusion and fix.
Now we are in step2: discussing.
We need to get a best way to fix this to make users happy.
Thanks
Zhaolei
next prev parent reply other threads:[~2009-07-28 3:02 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-14 8:03 [PATCH 1/2] Add function to convert between calendar time and broken-down time for universal use Zhaolei
2009-07-14 8:04 ` [PATCH 2/2] fs/fat: Use common localtime/gmtime in fat_time_unix2fat() Zhaolei
2009-07-14 22:10 ` [PATCH 1/2] Add function to convert between calendar time and broken-down time for universal use Andrew Morton
2009-07-15 0:59 ` Zhaolei
2009-07-15 7:23 ` [PATCH v2 0/2] " Zhaolei
2009-07-15 7:24 ` [PATCH v2 1/2] " Zhaolei
2009-07-15 7:25 ` [PATCH v2 2/2] Use common localtime/gmtime in fat_time_unix2fat() Zhaolei
2009-07-18 11:50 ` [PATCH 1/2] Add function to convert between calendar time and broken-down time for universal use Pavel Machek
2009-07-20 2:56 ` [PATCH 1/2] Add function to convert between calendar time andbroken-down " Zhaolei
2009-07-20 3:20 ` Andrew Morton
2009-07-20 9:55 ` [PATCH v3 0/2] Add function to convert between calendar time and broken-down " Zhaolei
2009-07-20 9:56 ` [PATCH v3 1/2] " Zhaolei
2009-07-25 5:42 ` OGAWA Hirofumi
2009-07-25 8:50 ` OGAWA Hirofumi
2009-07-25 12:15 ` OGAWA Hirofumi
2009-07-27 3:15 ` Zhaolei
2009-07-27 6:04 ` OGAWA Hirofumi
2009-07-28 3:05 ` Zhaolei [this message]
2009-07-28 5:12 ` OGAWA Hirofumi
2009-07-30 5:39 ` [PATCH v4 0/2] " Zhaolei
2009-07-30 5:40 ` [PATCH v4 1/2] " Zhaolei
2009-07-30 5:41 ` [PATCH v4 2/2] Use common time_to_tm in fat_time_unix2fat() Zhaolei
2009-07-27 22:44 ` [PATCH v3 1/2] Add function to convert between calendar time and broken-down time for universal use Pavel Machek
2009-07-28 4:52 ` OGAWA Hirofumi
2009-07-20 9:57 ` [PATCH v3 2/2] Use common localtime/gmtime in fat_time_unix2fat() Zhaolei
2009-07-20 10:03 ` Pavel Machek
2009-07-25 5:43 ` OGAWA Hirofumi
2009-07-27 3:21 ` Zhaolei
2009-07-18 10:02 ` [PATCH 1/2] Add function to convert between calendar time and broken-down time for universal use Ingo Molnar
2009-07-18 12:10 ` H. Peter Anvin
2009-07-18 12:41 ` Ulrich Drepper
2009-07-18 12:26 ` Andi Kleen
2009-07-20 2:41 ` Zhaolei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A6E6ADD.6090602@cn.fujitsu.com \
--to=zhaolei@cn.fujitsu.com \
--cc=akpm@linux-foundation.org \
--cc=hirofumi@mail.parknet.co.jp \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=pavel@ucw.cz \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.