Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, - Mailing list pgsql-patches
From | Reini Urban |
---|---|
Subject | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, |
Date | |
Msg-id | 4131B4CE.9050602@x-ray.at Whole thread Raw |
In response to | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, (Bruce Momjian <pgman@candle.pha.pa.us>) |
Responses |
Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,
|
List | pgsql-patches |
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/
pgsql-patches by date: