From de47eb59bb829423b1d0f47ba13099073999b3cb Mon Sep 17 00:00:00 2001 From: Nicolas Planel Date: Wed, 29 Oct 2003 16:07:11 +0000 Subject: Corporate Server 2.1.1 release --- mdk-stage1/dietlibc/libugly/tzfile.c | 37 ++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'mdk-stage1/dietlibc/libugly/tzfile.c') diff --git a/mdk-stage1/dietlibc/libugly/tzfile.c b/mdk-stage1/dietlibc/libugly/tzfile.c index 5702d4bea..e0e8f7846 100644 --- a/mdk-stage1/dietlibc/libugly/tzfile.c +++ b/mdk-stage1/dietlibc/libugly/tzfile.c @@ -3,28 +3,30 @@ #include #include #include +#include -#include +/* #include */ + +char* tzname[2]={"GMT","GMT"}; #ifdef WANT_TZFILE_PARSER static char *tzfile=0; static int tzlen=-1; -void __maplocaltime() { +void __maplocaltime(void); +void __maplocaltime(void) { int fd; unsigned int len; if (tzlen>=0) return; tzlen=0; if ((fd=open("/etc/localtime",O_RDONLY))<0) return; len=lseek(fd,0,SEEK_END); - if ((tzfile=mmap(0,len,PROT_READ,MAP_SHARED,fd,0))==MAP_FAILED) return; + if ((tzfile=mmap(0,len,PROT_READ,MAP_PRIVATE,fd,0))==MAP_FAILED) return; close(fd); if (ntohl(*(int*)tzfile) != 0x545a6966) return; tzlen=len; } -char *tzset(void) __attribute__((weak,alias("__maplocaltime"))); - static unsigned long __myntohl(const unsigned char* c) { return (((unsigned long)c[0])<<24) + (((unsigned long)c[1])<<16) + @@ -32,6 +34,7 @@ static unsigned long __myntohl(const unsigned char* c) { ((unsigned long)c[3]); } +time_t __tzfile_map(time_t t, int *isdst); time_t __tzfile_map(time_t t, int *isdst) { /* "TZif" plus 16 reserved bytes. */ char *tmp; @@ -64,23 +67,41 @@ time_t __tzfile_map(time_t t, int *isdst) { printf("%s(%lu,%d,%d)",i?", ":"",ntohl(*(int*)tmp),tmp[4],tmp[5]); tmp+=6; } printf("\n"); + for (i=0; i0); + for (i=0; i= t) { + char* tz=tmp; /* printf("match at %d\n",i); */ tmp+=tzh_timecnt*4; i=tmp[i-1]; /* printf("using index %d\n",i); */ tmp+=tzh_timecnt; + tz+=tzh_timecnt*5+tzh_leapcnt*4+tzh_typecnt*6; tmp+=i*6; /* printf("(%lu,%d,%d)\n",ntohl(*(int*)tmp),tmp[4],tmp[5]); */ *isdst=tmp[4]; - return t+__myntohl(tmp); + tzname[0]=tz+tmp[5]; + timezone=-(__myntohl(tmp)); + return t-timezone; } + } return t; } + +void tzset(void) { + int isdst; + __maplocaltime(); + __tzfile_map(time(0),&isdst); +} + #else -void tzset(void) __attribute__((weak,alias("return0"))); +void tzset(void) __attribute__((weak,alias("__nop"))); #endif -- cgit v1.2.1