Package: manpages-dev Version: 2.67-1 Severity: minor File: /usr/share/man/man2/settimeofday.2.gz
-- System Information: Debian Release: lenny/sid APT prefers oldstable APT policy: (500, 'oldstable'), (500, 'testing') Architecture: i386 (i686) Kernel: Linux 2.6.18-4-486 Locale: LANG=ja_JP.EUC-JP, LC_CTYPE=ja_JP.EUC-JP (charmap=EUC-JP) Shell: /bin/sh linked to /bin/bash Versions of packages manpages-dev depends on: ii manpages 2.67-1 Manual pages about using a GNU/Lin manpages-dev recommends no packages. -- no debconf information `man settimeofday' says: The use of the timezone structure is obsolete; the tz argument should normally be specified as NULL. But, on linux kernel, the FAT filesystem driver uses tz->tz_minuteswest parameter for timestamp conversion. `tz' argument is still alive, not retired. Here is the detail in kernel: linux-2.6.17.1/kernel/time.c handles settimeofday(2) syscall and stores tz parameter into sys_tz global variable. ////////// struct timezone sys_tz; EXPORT_SYMBOL(sys_tz); ...(snip)... int do_sys_settimeofday(struct timespec *tv, struct timezone *tz) { static int firsttime = 1; int error = 0; if (tv && !timespec_valid(tv)) return -EINVAL; error = security_settime(tv, tz); if (error) return error; if (tz) { /* SMP safe, global irq locking makes it work. */ sys_tz = *tz; if (firsttime) { firsttime = 0; if (!tv) warp_clock(); } } if (tv) { /* SMP safe, again the code in arch/foo/time.c should * globally block out interrupts when it runs. */ return do_settimeofday(tv); } return 0; } ////////// linux-2.6.17.1/fs/fat/misc.c uses the `sys_tz' variable for timestamp conversion. FAT filesystem has only yy-mm-dd-hh-mm-ss format timestamp, no timezone infomation. So linux kernel handles the timestamp as localtime with using tz->tz_minuteswest parameter. ////////// extern struct timezone sys_tz; ...(snip)... /* Convert a MS-DOS time/date pair to a UNIX date (seconds since 1 1 70). */ int date_dos2unix(unsigned short time, unsigned short date) { int month, year, secs; /* * first subtract and mask after that... Otherwise, if * date == 0, bad things happen */ month = ((date >> 5) - 1) & 15; year = date >> 9; secs = (time & 31)*2+60*((time >> 5) & 63)+(time >> 11)*3600+86400* ((date & 31)-1+day_n[month]+(year/4)+year*365-((year & 3) == 0 && month < 2 ? 1 : 0)+3653); /* days since 1.1.70 plus 80's leap day */ secs += sys_tz.tz_minuteswest*60; return secs; } ////////// Thanks. ---- Kunihiko IMAI -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]