| From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> | 
|---|---|
| To: | Reini Urban <rurban(at)x-ray(dot)at> | 
| Cc: | pgsql-patches(at)postgresql(dot)org | 
| Subject: | Re: cygwin 8.0.0beta1 postmaster/syslogger.c, port/dirmod.c, | 
| Date: | 2004-09-01 04:01:42 | 
| Message-ID: | 200409010401.i8141gq11507@candle.pha.pa.us | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-cygwin 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(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/
> >>
> >>---------------------------(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(at)candle(dot)pha(dot)pa(dot)us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
| Attachment | Content-Type | Size | 
|---|---|---|
| unknown_filename | text/plain | 712 bytes | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Reini Urban | 2004-09-01 04:36:04 | Re: [PATCHES] time_t timezone | 
| Previous Message | Peter Eisentraut | 2004-08-30 22:27:42 | Re: Postgres + NT | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Reini Urban | 2004-09-01 04:36:04 | Re: [PATCHES] time_t timezone | 
| Previous Message | Bruce Momjian | 2004-09-01 00:09:58 | Re: Typo in tab-complete.c |