Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, |
Date | |
Msg-id | 200409010401.i8141gq11507@candle.pha.pa.us Whole thread Raw |
In response to | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, (Reini Urban <rurban@x-ray.at>) |
Responses |
Re: time_t timezone
|
List | pgsql-patches |
OK, patch attached and applied that casts _timezone to (int) on Cygwin. --------------------------------------------------------------------------- Reini Urban wrote: > Bruce Momjian schrieb: > > Should I apply this change? > > > > #define TIMEZONE_GLOBAL ((int)_timezone) > > yes, please. > I have no time yet, to come up with the better patch. It's already monday. > > > --------------------------------------------------------------------------- > > > > Reini Urban wrote: > > > >>Bruce Momjian schrieb: > >> > >>>Your patch highlighted several bugs in our code. First, I wasn't > >>>testing for CYGWIN in the backend pgport_palloc code. Second, I added > >>>an #undef to prevent compiler warnings. Third I added your Cygwin > >>>includes with an #ifdef. These will appear in beta2. > >>> > >>>On the timezone issue, I see this in dt.h: > >>> > >>> /* 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 > >>> > >>>so are you saying your _timezone is time_t and not an int? Sometimes it > >>>is just a short because it is only minutes west of GMT, not an actually > >>>seconds since 1970 or anything. Making it time_t actually sounds like > >>>overkill, but we can work around that in dt.h if indeed that is how your > >>>OS defines it. The easiest fix would probably be to add the cast to int > >>>right in dt.h and only for Cygwin: > >>> > >>> #define TIMEZONE_GLOBAL ((int)_timezone) > >>> > >>>Does that work for you? > >> > >>yes, that's better. > >> > >>FYI /usr/include/time.h: > >>/* defines for the opengroup specifications Derived from Issue 1 of the > >>SVID. */ > >>extern __IMPORT time_t _timezone; > >>... > >> > >>BTW: I see that CYGWIN also has a struct timezone in sys/time.h, but > >>configure didn't check for that. > >>I'll come with better patches after beta2. > >> > >> > >> > >>>--------------------------------------------------------------------------- > >>> > >>>Reini Urban wrote: > >>> > >>> > >>>>Attached patches are required for cygwin: > >>>> > >>>>2004-08-24 21:23:53 rurban@x-ray.at > >>>> * (postmaster/syslogger.c) struct timeval is > >>>> declared in sys/time.h, not in time.h > >>>> > >>>>2004-08-24 20:20:54 rurban: > >>>> * (port/dirmod.c) cygwin needs different header locations, > >>>> and unlink is a macro. There are no pgport_palloc > >>>> versions yet > >>>> > >>>> > >>>>timezone/pgtz.c: > >>>>Pending is a patch against postgresql-8.0.0beta1/config/c-library.m4: > >>>>PGAC_VAR_INT_TIMEZONE > >>>> > >>>>In the meantime I've hacked it with a cast from time_t to (int) in > >>>>timezone/pgtz.c: get_timezone_offset > >>>> > >>>>but timezone really is of time_t, not int. I don't know what you are > >>>>trying to do here. > >>>> > >>>> > >>>>There's on remaining issue for the cygwin build: > >>>>../../src/port/libpgport.a(dirmod.o)(.text+0x5ee):dirmod.c: undefined > >>>>reference to `__imp__CurrentMemoryContext' > >>>>../../src/port/libpgport.a(dirmod.o)(.text+0x64b):dirmod.c: undefined > >>>>reference to `__imp__CurrentMemoryContext' > >>>> > >>>>which explains the pgport_palloc problem. > >>>>-- > >>>>Reini Urban > >>>>http://xarch.tu-graz.ac.at/home/rurban/ > >>>> > >>> > >>> > >>>>2004-08-24 20:20:54 rurban: > >>>> * cygwin needs different header locations, and unlink is a macro > >>>> * There are no pgport_palloc versions yet > >>>> > >>>>--- postgresql-8.0.0beta1/src/port/dirmod.c.orig 2004-08-08 07:44:36.000000000 +0100 > >>>>+++ postgresql-8.0.0beta1/src/port/dirmod.c 2004-08-24 19:20:56.557435000 +0100 > >>>>@@ -33,16 +33,28 @@ > >>>> > >>>> > >>>>#include "miscadmin.h" > >>>>+ > >>>>+#ifdef __CYGWIN__ > >>>>+#include <windows.h> > >>>>+#include <w32api/winioctl.h> > >>>>+#else > >>>>#include <winioctl.h> > >>>>+#undef unlink > >>>>+#endif > >>>> > >>>>#undef rename > >>>>-#undef unlink > >>>> > >>>>+/* 2004-08-24 20:20:54 rurban: There are no pgport_palloc versions yet */ > >>>>+#if 0 > >>>>#ifndef FRONTEND > >>>>+#undef palloc > >>>>+#undef pstrdup > >>>>+#undef pfree > >>>>#define palloc(sz) pgport_palloc(sz) > >>>>#define pstrdup(str) pgport_pstrdup(str) > >>>>#define pfree(pointer) pgport_pfree(pointer) > >>>>#endif > >>>>+#endif > >>>> > >>>> > >>>>/* > >>> > >>> > >>>>2004-08-24 21:23:53 rurban@x-ray.at > >>>> * struct timeval is declared in sys/time.h, not in time.h > >>>> > >>>>--- postgresql-8.0.0beta1/src/backend/postmaster/syslogger.c.orig 2004-08-06 20:17:31.000000000 +0100 > >>>>+++ postgresql-8.0.0beta1/src/backend/postmaster/syslogger.c 2004-08-24 20:21:26.057851800 +0100 > >>>>@@ -28,6 +28,7 @@ > >>>>#include <signal.h> > >>>>#include <time.h> > >>>>#include <unistd.h> > >>>>+#include <sys/time.h> > >>>>#include <sys/stat.h> > >>>> > >>>>#include "libpq/pqsignal.h" > >>> > >>> > >>>>--- postgresql-8.0.0beta1/src/timezone/pgtz.c.orig 2004-07-31 20:12:15.000000000 +0100 > >>>>+++ postgresql-8.0.0beta1/src/timezone/pgtz.c 2004-08-24 19:56:30.686367800 +0100 > >>>>@@ -97,9 +97,9 @@ > >>>> return tm->tm_gmtoff; > >>>>#elif defined(HAVE_INT_TIMEZONE) > >>>>#ifdef HAVE_UNDERSCORE_TIMEZONE > >>>>- return -_timezone; > >>>>+ return -(int)_timezone; > >>>>#else > >>>>- return -timezone; > >>>>+ return -(int)timezone; > >>>>#endif > >>>>#else > >>>>#error No way to determine TZ? Can this happen? > >>> > >>> > >>>>---------------------------(end of broadcast)--------------------------- > >>>>TIP 9: the planner will ignore your desire to choose an index scan if your > >>>> joining column's datatypes do not match > >>> > >>> > >>> > >>>------------------------------------------------------------------------ > >>> > >>>Index: src/backend/utils/mmgr/mcxt.c > >>>=================================================================== > >>>RCS file: /cvsroot/pgsql-server/src/backend/utils/mmgr/mcxt.c,v > >>>retrieving revision 1.47 > >>>diff -c -c -r1.47 mcxt.c > >>>*** src/backend/utils/mmgr/mcxt.c 8 Aug 2004 06:44:32 -0000 1.47 > >>>--- src/backend/utils/mmgr/mcxt.c 29 Aug 2004 02:50:25 -0000 > >>>*************** > >>>*** 631,637 **** > >>> } > >>> > >>> > >>>! #ifdef WIN32 > >>> /* > >>> * Memory support routines for libpgport on Win32 > >>> * > >>>--- 631,637 ---- > >>> } > >>> > >>> > >>>! #if defined(WIN32) || defined(__CYGWIN__) > >>> /* > >>> * Memory support routines for libpgport on Win32 > >>> * > >>>*************** > >>>*** 649,654 **** > >>>--- 649,655 ---- > >>> return palloc(sz); > >>> } > >>> > >>>+ > >>> char * > >>> pgport_pstrdup(const char *str) > >>> { > >>>Index: src/port/dirmod.c > >>>=================================================================== > >>>RCS file: /cvsroot/pgsql-server/src/port/dirmod.c,v > >>>retrieving revision 1.19 > >>>diff -c -c -r1.19 dirmod.c > >>>*** src/port/dirmod.c 29 Aug 2004 01:44:02 -0000 1.19 > >>>--- src/port/dirmod.c 29 Aug 2004 02:50:28 -0000 > >>>*************** > >>>*** 31,48 **** > >>> > >>> #if defined(WIN32) || defined(__CYGWIN__) > >>> > >>>- > >>> #include "miscadmin.h" > >>>- #include <winioctl.h> > >>> > >>> #undef rename > >>> #undef unlink > >>> > >>> #ifndef FRONTEND > >>> /* > >>> * Call non-macro versions of palloc, can't reference CurrentMemoryContext > >>> * because of DLLIMPORT. > >>> */ > >>> #define palloc(sz) pgport_palloc(sz) > >>> #define pstrdup(str) pgport_pstrdup(str) > >>> #define pfree(pointer) pgport_pfree(pointer) > >>>--- 31,57 ---- > >>> > >>> #if defined(WIN32) || defined(__CYGWIN__) > >>> > >>> #include "miscadmin.h" > >>> > >>> #undef rename > >>> #undef unlink > >>> > >>>+ #ifdef __WIN32__ > >>>+ #include <winioctl.h> > >>>+ #else > >>>+ /* __CYGWIN__ */ > >>>+ #include <windows.h> > >>>+ #include <w32api/winioctl.h> > >>>+ #endif > >>>+ > >>> #ifndef FRONTEND > >>> /* > >>> * Call non-macro versions of palloc, can't reference CurrentMemoryContext > >>> * because of DLLIMPORT. > >>> */ > >>>+ #undef palloc > >>>+ #undef pstrdup > >>>+ #undef pfree > >>> #define palloc(sz) pgport_palloc(sz) > >>> #define pstrdup(str) pgport_pstrdup(str) > >>> #define pfree(pointer) pgport_pfree(pointer) > >> > >> > >>-- > >>Reini Urban > >>http://xarch.tu-graz.ac.at/home/rurban/ > >> > >>---------------------------(end of broadcast)--------------------------- > >>TIP 4: Don't 'kill -9' the postmaster > >> > > > > > > > -- > Reini Urban > http://xarch.tu-graz.ac.at/home/rurban/ > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend > -- 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/interfaces/ecpg/pgtypeslib/dt.h =================================================================== RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/dt.h,v retrieving revision 1.17 diff -c -c -r1.17 dt.h *** src/interfaces/ecpg/pgtypeslib/dt.h 19 Jan 2004 19:04:40 -0000 1.17 --- src/interfaces/ecpg/pgtypeslib/dt.h 1 Sep 2004 04:00:49 -0000 *************** *** 220,226 **** --- 220,230 ---- #if !defined(__CYGWIN__) && !defined(WIN32) #define TIMEZONE_GLOBAL timezone #else + #if defined(WIN32) #define TIMEZONE_GLOBAL _timezone + #else + #define TIMEZONE_GLOBAL ((int)_timezone) /* time_t on Cywgin */ + #endif #define tzname _tzname /* should be in time.h? */ #endif
pgsql-patches by date: