Re: time_t timezone

From: Reini Urban <rurban(at)x-ray(dot)at>
To: pgsql-patches(at)postgresql(dot)org
Subject: Re: time_t timezone
Date: 2004-09-02 06:44:28
Message-ID: 4136C14C.7000401@x-ray.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-cygwin pgsql-patches

Bruce Momjian schrieb:
> Tom Lane wrote:
>>Reini Urban <rurban(at)x-ray(dot)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/

In response to

Responses

Browse pgsql-cygwin by date

  From Date Subject
Next Message Tom Lane 2004-09-02 13:43:04 Re: time_t timezone
Previous Message Bruce Momjian 2004-09-02 00:30:29 Re: open item: tablespace handing in pg_dump/pg_restore

Browse pgsql-patches by date

  From Date Subject
Next Message Fabien COELHO 2004-09-02 08:16:23 pgxs default installation + various fixes
Previous Message Bruce Momjian 2004-09-02 01:28:20 Re: Win32 Version patch