Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,

From: Reini Urban <rurban(at)x-ray(dot)at>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,
Date: 2004-08-29 10:49:50
Message-ID: 4131B4CE.9050602@x-ray.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-cygwin 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(at)x-ray(dot)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(at)x-ray(dot)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/

In response to

Responses

Browse pgsql-cygwin by date

  From Date Subject
Next Message Bruce Momjian 2004-08-30 03:23:31 Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,
Previous Message Bruce Momjian 2004-08-29 02:58:41 Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c,

Browse pgsql-patches by date

  From Date Subject
Next Message Jan Wieck 2004-08-29 12:19:50 Re: log_filename_prefix --> log_filename + strftime()
Previous Message Andreas Pflug 2004-08-29 10:27:30 dbsize contrib