X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fdtime.c;h=738ffd59728f5d4696322f36d81f1225512d52eb;hb=0c9207459097089a931399ff7d384884288bc4ac;hp=5a73934cf00a62c77a679c3fcada67dadb5e739f;hpb=0e4bc6fa7fa8ad74a1c3e855411bdc0e63bc6a2e;p=mmh diff --git a/sbr/dtime.c b/sbr/dtime.c index 5a73934..738ffd5 100644 --- a/sbr/dtime.c +++ b/sbr/dtime.c @@ -11,8 +11,8 @@ #include #include -#ifndef abs -# define abs(a) (a >= 0 ? a : -a) +#if !defined(HAVE_STRUCT_TM_TM_GMTOFF) +extern long timezone; #endif /* @@ -102,8 +102,14 @@ dlocaltime(time_t *clock) if (tm->tm_isdst) tw.tw_flags |= TW_DST; +#ifdef HAVE_STRUCT_TM_TM_GMTOFF + tw.tw_zone = tm->tm_gmtoff / 60; + if (tm->tm_isdst) /* if DST is in effect */ + tw.tw_zone -= 60; /* reset to normal offset */ +#else tzset(); tw.tw_zone = -(timezone / 60); +#endif tw.tw_flags &= ~TW_SDAY; tw.tw_flags |= TW_SEXP; @@ -191,20 +197,17 @@ dctime(struct tws *tw) /* ** Produce a date/time string of the form ** -** Mon, 16 Jun 1992 15:30:48 -700 (or) -** Mon, 16 Jun 1992 15:30:48 EDT +** Mon, 16 Jun 1992 15:30:48 -0700 ** -** for the current time, as specified by rfc822. -** The first form is required by rfc1123. +** for the current time, as specified by rfc822 and rfc1123. */ - char * -dtimenow(int alpha_timezone) +dtimenow(void) { time_t clock; time(&clock); - return dtime(&clock, alpha_timezone); + return dtime(&clock); } @@ -212,22 +215,14 @@ dtimenow(int alpha_timezone) ** Using a local calendar time value, produce ** a date/time string of the form ** -** Mon, 16 Jun 1992 15:30:48 -700 (or) -** Mon, 16 Jun 1992 15:30:48 EDT +** Mon, 16 Jun 1992 15:30:48 -0700 ** -** as specified by rfc822. The first form is required -** by rfc1123 for outgoing messages. +** as specified by rfc822 and rfc1123. */ - char * -dtime(time_t *clock, int alpha_timezone) +dtime(time_t *clock) { - if (alpha_timezone) - /* use alpha-numeric timezones */ - return dasctime(dlocaltime(clock), TW_NULL); - else - /* use numeric timezones */ - return dasctime(dlocaltime(clock), TW_ZONE); + return dasctime(dlocaltime(clock)); } @@ -239,9 +234,8 @@ dtime(time_t *clock, int alpha_timezone) ** ** as specified by rfc822 and rfc1123. */ - char * -dasctime(struct tws *tw, int flags) +dasctime(struct tws *tw) { char buffer[80]; static char result[80]; @@ -253,7 +247,7 @@ dasctime(struct tws *tw, int flags) if ((tw->tw_flags & TW_SZONE) == TW_SZNIL) result[0] = '\0'; else - snprintf(result, sizeof(result), " %s", dtimezone(tw->tw_zone, tw->tw_flags | flags)); + snprintf(result, sizeof(result), " %s", dtimezone(tw->tw_zone, tw->tw_flags)); snprintf(buffer, sizeof(buffer), "%02d %s %0*d %02d:%02d:%02d%s", tw->tw_mday, tw_moty[tw->tw_mon], @@ -273,9 +267,8 @@ dasctime(struct tws *tw, int flags) /* -** Get the timezone for given offset +** Get the timezone for given offset as numeric value. */ - char * dtimezone(int offset, int flags) { @@ -290,11 +283,6 @@ dtimezone(int offset, int flags) hours = offset / 60; } - if (!(flags & TW_ZONE) && mins == 0) { - tzset(); - return ((flags & TW_DST) ? tzname[1] : tzname[0]); - } - #ifdef ADJUST_NUMERIC_ONLY_TZ_OFFSETS_WRT_DST if (flags & TW_DST) hours += 1;