Re: time_t timezone - Mailing list pgsql-patches

From Reini Urban
Subject Re: time_t timezone
Date
Msg-id 4136C14C.7000401@x-ray.at
Whole thread Raw
In response to Re: time_t timezone  (Bruce Momjian <pgman@candle.pha.pa.us>)
Responses Re: time_t timezone
Re: time_t timezone
List pgsql-patches
Bruce Momjian schrieb:
> Tom Lane wrote:
>>Reini Urban <rurban@x-ray.at> writes:
>>
>>>Yes, they are talking about the localtime return value,
>>>but nevertheless the newlib folks refer to that. Their fault.
>>
>>>Should I discuss that with them?
>>
>>Probably.  They have a gratuitous variation from the Single Unix Spec.
>>
>>>>But what may be more to the point is that AFAICS we make no assumption
>>>>about the exact datatype of the timezone variable.
>>
>>>Bruce' patch only assumes time_t on CYGWIN and it is only for pgtypeslib
>>>(src/interfaces/ecpg/pgtypeslib/dt.h). Not for src/timezone/pgtz.c
>>
>>Per my recent post in pghackers, I think that the datatype has nothing
>>to do with it anyway.  The real problem is the loss of this code that
>>was in pg_config_manual.h in 7.4 and before:
>>
>>/*
>> * Define this if your operating system has _timezone rather than timezone
>> */
>>#if defined(__CYGWIN__) || defined(WIN32)
>>#define HAVE_INT_TIMEZONE        /* has int _timezone */
>>#define HAVE_UNDERSCORE_TIMEZONE 1
>>#endif
>>
>>I'm inclined to just put it back, rather than adding a configure test
>>that we never needed before.
>
> OK, I backed out the int cast I had made for dt.h.  I agree time_t
> should cast to int naturally.  I noticed that HAVE_INT_TIMEZONE is
> already a configure test.  Is that test not working on Cygwin?  Seems it
> is working on MinGW.  The test is this:
>
>     # 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.

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.
--
Reini Urban
http://xarch.tu-graz.ac.at/home/rurban/

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Win32 Version patch
Next
From: Fabien COELHO
Date:
Subject: pgxs default installation + various fixes