Change ordering of HAVE_TM_ZONE and HAVE_INT_TIMEZONE code blocks
authorThomas G. Lockhart
Thu, 31 Dec 1998 16:30:59 +0000 (16:30 +0000)
committerThomas G. Lockhart
Thu, 31 Dec 1998 16:30:59 +0000 (16:30 +0000)
 to give HAVE_TM_ZONE priority. This fixes glibc2 machines and any other
 machine which passes both tests in configure.
Repair HAVE_TM_ZONE code which stuffs tm structure with date type values.
 Same problems as were originally there before v6.1, but never noticed.
Thanks to Oleg for nagging :)

src/backend/utils/adt/datetime.c
src/backend/utils/adt/dt.c
src/backend/utils/adt/nabstime.c

index 9b612ea4cf8bbe18c9b89db03149c6ac615949cf..bb5d6ed278667f5aa7fcdeaf630437467faaf753 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.25 1998/09/01 03:25:54 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.26 1998/12/31 16:30:56 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -339,7 +339,7 @@ abstime_date(AbsoluteTime abstime)
  * and then convert again to try to get the time zones correct.
  */
 static int
-date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
+date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn)
 {
    struct tm  *tx;
    time_t      utime;
@@ -357,14 +357,18 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
 
        /* convert to system time */
        utime = ((dateVal + (date2j(2000, 1, 1) - date2j(1970, 1, 1))) * 86400);
-       utime += (12 * 60 * 60);/* rotate to noon to get the right day in
-                                * time zone */
+       /* rotate to noon to get the right day in time zone */
+       utime += (12 * 60 * 60);
 
 #ifdef USE_POSIX_TIME
        tx = localtime(&utime);
 
 #ifdef DATEDEBUG
-#ifdef HAVE_INT_TIMEZONE
+#if defined(HAVE_TM_ZONE)
+       printf("date2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s dst=%d\n",
+              tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, (double) tm->tm_sec,
+              tx->tm_zone, tx->tm_isdst);
+#elif defined(HAVE_INT_TIMEZONE)
        printf("date2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s %s dst=%d\n",
               tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, (double) tm->tm_sec,
               tzname[0], tzname[1], tx->tm_isdst);
@@ -375,21 +379,21 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
        tm->tm_mday = tx->tm_mday;
        tm->tm_isdst = tx->tm_isdst;
 
-#ifdef HAVE_INT_TIMEZONE
-       *tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
-       if (tzn != NULL)
-           *tzn = tzname[(tm->tm_isdst > 0)];
-
-#else                          /* !HAVE_INT_TIMEZONE */
+#if defined(HAVE_TM_ZONE)
        tm->tm_gmtoff = tx->tm_gmtoff;
        tm->tm_zone = tx->tm_zone;
 
-       *tzp = (tm->tm_isdst ? (tm->tm_gmtoff - 3600) : tm->tm_gmtoff); /* tm_gmtoff is
-                                                                        * Sun/DEC-ism */
+       /* tm_gmtoff is Sun/DEC-ism */
+       *tzp = -(tm->tm_gmtoff);
+       if (tzn != NULL)
+           *tzn = (char *)tm->tm_zone;
+#elif defined(HAVE_INT_TIMEZONE)
+       *tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
        if (tzn != NULL)
-           *tzn = tm->tm_zone;
+           *tzn = tzname[(tm->tm_isdst > 0)];
+#else
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
 #endif
-
 #else                          /* !USE_POSIX_TIME */
        *tzp = CTimeZone;       /* V7 conventions; don't know timezone? */
        if (tzn != NULL)
@@ -411,6 +415,18 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
            *tzn = NULL;
    }
 
+#ifdef DATEDEBUG
+#if defined(HAVE_TM_ZONE)
+       printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s) dst=%d\n",
+              tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec,
+              *tzp, tm->tm_zone, tm->tm_isdst);
+#elif defined(HAVE_INT_TIMEZONE)
+       printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s %s) dst=%d\n",
+              tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec,
+              *tzp, tzname[0], tzname[1], tm->tm_isdst);
+#endif
+#endif
+
    return 0;
 }  /* date2tm() */
 
index fc9a71cc59465f27c41dea5709d537234747ee77..f08d70ccc533821c3a2954d01cf352df1d0c79f9 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.59 1998/10/08 18:30:07 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.60 1998/12/31 16:30:57 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1454,11 +1454,12 @@ datetime_trunc(text *units, DateTime *datetime)
                tm->tm_year += 1900;
                tm->tm_mon += 1;
 
-#ifdef HAVE_INT_TIMEZONE
-               tz = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
-
-#else                          /* !HAVE_INT_TIMEZONE */
+#if defined(HAVE_TM_ZONE)
                tz = -(tm->tm_gmtoff);  /* tm_gmtoff is Sun/DEC-ism */
+#elif defined(HAVE_INT_TIMEZONE)
+               tz = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
+#else
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
 #endif
 
 #else                          /* !USE_POSIX_TIME */
@@ -2414,16 +2415,17 @@ datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn)
 #ifdef USE_POSIX_TIME
            tx = localtime(&utime);
 #ifdef DATEDEBUG
-#ifdef HAVE_INT_TIMEZONE
+#if defined(HAVE_TM_ZONE)
+           printf("datetime2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s dst=%d\n",
+                  tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, sec,
+                  tx->tm_zone, tx->tm_isdst);
+#elif defined(HAVE_INT_TIMEZONE)
            printf("datetime2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s %s dst=%d\n",
                   tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, sec,
                   tzname[0], tzname[1], tx->tm_isdst);
 #else
-           printf("datetime2tm- (localtime) %d.%02d.%02d %02d:%02d:%02.0f %s dst=%d\n",
-                  tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, sec,
-                  tx->tm_zone, tx->tm_isdst);
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
 #endif
-#else
 #endif
            tm->tm_year = tx->tm_year + 1900;
            tm->tm_mon = tx->tm_mon + 1;
@@ -2442,18 +2444,19 @@ datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn)
 #endif
            tm->tm_isdst = tx->tm_isdst;
 
-#ifdef HAVE_INT_TIMEZONE
-           *tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
-           if (tzn != NULL)
-               *tzn = tzname[(tm->tm_isdst > 0)];
-
-#else                          /* !HAVE_INT_TIMEZONE */
+#if defined(HAVE_TM_ZONE)
            tm->tm_gmtoff = tx->tm_gmtoff;
            tm->tm_zone = tx->tm_zone;
 
            *tzp = -(tm->tm_gmtoff);    /* tm_gmtoff is Sun/DEC-ism */
            if (tzn != NULL)
-               *tzn = tm->tm_zone;
+               *tzn = (char *)tm->tm_zone;
+#elif defined(HAVE_INT_TIMEZONE)
+           *tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
+           if (tzn != NULL)
+               *tzn = tzname[(tm->tm_isdst > 0)];
+#else
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
 #endif
 
 #else                          /* !USE_POSIX_TIME */
@@ -2488,7 +2491,10 @@ datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn)
 
 #ifdef DATEDEBUG
 #ifdef USE_POSIX_TIME
-#ifdef HAVE_INT_TIMEZONE
+#if defined(HAVE_TM_ZONE)
+   printf("datetime2tm- timezone is %s; offset is %d\n",
+          tm->tm_zone, ((tzp != NULL) ? *tzp : 0));
+#elif defined(HAVE_INT_TIMEZONE)
    printf("datetime2tm- timezone is %s; offset is %d (%d); daylight is %d\n",
           tzname[tm->tm_isdst != 0], ((tzp != NULL) ? *tzp : 0), CTimeZone, CDayLight);
 #endif
@@ -3034,11 +3040,12 @@ DecodeDateTime(char **field, int *ftype, int nf,
            tm->tm_year += 1900;
            tm->tm_mon += 1;
 
-#ifdef HAVE_INT_TIMEZONE
-           *tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
-
-#else                          /* !HAVE_INT_TIMEZONE */
+#if defined(HAVE_TM_ZONE)
            *tzp = -(tm->tm_gmtoff);    /* tm_gmtoff is Sun/DEC-ism */
+#elif defined(HAVE_INT_TIMEZONE)
+           *tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
+#else
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
 #endif
 
 #else                          /* !USE_POSIX_TIME */
@@ -4104,12 +4111,14 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
 
 #ifdef DATEDEBUG
 #ifdef USE_POSIX_TIME
-#ifdef HAVE_INT_TIMEZONE
+#if defined(HAVE_TM_ZONE)
+   printf("EncodeDateTime- timezone is %s (%s); offset is %ld (%d); daylight is %d (%d)\n",
+          *tzn, tm->tm_zone, (-tm->tm_gmtoff), CTimeZone, tm->tm_isdst, CDayLight);
+#elif defined(HAVE_INT_TIMEZONE)
    printf("EncodeDateTime- timezone is %s (%s); offset is %d (%d); daylight is %d (%d)\n",
           *tzn, tzname[0], *tzp, CTimeZone, tm->tm_isdst, CDayLight);
 #else
-   printf("EncodeDateTime- timezone is %s (%s); offset is %ld (%d); daylight is %d (%d)\n",
-          *tzn, tm->tm_zone, (-tm->tm_gmtoff), CTimeZone, tm->tm_isdst, CDayLight);
+#error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined
 #endif
 #else
    printf("EncodeDateTime- timezone is %s (%s); offset is %d; daylight is %d\n",
index 95c1442ac31925dbba981bd69df9cf18e6baaf51..b6147490be700c67d1fa01dfd218344a6b14c364 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- *   $Id: nabstime.c,v 1.50 1998/12/15 15:28:57 scrappy Exp $
+ *   $Id: nabstime.c,v 1.51 1998/12/31 16:30:59 thomas Exp $
  *
  */
 #include 
@@ -57,7 +57,7 @@ GetCurrentAbsoluteTime(void)
    if (!HasCTZSet)
    {
 #ifdef USE_POSIX_TIME
-#ifdef HAVE_TM_ZONE
+#if defined(HAVE_TM_ZONE)
        tm = localtime(&now);
 
        CTimeZone = -tm->tm_gmtoff;     /* tm_gmtoff is Sun/DEC-ism */
@@ -86,9 +86,8 @@ GetCurrentAbsoluteTime(void)
        CTimeZone = tb.timezone * 60;
        CDayLight = (tb.dstflag != 0);
 
-       /*
-        * XXX does this work to get the local timezone string in V7? -
-        * tgl 97/03/18
+       /* XXX does this work to get the local timezone string in V7?
+        * - tgl 97/03/18
         */
        strftime(CTZName, MAXTZLEN, "%Z", localtime(&now));
 #endif
@@ -136,14 +135,14 @@ abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char *tzn)
 #endif
 
 #if defined(DATEDEBUG)
-#if (! defined(HAVE_TM_ZONE)) && defined(HAVE_INT_TIMEZONE)
-   printf("datetime2tm- (localtime) %d.%02d.%02d %02d:%02d:%02d %s %s dst=%d\n",
-          tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, tx->tm_sec,
-          tzname[0], tzname[1], tx->tm_isdst);
-#else
+#if defined(HAVE_TM_ZONE)
    printf("datetime2tm- (localtime) %d.%02d.%02d %02d:%02d:%02d %s dst=%d\n",
           tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, tx->tm_sec,
           tx->tm_zone, tx->tm_isdst);
+#elif defined(HAVE_INT_TIMEZONE)
+   printf("datetime2tm- (localtime) %d.%02d.%02d %02d:%02d:%02d %s %s dst=%d\n",
+          tx->tm_year, tx->tm_mon, tx->tm_mday, tx->tm_hour, tx->tm_min, tx->tm_sec,
+          tzname[0], tzname[1], tx->tm_isdst);
 #endif
 #endif
 
@@ -157,7 +156,7 @@ abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char *tzn)
    tm->tm_sec = tx->tm_sec;
    tm->tm_isdst = tx->tm_isdst;
 
-#ifdef HAVE_TM_ZONE
+#if defined(HAVE_TM_ZONE)
    tm->tm_gmtoff = tx->tm_gmtoff;
    tm->tm_zone = tx->tm_zone;
 
@@ -171,7 +170,7 @@ abstime2tm(AbsoluteTime time, int *tzp, struct tm * tm, char *tzn)
        *tzp = (tm->tm_isdst ? (timezone - 3600) : timezone);
    if (tzn != NULL)
        strcpy(tzn, tzname[tm->tm_isdst]);
-#else                          /* !HAVE_INT_TIMEZONE */
+#else
 #error POSIX time support is broken
 #endif
 #else                          /* ! USE_POSIX_TIME */