Re: Win32 defines - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Win32 defines
Date
Msg-id 200304161754.h3GHsEX29183@candle.pha.pa.us
Whole thread Raw
In response to Re: Win32 defines  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Win32 defines
List pgsql-patches
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > Tom Lane wrote:
> >> Why is this removing the use of the TIMEZONE_GLOBAL macro?
>
> > It was Peter's suggestion.  Once we had a port-specific define, we
> > should use timezone directly, no?
>
> > #define timezone _timezone
>
> Oh, I missed that part.  A bit risky IMHO --- the macro might expand in
> places you didn't expect/want.  TIMEZONE_GLOBAL is unlikely to cause
> any such conflict ...

Agreed.  A 'timezone' macro will expand as a structure member, while a
timezone variable will not.  Here is a new version that defines a
variable timezone to equal _timezone.  This seems cleaner, and removes
the need for TIMEZONE_GLOBAL.

I am still researching the stat() handling in postmaster.c.  SRA has a
porting document that I translated from Japanese (via Babelfish) which
looks very helpful.

--
  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/backend/access/transam/xlog.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/access/transam/xlog.c,v
retrieving revision 1.112
diff -c -c -r1.112 xlog.c
*** src/backend/access/transam/xlog.c    21 Feb 2003 00:06:22 -0000    1.112
--- src/backend/access/transam/xlog.c    16 Apr 2003 17:49:45 -0000
***************
*** 1507,1513 ****
       * overwrite an existing logfile.  However, there shouldn't be one, so
       * rename() is an acceptable substitute except for the truly paranoid.
       */
! #if !defined(__BEOS__) && !defined(N_PLAT_NLM) && !defined(__CYGWIN__)
      if (link(tmppath, path) < 0)
          elog(PANIC, "link from %s to %s (initialization of log file %u, segment %u) failed: %m",
               tmppath, path, log, seg);
--- 1507,1513 ----
       * overwrite an existing logfile.  However, there shouldn't be one, so
       * rename() is an acceptable substitute except for the truly paranoid.
       */
! #if HAVE_LINK
      if (link(tmppath, path) < 0)
          elog(PANIC, "link from %s to %s (initialization of log file %u, segment %u) failed: %m",
               tmppath, path, log, seg);
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/postmaster/postmaster.c,v
retrieving revision 1.310
diff -c -c -r1.310 postmaster.c
*** src/backend/postmaster/postmaster.c    6 Apr 2003 22:45:22 -0000    1.310
--- src/backend/postmaster/postmaster.c    16 Apr 2003 17:49:48 -0000
***************
*** 300,306 ****
      char        path[MAXPGPATH];
      FILE       *fp;

! #ifndef __CYGWIN__
      struct stat stat_buf;
  #endif

--- 300,306 ----
      char        path[MAXPGPATH];
      FILE       *fp;

! #if !defined(__CYGWIN__) && !defined(WIN32)
      struct stat stat_buf;
  #endif

***************
*** 322,329 ****
       * be proper support for Unix-y file permissions.  Need to think of a
       * reasonable check to apply on Windows.
       */
! #ifndef __CYGWIN__
!
      if (stat(checkdir, &stat_buf) == -1)
      {
          if (errno == ENOENT)
--- 322,328 ----
       * be proper support for Unix-y file permissions.  Need to think of a
       * reasonable check to apply on Windows.
       */
! #if !defined(__CYGWIN__) && !defined(WIN32)
      if (stat(checkdir, &stat_buf) == -1)
      {
          if (errno == ENOENT)
***************
*** 336,342 ****
      if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
          elog(FATAL, "data directory %s has group or world access; permissions should be u=rwx (0700)",
               checkdir);
! #endif   /* !__CYGWIN__ */

      /* Look for PG_VERSION before looking for pg_control */
      ValidatePgVersion(checkdir);
--- 335,341 ----
      if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
          elog(FATAL, "data directory %s has group or world access; permissions should be u=rwx (0700)",
               checkdir);
! #endif

      /* Look for PG_VERSION before looking for pg_control */
      ValidatePgVersion(checkdir);
Index: src/backend/utils/adt/datetime.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/adt/datetime.c,v
retrieving revision 1.103
diff -c -c -r1.103 datetime.c
*** src/backend/utils/adt/datetime.c    4 Apr 2003 04:50:44 -0000    1.103
--- src/backend/utils/adt/datetime.c    16 Apr 2003 17:49:51 -0000
***************
*** 1533,1539 ****
              /* tm_gmtoff is Sun/DEC-ism */
              tz = -(tmp->tm_gmtoff);
  #elif defined(HAVE_INT_TIMEZONE)
!             tz = ((tmp->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);
  #endif   /* HAVE_INT_TIMEZONE */
          }
          else
--- 1533,1539 ----
              /* tm_gmtoff is Sun/DEC-ism */
              tz = -(tmp->tm_gmtoff);
  #elif defined(HAVE_INT_TIMEZONE)
!             tz = ((tmp->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #endif   /* HAVE_INT_TIMEZONE */
          }
          else
Index: src/backend/utils/adt/nabstime.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/adt/nabstime.c,v
retrieving revision 1.106
diff -c -c -r1.106 nabstime.c
*** src/backend/utils/adt/nabstime.c    4 Apr 2003 04:50:44 -0000    1.106
--- src/backend/utils/adt/nabstime.c    16 Apr 2003 17:49:52 -0000
***************
*** 261,267 ****
          }
          else
          {
!             *tzp = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);

              if (tzn != NULL)
              {
--- 261,267 ----
          }
          else
          {
!             *tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);

              if (tzn != NULL)
              {
Index: src/backend/utils/adt/timestamp.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.83
diff -c -c -r1.83 timestamp.c
*** src/backend/utils/adt/timestamp.c    7 Apr 2003 15:04:03 -0000    1.83
--- src/backend/utils/adt/timestamp.c    16 Apr 2003 17:49:53 -0000
***************
*** 899,905 ****
              if (tzn != NULL)
                  *tzn = (char *) tm->tm_zone;
  #elif defined(HAVE_INT_TIMEZONE)
!             *tzp = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);
              if (tzn != NULL)
                  *tzn = tzname[(tm->tm_isdst > 0)];
  #endif
--- 899,905 ----
              if (tzn != NULL)
                  *tzn = (char *) tm->tm_zone;
  #elif defined(HAVE_INT_TIMEZONE)
!             *tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
              if (tzn != NULL)
                  *tzn = tzname[(tm->tm_isdst > 0)];
  #endif
Index: src/include/c.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/c.h,v
retrieving revision 1.137
diff -c -c -r1.137 c.h
*** src/include/c.h    6 Apr 2003 22:45:23 -0000    1.137
--- src/include/c.h    16 Apr 2003 17:49:55 -0000
***************
*** 51,57 ****
   */

  #include "pg_config.h"
! #include "pg_config_manual.h"
  #include "pg_config_os.h"
  #include "postgres_ext.h"

--- 51,57 ----
   */

  #include "pg_config.h"
! #include "pg_config_manual.h"    /* must be after pg_config.h */
  #include "pg_config_os.h"
  #include "postgres_ext.h"

***************
*** 65,74 ****
  #endif
  #include <sys/types.h>

- #ifdef __CYGWIN__
  #include <errno.h>
  #include <sys/fcntl.h>            /* ensure O_BINARY is available */
- #endif
  #ifdef HAVE_SUPPORTDEFS_H
  #include <SupportDefs.h>
  #endif
--- 65,72 ----
***************
*** 680,686 ****
   * ----------------------------------------------------------------
   */

! #ifdef __CYGWIN__
  #define PG_BINARY    O_BINARY
  #define PG_BINARY_R "rb"
  #define PG_BINARY_W "wb"
--- 678,684 ----
   * ----------------------------------------------------------------
   */

! #if defined(__CYGWIN__) || defined(WIN32)
  #define PG_BINARY    O_BINARY
  #define PG_BINARY_R "rb"
  #define PG_BINARY_W "wb"
Index: src/include/pg_config_manual.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/pg_config_manual.h,v
retrieving revision 1.1
diff -c -c -r1.1 pg_config_manual.h
*** src/include/pg_config_manual.h    6 Apr 2003 22:45:23 -0000    1.1
--- src/include/pg_config_manual.h    16 Apr 2003 17:49:56 -0000
***************
*** 135,140 ****
--- 135,156 ----
  #endif

  /*
+  * Define this if your operating system supports link()
+  */
+ #if !defined(__QNX__) && !defined(__BEOS__) && \
+     !defined(__CYGWIN__) && !defined(WIN32)
+ # define HAVE_LINK 1
+ #endif
+
+ /*
+  * Define this if your operating system has _timezone rather than timezone
+  */
+ #if defined(__CYGWIN__) || defined(WIN32)
+ # define HAVE_INT_TIMEZONE        /* has int _timezone */
+ # define HAVE_UNDERSCORE_TIMEZONE 1
+ #endif
+
+ /*
   * This is the default directory in which AF_UNIX socket files are
   * placed.  Caution: changing this risks breaking your existing client
   * applications, which are likely to continue to look in the old
Index: src/include/port/win32.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/win32.h,v
retrieving revision 1.6
diff -c -c -r1.6 win32.h
*** src/include/port/win32.h    22 Jan 2002 19:02:40 -0000    1.6
--- src/include/port/win32.h    16 Apr 2003 17:49:56 -0000
***************
*** 1,6 ****
--- 1,9 ----
  #define USES_WINSOCK
  #define NOFILE          100

+ #define tzname _tzname            /* should be in time.h? */
+ #define HAVE_INT_TIMEZONE        /* has int _timezone */
+
  /* defines for dynamic linking on Win32 platform */
  #ifdef __CYGWIN__

Index: src/include/utils/datetime.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/utils/datetime.h,v
retrieving revision 1.37
diff -c -c -r1.37 datetime.h
*** src/include/utils/datetime.h    4 Apr 2003 04:50:44 -0000    1.37
--- src/include/utils/datetime.h    16 Apr 2003 17:49:57 -0000
***************
*** 216,226 ****
  } while(0)
  #endif

! /* Global variable holding time zone information. */
! #if defined(__CYGWIN__) || defined(N_PLAT_NLM)
! #define TIMEZONE_GLOBAL _timezone
! #else
! #define TIMEZONE_GLOBAL timezone
  #endif

  /*
--- 216,224 ----
  } while(0)
  #endif

! #ifdef HAVE_UNDERSCORE_TIMEZONE
! short timezone = _timezone;
! char *tzname = _tzname;
  #endif

  /*
Index: src/interfaces/ecpg/include/sqlca.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/include/sqlca.h,v
retrieving revision 1.22
diff -c -c -r1.22 sqlca.h
*** src/interfaces/ecpg/include/sqlca.h    10 Mar 2003 22:28:21 -0000    1.22
--- src/interfaces/ecpg/include/sqlca.h    16 Apr 2003 17:49:57 -0000
***************
*** 2,8 ****
  #define POSTGRES_SQLCA_H

  #ifndef DLLIMPORT
! #ifdef __CYGWIN__
  #define DLLIMPORT __declspec (dllimport)
  #else
  #define DLLIMPORT
--- 2,8 ----
  #define POSTGRES_SQLCA_H

  #ifndef DLLIMPORT
! #if defined(__CYGWIN__) || defined(WIN32)
  #define DLLIMPORT __declspec (dllimport)
  #else
  #define DLLIMPORT
Index: src/interfaces/ecpg/pgtypeslib/dt.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/dt.h,v
retrieving revision 1.3
diff -c -c -r1.3 dt.h
*** src/interfaces/ecpg/pgtypeslib/dt.h    1 Apr 2003 14:37:25 -0000    1.3
--- src/interfaces/ecpg/pgtypeslib/dt.h    16 Apr 2003 17:49:57 -0000
***************
*** 215,227 ****
  } while(0)
  #endif

- /* Global variable holding time zone information. */
- #if defined(__CYGWIN__) || defined(N_PLAT_NLM)
- #define TIMEZONE_GLOBAL _timezone
- #else
- #define TIMEZONE_GLOBAL timezone
- #endif
-
  /*
   * Date/time validation
   * Include check for leap year.
--- 215,220 ----
Index: src/interfaces/ecpg/pgtypeslib/dt_common.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/dt_common.c,v
retrieving revision 1.3
diff -c -c -r1.3 dt_common.c
*** src/interfaces/ecpg/pgtypeslib/dt_common.c    1 Apr 2003 14:37:25 -0000    1.3
--- src/interfaces/ecpg/pgtypeslib/dt_common.c    16 Apr 2003 17:49:59 -0000
***************
*** 9,14 ****
--- 9,19 ----
  #include "dt.h"
  #include "extern.h"

+ #ifdef HAVE_UNDERSCORE_TIMEZONE
+ short timezone = _timezone;
+ char *tzname = _tzname;
+ #endif
+
  static int day_tab[2][13] = {
              {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0},
          {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
***************
*** 1167,1173 ****
  #elif defined(HAVE_INT_TIMEZONE)
      if (tzp != NULL)
      {
!             *tzp = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);

              if (tzn != NULL)
              {
--- 1172,1178 ----
  #elif defined(HAVE_INT_TIMEZONE)
      if (tzp != NULL)
      {
!             *tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);

              if (tzn != NULL)
              {
***************
*** 1252,1258 ****
              /* tm_gmtoff is Sun/DEC-ism */
              tz = -(tmp->tm_gmtoff);
  #elif defined(HAVE_INT_TIMEZONE)
!             tz = ((tmp->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);
  #endif   /* HAVE_INT_TIMEZONE */
          }
          else
--- 1257,1263 ----
              /* tm_gmtoff is Sun/DEC-ism */
              tz = -(tmp->tm_gmtoff);
  #elif defined(HAVE_INT_TIMEZONE)
!             tz = ((tmp->tm_isdst > 0) ? (timezone - 3600) : timezone);
  #endif   /* HAVE_INT_TIMEZONE */
          }
          else
Index: src/interfaces/ecpg/pgtypeslib/timestamp.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/pgtypeslib/timestamp.c,v
retrieving revision 1.5
diff -c -c -r1.5 timestamp.c
*** src/interfaces/ecpg/pgtypeslib/timestamp.c    1 Apr 2003 14:37:25 -0000    1.5
--- src/interfaces/ecpg/pgtypeslib/timestamp.c    16 Apr 2003 17:50:00 -0000
***************
*** 214,220 ****
              if (tzn != NULL)
                  *tzn = (char *) tm->tm_zone;
  #elif defined(HAVE_INT_TIMEZONE)
!             *tzp = ((tm->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);
              if (tzn != NULL)
                  *tzn = tzname[(tm->tm_isdst > 0)];
  #endif
--- 214,220 ----
              if (tzn != NULL)
                  *tzn = (char *) tm->tm_zone;
  #elif defined(HAVE_INT_TIMEZONE)
!             *tzp = ((tm->tm_isdst > 0) ? (timezone - 3600) : timezone);
              if (tzn != NULL)
                  *tzn = tzname[(tm->tm_isdst > 0)];
  #endif
Index: src/tools/entab/entab.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/tools/entab/entab.c,v
retrieving revision 1.11
diff -c -c -r1.11 entab.c
*** src/tools/entab/entab.c    9 Jan 2002 18:21:46 -0000    1.11
--- src/tools/entab/entab.c    16 Apr 2003 17:50:01 -0000
***************
*** 12,17 ****
--- 12,19 ----
  #include <stdlib.h>
  #include <string.h>

+ #include "../include/c.h"
+
  #define NUL                '\0'

  #ifndef TRUE
***************
*** 94,104 ****
              in_file = stdin;
          else
          {
! #ifndef __CYGWIN__
!             if ((in_file = fopen(*argv, "r")) == NULL)
! #else
!             if ((in_file = fopen(*argv, "rb")) == NULL)
! #endif
                  halt("PERROR:  Can not open file %s\n", argv[0]);
              argv++;
          }
--- 96,102 ----
              in_file = stdin;
          else
          {
!             if ((in_file = fopen(*argv, PG_BINARY_R)) == NULL)
                  halt("PERROR:  Can not open file %s\n", argv[0]);
              argv++;
          }

pgsql-patches by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: [JDBC] the build
Next
From: Tom Lane
Date:
Subject: Re: Win32 defines