Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,
От | Reini Urban |
---|---|
Тема | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, |
Дата | |
Msg-id | 4132D0D1.2060102@x-ray.at обсуждение исходный текст |
Ответ на | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, (Bruce Momjian <pgman@candle.pha.pa.us>) |
Ответы |
Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,
|
Список | pgsql-patches |
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/
В списке pgsql-patches по дате отправления: