Re: time_t timezone - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: time_t timezone |
Date | |
Msg-id | 200409090023.i890NcE12555@candle.pha.pa.us Whole thread Raw |
In response to | Re: time_t timezone (Bruce Momjian <pgman@candle.pha.pa.us>) |
List | pgsql-patches |
I have done the same cleanup for _tzname for clarity and because some files were using tzname as local variable names (pgtz.c). --------------------------------------------------------------------------- Bruce Momjian wrote: > > OK, I have applied the following patch to fix the Cygwin _timezone > issue. I moved the TIMEZONE_GLOBAL up into port.h and change pgtz.c to > use that instead. I also changed the configure test for INT_TIMEZONE to > test for _timezone on Cygwin. This should fix all those problems. > > You found a few problems in dirmod.c but have run out of time and will > deal with them in a few days. > > --------------------------------------------------------------------------- > > Reini Urban wrote: > > Bruce Momjian schrieb: > > > > > Reini Urban wrote: > > > > > >>> # PGAC_VAR_INT_TIMEZONE > > >>> # --------------------- > > >>> # Check if the global variable `timezone' exists. If so, define > > >>> # HAVE_INT_TIMEZONE. > > >>> AC_DEFUN([PGAC_VAR_INT_TIMEZONE], > > >>> [AC_CACHE_CHECK(for int timezone, pgac_cv_var_int_timezone, > > >>> [AC_TRY_LINK([#include <time.h> > > >>> int res;], > > >>> [res = timezone / 60;], > > >>> [pgac_cv_var_int_timezone=yes], > > >>> [pgac_cv_var_int_timezone=no])]) > > >>> if test x"$pgac_cv_var_int_timezone" = xyes ; then > > >>> AC_DEFINE(HAVE_INT_TIMEZONE,, [Define to 1 if you have the global > > >>> variable 'int timezone'.]) > > >>> fi])# PGAC_VAR_INT_TIMEZONE > > >>> > > >>>You can look in include/pg_config.h to see how it is defined. > > >> > > >>This test fails, because you cannot do arithmetic with time_t. > > >>cygwin has/had a special workaround in pg_config_manual.h > > >>See Tom above. > > > > sorry, my mistake. you can do arithmetic with time_t. > > > > >>All other platforms with time_t timezone should manually enable their > > >>HAVE_INT_TIMEZONE and manually add the (int) timezone in > > >>src/timezone/pgtz.c. > > > > > > OK, let's get some facts. How is your timezone variable defined in your > > > headers? Is it _timezone? How is time_t defined? If you take the > > > program above and compile it alone, how does it fail? > > > > yes, it's only _timezone. > > > > already sent to this list. here it is: > > > > /usr/include/time.h from newlib. > > ... > > /* defines for the opengroup specifications Derived from Issue 1 of the > > SVID. */ > > extern __IMPORT time_t _timezone; > > extern __IMPORT int _daylight; > > extern __IMPORT char *_tzname[2]; > > > > which resolves to (gcc -E): > > # 98 "/usr/include/time.h" 3 4 > > extern __attribute__((dllimport)) time_t _timezone; > > extern __attribute__((dllimport)) int _daylight; > > extern __attribute__((dllimport)) char *_tzname[2]; > > > > time_t is a typedef from sys/types.h: > > #ifndef __time_t_defined > > typedef _TIME_T_ time_t; > > #define __time_t_defined > > > > _TIME_T_ is a macro from machine/types.h: > > define _TIME_T_ long > > > > > Also, look at your config.log output to see why it fails or email it to > > > my privately. > > ... > > configure:12843: checking for int timezone > > configure:12865: gcc -o conftest.exe -O2 -fno-strict-aliasing -Wall > > -Wmissing-prototypes -Wmissing-declarations -fno-strict-aliasing > > -L/usr/local/lib conftest.c -lssl -lcrypto -lz -lreadline -lcrypt > > -lresolv -lm >&5 > > conftest.c: In function `main': > > conftest.c:67: error: invalid operands to binary / > > configure:12871: $? = 1 > > configure: failed program was: > > ... > > > > #include <time.h> > > int res; > > int > > main () > > { > > res = timezone / 60; > > ; > > return 0; > > } > > > > so my patch and my whole point is wrong. > > just the underscore is needed for cygwin in pg_config_manual.h > > -- > > Reini Urban > > http://xarch.tu-graz.ac.at/home/rurban/ > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 7: don't forget to increase your free space map settings > > > > -- > Bruce Momjian | http://candle.pha.pa.us > pgman@candle.pha.pa.us | (610) 359-1001 > + If your life is a hard drive, | 13 Roberts Road > + Christ can be your backup. | Newtown Square, Pennsylvania 19073 > Index: configure > =================================================================== > RCS file: /cvsroot/pgsql-server/configure,v > retrieving revision 1.389 > diff -c -c -r1.389 configure > *** configure 2 Sep 2004 20:39:57 -0000 1.389 > --- configure 8 Sep 2004 19:36:18 -0000 > *************** > *** 10725,10731 **** > --- 10725,10735 ---- > int > main () > { > + #ifndef __CYGWIN__ > res = timezone / 60; > + #else > + res = _timezone / 60; > + #endif > ; > return 0; > } > Index: config/c-library.m4 > =================================================================== > RCS file: /cvsroot/pgsql-server/config/c-library.m4,v > retrieving revision 1.26 > diff -c -c -r1.26 c-library.m4 > *** config/c-library.m4 7 Jun 2004 22:39:44 -0000 1.26 > --- config/c-library.m4 8 Sep 2004 19:36:19 -0000 > *************** > *** 10,16 **** > [AC_CACHE_CHECK(for int timezone, pgac_cv_var_int_timezone, > [AC_TRY_LINK([#include <time.h> > int res;], > ! [res = timezone / 60;], > [pgac_cv_var_int_timezone=yes], > [pgac_cv_var_int_timezone=no])]) > if test x"$pgac_cv_var_int_timezone" = xyes ; then > --- 10,20 ---- > [AC_CACHE_CHECK(for int timezone, pgac_cv_var_int_timezone, > [AC_TRY_LINK([#include <time.h> > int res;], > ! [#ifndef __CYGWIN__ > ! res = timezone / 60; > ! #else > ! res = _timezone / 60; > ! #endif], > [pgac_cv_var_int_timezone=yes], > [pgac_cv_var_int_timezone=no])]) > if test x"$pgac_cv_var_int_timezone" = xyes ; then > Index: src/include/port.h > =================================================================== > RCS file: /cvsroot/pgsql-server/src/include/port.h,v > retrieving revision 1.57 > diff -c -c -r1.57 port.h > *** src/include/port.h 29 Aug 2004 21:08:48 -0000 1.57 > --- src/include/port.h 8 Sep 2004 19:36:26 -0000 > *************** > *** 180,185 **** > --- 180,193 ---- > #define pclose(a) _pclose(a) > #endif > > + /* Global variable holding time zone information. */ > + #if !defined(__CYGWIN__) > + #define TIMEZONE_GLOBAL timezone > + #else > + #define TIMEZONE_GLOBAL _timezone > + #define tzname _tzname /* should be in time.h? */ > + #endif > + > extern int copydir(char *fromdir, char *todir); > > /* Missing rand functions */ > Index: src/interfaces/ecpg/pgtypeslib/dt.h > =================================================================== > RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/dt.h,v > retrieving revision 1.19 > diff -c -c -r1.19 dt.h > *** src/interfaces/ecpg/pgtypeslib/dt.h 1 Sep 2004 18:59:35 -0000 1.19 > --- src/interfaces/ecpg/pgtypeslib/dt.h 8 Sep 2004 19:36:28 -0000 > *************** > *** 216,229 **** > } while(0) > #endif > > - /* Global variable holding time zone information. */ > - #if !defined(__CYGWIN__) && !defined(WIN32) > - #define TIMEZONE_GLOBAL timezone > - #else > - #define TIMEZONE_GLOBAL _timezone > - #define tzname _tzname /* should be in time.h? */ > - #endif > - > /* > * Date/time validation > * Include check for leap year. > --- 216,221 ---- > Index: src/timezone/pgtz.c > =================================================================== > RCS file: /cvsroot/pgsql-server/src/timezone/pgtz.c,v > retrieving revision 1.27 > diff -c -c -r1.27 pgtz.c > *** src/timezone/pgtz.c 2 Sep 2004 01:15:06 -0000 1.27 > --- src/timezone/pgtz.c 8 Sep 2004 19:36:33 -0000 > *************** > *** 96,106 **** > #if defined(HAVE_STRUCT_TM_TM_ZONE) > return tm->tm_gmtoff; > #elif defined(HAVE_INT_TIMEZONE) > ! #ifdef HAVE_UNDERSCORE_TIMEZONE > ! return -_timezone; > ! #else > ! return -timezone; > ! #endif > #else > #error No way to determine TZ? Can this happen? > #endif > --- 96,102 ---- > #if defined(HAVE_STRUCT_TM_TM_ZONE) > return tm->tm_gmtoff; > #elif defined(HAVE_INT_TIMEZONE) > ! return -TIMEZONE_GLOBAL; > #else > #error No way to determine TZ? Can this happen? > #endif > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/include/port.h =================================================================== RCS file: /cvsroot/pgsql-server/src/include/port.h,v retrieving revision 1.58 diff -c -c -r1.58 port.h *** src/include/port.h 8 Sep 2004 19:43:07 -0000 1.58 --- src/include/port.h 9 Sep 2004 00:08:19 -0000 *************** *** 183,191 **** /* Global variable holding time zone information. */ #if !defined(__CYGWIN__) #define TIMEZONE_GLOBAL timezone #else #define TIMEZONE_GLOBAL _timezone ! #define tzname _tzname /* should be in time.h? */ #endif extern int copydir(char *fromdir, char *todir); --- 183,192 ---- /* Global variable holding time zone information. */ #if !defined(__CYGWIN__) #define TIMEZONE_GLOBAL timezone + #define TZNAME_GLOBAL tzname #else #define TIMEZONE_GLOBAL _timezone ! #define TZNAME_GLOBAL _tzname #endif extern int copydir(char *fromdir, char *todir); Index: src/interfaces/ecpg/pgtypeslib/dt_common.c =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/dt_common.c,v retrieving revision 1.18 diff -c -c -r1.18 dt_common.c *** src/interfaces/ecpg/pgtypeslib/dt_common.c 30 Aug 2004 02:54:41 -0000 1.18 --- src/interfaces/ecpg/pgtypeslib/dt_common.c 9 Sep 2004 00:08:25 -0000 *************** *** 1065,1072 **** * case it contains an error message, which doesn't fit in the * buffer */ ! StrNCpy(*tzn, tzname[tm->tm_isdst], MAXTZLEN + 1); ! if (strlen(tzname[tm->tm_isdst]) > MAXTZLEN) tm->tm_isdst = -1; } } --- 1065,1072 ---- * case it contains an error message, which doesn't fit in the * buffer */ ! StrNCpy(*tzn, TZNAME_GLOBAL[tm->tm_isdst], MAXTZLEN + 1); ! if (strlen(TZNAME_GLOBAL[tm->tm_isdst]) > MAXTZLEN) tm->tm_isdst = -1; } } Index: src/interfaces/ecpg/pgtypeslib/timestamp.c =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/timestamp.c,v retrieving revision 1.21 diff -c -c -r1.21 timestamp.c *** src/interfaces/ecpg/pgtypeslib/timestamp.c 30 Aug 2004 02:54:41 -0000 1.21 --- src/interfaces/ecpg/pgtypeslib/timestamp.c 9 Sep 2004 00:08:27 -0000 *************** *** 223,229 **** #elif defined(HAVE_INT_TIMEZONE) *tzp = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL); if (tzn != NULL) ! *tzn = tzname[(tm->tm_isdst > 0)]; #endif #else /* not (HAVE_TM_ZONE || HAVE_INT_TIMEZONE) */ --- 223,229 ---- #elif defined(HAVE_INT_TIMEZONE) *tzp = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL); if (tzn != NULL) ! *tzn = TZNAME_GLOBAL[(tm->tm_isdst > 0)]; #endif #else /* not (HAVE_TM_ZONE || HAVE_INT_TIMEZONE) */
pgsql-patches by date: