OSDN Git Service

Allow interfaces to compile under MingGW/Win32 by adding _P to symbols
authorBruce Momjian <bruce@momjian.us>
Fri, 16 May 2003 04:59:24 +0000 (04:59 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 16 May 2003 04:59:24 +0000 (04:59 +0000)
in ecpg.

src/include/port.h
src/include/port/win32.h
src/interfaces/ecpg/preproc/c_keywords.c
src/interfaces/ecpg/preproc/keywords.c
src/interfaces/ecpg/preproc/preproc.y
src/port/gettimeofday.c [new file with mode: 0644]

index ef40360..f42067d 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: port.h,v 1.2 2003/05/16 01:57:51 momjian Exp $
+ * $Id: port.h,v 1.3 2003/05/16 04:59:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,6 +34,7 @@ int pgunlink(const char *path);
 #endif
 
 extern int copydir(char *fromdir,char *todir);
+/* Last parameter not used */
 extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
 
 #else
index 36bb246..747a2d7 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/include/port/win32.h,v 1.10 2003/05/15 16:35:29 momjian Exp $ */
+/* $Header: /cvsroot/pgsql/src/include/port/win32.h,v 1.11 2003/05/16 04:59:22 momjian Exp $ */
 
 /* undefine and redefine after #include */
 #undef mkdir
@@ -164,15 +164,3 @@ struct timezone
 #define ECONNRESET WSAECONNRESET
 #define EINPROGRESS WSAEINPROGRESS
 
-/*
- * Supplement to <math.h>.
- */
-#define isnan _isnan
-#define finite _finite
-extern double rint(double x);
-
-/*
- * Supplement to <stdio.h>.
- */
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
index 68f2f11..04c55f5 100644 (file)
@@ -25,11 +25,11 @@ static ScanKeyword ScanKeywords[] = {
        {"bool", SQL_BOOL},
        {"char", CHAR_P},
        {"const", S_CONST},
-       {"double", DOUBLE},
+       {"double", DOUBLE_P},
        {"enum", SQL_ENUM},
        {"extern", S_EXTERN},
        {"float", FLOAT_P},
-       {"int", INT},
+       {"int", INT_P},
        {"long", SQL_LONG},
        {"register", S_REGISTER},
        {"short", SQL_SHORT},
index b294ac2..e0e80f8 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.56 2003/02/14 13:17:13 meskes Exp $
+ *       $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.57 2003/05/16 04:59:22 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,7 +29,7 @@
 static ScanKeyword ScanKeywords[] = {
        /* name, value */
        {"abort", ABORT_P},
-       {"absolute", ABSOLUTE},
+       {"absolute", ABSOLUTE_P},
        {"access", ACCESS},
        {"action", ACTION},
        {"add", ADD},
@@ -54,7 +54,7 @@ static ScanKeyword ScanKeywords[] = {
        {"bigint", BIGINT},
        {"binary", BINARY},
        {"bit", BIT},
-       {"boolean", BOOLEAN},
+       {"boolean", BOOLEAN_P},
        {"both", BOTH},
        {"by", BY},
        {"cache", CACHE},
@@ -96,7 +96,7 @@ static ScanKeyword ScanKeywords[] = {
        {"day", DAY_P},
        {"deallocate", DEALLOCATE},
        {"dec", DEC},
-       {"decimal", DECIMAL},
+       {"decimal", DECIMAL_P},
        {"declare", DECLARE},
        {"default", DEFAULT},
        {"deferrable", DEFERRABLE},
@@ -109,7 +109,7 @@ static ScanKeyword ScanKeywords[] = {
        {"distinct", DISTINCT},
        {"do", DO},
        {"domain", DOMAIN_P},
-       {"double", DOUBLE},
+       {"double", DOUBLE_P},
        {"drop", DROP},
        {"each", EACH},
        {"else", ELSE},
@@ -153,11 +153,11 @@ static ScanKeyword ScanKeywords[] = {
        {"initially", INITIALLY},
        {"inner", INNER_P},
        {"inout", INOUT},
-       {"input", INPUT},
+       {"input", INPUT_P},
        {"insensitive", INSENSITIVE},
        {"insert", INSERT},
        {"instead", INSTEAD},
-       {"int", INT},
+       {"int", INT_P},
        {"integer", INTEGER},
        {"intersect", INTERSECT},
        {"interval", INTERVAL},
@@ -237,7 +237,7 @@ static ScanKeyword ScanKeywords[] = {
        {"recheck", RECHECK},
        {"references", REFERENCES},
        {"reindex", REINDEX},
-       {"relative", RELATIVE},
+       {"relative", RELATIVE_P},
        {"rename", RENAME},
        {"replace", REPLACE},
        {"reset", RESET},
@@ -273,7 +273,7 @@ static ScanKeyword ScanKeywords[] = {
        {"stdin", STDIN},
        {"stdout", STDOUT},
        {"storage", STORAGE},
-       {"strict", STRICT},
+       {"strict", STRICT_P},
        {"substring", SUBSTRING},
        {"sysid", SYSID},
        {"table", TABLE},
index 4e9374f..276f8cc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.217 2003/05/14 14:37:35 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.218 2003/05/16 04:59:22 momjian Exp $ */
 
 /* Copyright comment */
 %{
@@ -177,12 +177,12 @@ make_name(void)
 %token TYPECAST
 
 /* ordinary key words in alphabetical order */
-%token <keyword> ABORT_P ABSOLUTE ACCESS ACTION ADD AFTER
+%token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD AFTER
         AGGREGATE ALL ALTER ANALYSE ANALYZE AND ANY AS ASC
        ASSERTION ASSIGNMENT AT AUTHORIZATION
 
         BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT
-        BOOLEAN BOTH BY
+        BOOLEAN_P BOTH BY
 
         CACHE CALLED CASCADE CASE CAST CHAIN CHAR_P
        CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE
@@ -191,9 +191,9 @@ make_name(void)
         CREATE CREATEDB CREATEUSER CROSS CURRENT_DATE CURRENT_TIME
         CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
 
-        DATABASE DAY_P DEALLOCATE DEC DECIMAL DECLARE DEFAULT
+        DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT
        DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS
-       DESC DISTINCT DO DOMAIN_P DOUBLE DROP
+       DESC DISTINCT DO DOMAIN_P DOUBLE_P DROP
         EACH ELSE ENCODING ENCRYPTED END_P ESCAPE EXCEPT EXCLUSIVE
         EXECUTE EXISTS EXPLAIN EXTERNAL EXTRACT
 
@@ -204,7 +204,7 @@ make_name(void)
         HANDLER HAVING HOUR_P
 
        ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IN_P INCREMENT INDEX INHERITS
-        INITIALLY INNER_P INOUT INPUT INSENSITIVE INSERT INSTEAD INT
+        INITIALLY INNER_P INOUT INPUT_P INSENSITIVE INSERT INSTEAD INT_P
         INTEGER INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION
 
         JOIN
@@ -226,12 +226,12 @@ make_name(void)
        PARTIAL PASSWORD PATH_P PENDANT PLACING POSITION
        PRECISION PRESERVE PREPARE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE
 
-       READ REAL RECHECK REFERENCES REINDEX RELATIVE RENAME REPLACE
+       READ REAL RECHECK REFERENCES REINDEX RELATIVE_P RENAME REPLACE
        RESET RESTRICT RETURNS REVOKE RIGHT ROLLBACK ROW ROWS RULE
 
        SCHEMA SCROLL SECOND_P SECURITY SELECT SEQUENCE SERIALIZABLE
         SESSION SESSION_USER SET SETOF SHARE SHOW SIMILAR SIMPLE SMALLINT SOME
-        STABLE START STATEMENT STATISTICS STDIN STDOUT STORAGE STRICT
+        STABLE START STATEMENT STATISTICS STDIN STDOUT STORAGE STRICT_P
         SUBSTRING SYSID
 
         TABLE TEMP TEMPLATE TEMPORARY THEN TIME TIMESTAMP TO TOAST
@@ -1688,8 +1688,8 @@ FetchStmt: FETCH direction fetch_how_many from_in name ecpg_into
 
 direction:     FORWARD         { $$ = make_str("forward"); }
                | BACKWARD              { $$ = make_str("backward"); }
-               | RELATIVE              { $$ = make_str("relative"); }
-               | ABSOLUTE
+               | RELATIVE_P            { $$ = make_str("relative"); }
+               | ABSOLUTE_P
                {
                        mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported FETCH/ABSOLUTE will be passed to backend, backend will use RELATIVE");
                        $$ = make_str("absolute");
@@ -1973,11 +1973,11 @@ createfunc_opt_item: AS func_as
                                { $$ = make_str("stable"); }
                | VOLATILE
                                { $$ = make_str("volatile"); }
-               | CALLED ON NULL_P INPUT
+               | CALLED ON NULL_P INPUT_P
                                { $$ = make_str("called on null input"); }
-               | RETURNS NULL_P ON NULL_P INPUT
+               | RETURNS NULL_P ON NULL_P INPUT_P
                                { $$ = make_str("returns null on null input"); }
-               | STRICT
+               | STRICT_P
                                { $$ = make_str("strict"); }
                | EXTERNAL SECURITY DEFINER
                                { $$ = make_str("external security definer"); }
@@ -3010,7 +3010,7 @@ GenericType:  type_name                   { $$ = $1; }
  * Provide real DECIMAL() and NUMERIC() implementations now - Jan 1998-12-30
  * - thomas 1997-09-18
  */
-Numeric:  INT
+Numeric:  INT_P
                        { $$ = make_str("int"); }
                | INTEGER
                        { $$ = make_str("integer"); }
@@ -3022,15 +3022,15 @@ Numeric:  INT
                        { $$ = make_str("real"); }
                | FLOAT_P opt_float
                        { $$ = cat2_str(make_str("float"), $2); }
-               | DOUBLE PRECISION
+               | DOUBLE_P PRECISION
                        { $$ = make_str("double precision"); }
-               | DECIMAL opt_decimal
+               | DECIMAL_P opt_decimal
                        { $$ = cat2_str(make_str("decimal"), $2); }
                | DEC opt_decimal
                        { $$ = cat2_str(make_str("dec"), $2); }
                | NUMERIC opt_numeric
                        { $$ = cat2_str(make_str("numeric"), $2); }
-               | BOOLEAN
+               | BOOLEAN_P
                        { $$ = make_str("boolean"); }
                ;
 
@@ -4607,11 +4607,11 @@ simple_type: unsigned_type                                      { $$=$1; }
                ;
 
 unsigned_type: SQL_UNSIGNED SQL_SHORT          { $$ = ECPGt_unsigned_short; }
-               | SQL_UNSIGNED SQL_SHORT INT    { $$ = ECPGt_unsigned_short; }
+               | SQL_UNSIGNED SQL_SHORT INT_P  { $$ = ECPGt_unsigned_short; }
                | SQL_UNSIGNED                                          { $$ = ECPGt_unsigned_int; }
-               | SQL_UNSIGNED INT                              { $$ = ECPGt_unsigned_int; }
+               | SQL_UNSIGNED INT_P                            { $$ = ECPGt_unsigned_int; }
                | SQL_UNSIGNED SQL_LONG                         { $$ = ECPGt_unsigned_long; }
-               | SQL_UNSIGNED SQL_LONG INT             { $$ = ECPGt_unsigned_long; }
+               | SQL_UNSIGNED SQL_LONG INT_P           { $$ = ECPGt_unsigned_long; }
                | SQL_UNSIGNED SQL_LONG SQL_LONG
                {
 #ifdef HAVE_LONG_LONG_INT_64
@@ -4620,7 +4620,7 @@ unsigned_type: SQL_UNSIGNED SQL_SHORT             { $$ = ECPGt_unsigned_short; }
                        $$ = ECPGt_unsigned_long;
 #endif
                }
-               | SQL_UNSIGNED SQL_LONG SQL_LONG INT
+               | SQL_UNSIGNED SQL_LONG SQL_LONG INT_P
                {
 #ifdef HAVE_LONG_LONG_INT_64
                        $$ = ECPGt_unsigned_long_long;
@@ -4632,10 +4632,10 @@ unsigned_type: SQL_UNSIGNED SQL_SHORT           { $$ = ECPGt_unsigned_short; }
                ;
 
 signed_type: SQL_SHORT                         { $$ = ECPGt_short; }
-               | SQL_SHORT INT                 { $$ = ECPGt_short; }
-               | INT                                   { $$ = ECPGt_int; }
+               | SQL_SHORT INT_P                       { $$ = ECPGt_short; }
+               | INT_P                                 { $$ = ECPGt_int; }
                | SQL_LONG                                      { $$ = ECPGt_long; }
-               | SQL_LONG INT                  { $$ = ECPGt_long; }
+               | SQL_LONG INT_P                        { $$ = ECPGt_long; }
                | SQL_LONG SQL_LONG
                {
 #ifdef HAVE_LONG_LONG_INT_64
@@ -4644,7 +4644,7 @@ signed_type: SQL_SHORT                            { $$ = ECPGt_short; }
                        $$ = ECPGt_long;
 #endif
                }
-               | SQL_LONG SQL_LONG INT
+               | SQL_LONG SQL_LONG INT_P
                {
 #ifdef HAVE_LONG_LONG_INT_64
                        $$ = ECPGt_long_long;
@@ -5318,7 +5318,7 @@ function_name:    ident                                           { $$ = $1; }
 ColLabel:  ECPGColLabel                                        { $$ = $1; }
                | ECPGTypeName                                  { $$ = $1; }
                | CHAR_P                                                { $$ = make_str("char"); }
-               | INT                                                   { $$ = make_str("int"); }
+               | INT_P                                                 { $$ = make_str("int"); }
                | UNION                                                 { $$ = make_str("union"); }
                ;
 
@@ -5346,8 +5346,8 @@ ECPGColLabel:  ECPGColLabelCommon                 { $$ = $1; }
 /* "Unreserved" keywords --- available for use as any kind of name.
  */
 unreserved_keyword:
-                 ABORT_P                                       { $$ = make_str("abort"); }
-               | ABSOLUTE                                              { $$ = make_str("absolute"); }
+                 ABORT_P                                               { $$ = make_str("abort"); }
+               | ABSOLUTE_P                                    { $$ = make_str("absolute"); }
                | ACCESS                                                { $$ = make_str("access"); }
                | ACTION                                                { $$ = make_str("action"); }
                | ADD                                                   { $$ = make_str("add"); }
@@ -5355,11 +5355,11 @@ unreserved_keyword:
                | AGGREGATE                                             { $$ = make_str("aggregate"); }
                | ALTER                                                 { $$ = make_str("alter"); }
                | ASSERTION                                             { $$ = make_str("assertion"); }
-               | ASSIGNMENT                                            { $$ = make_str("assignment"); }
+               | ASSIGNMENT                                    { $$ = make_str("assignment"); }
                | AT                                                    { $$ = make_str("at"); }
                | BACKWARD                                              { $$ = make_str("backward"); }
                | BEFORE                                                { $$ = make_str("before"); }
-               | BEGIN_P                                       { $$ = make_str("begin"); }
+               | BEGIN_P                                               { $$ = make_str("begin"); }
                | BY                                                    { $$ = make_str("by"); }
                | CACHE                                                 { $$ = make_str("cache"); }
                | CASCADE                                               { $$ = make_str("cascade"); }
@@ -5372,8 +5372,8 @@ unreserved_keyword:
                | COMMENT                                               { $$ = make_str("comment"); }
                | COMMIT                                                { $$ = make_str("commit"); }
                | COMMITTED                                             { $$ = make_str("committed"); }
-               | CONSTRAINTS                                           { $$ = make_str("constraints"); }
-               | CONVERSION_P                                          { $$ = make_str("conversion"); }
+               | CONSTRAINTS                                   { $$ = make_str("constraints"); }
+               | CONVERSION_P                                  { $$ = make_str("conversion"); }
                | COPY                                                  { $$ = make_str("copy"); }
                | CREATEDB                                              { $$ = make_str("createdb"); }
                | CREATEUSER                                    { $$ = make_str("createuser"); }
@@ -5381,14 +5381,14 @@ unreserved_keyword:
                | CYCLE                                                 { $$ = make_str("cycle"); }
                | DATABASE                                              { $$ = make_str("database"); }
                | DAY_P                                                 { $$ = make_str("day"); }
-               | DEALLOCATE                                            { $$ = make_str("deallocate"); }
+               | DEALLOCATE                                    { $$ = make_str("deallocate"); }
                | DECLARE                                               { $$ = make_str("declare"); }
                | DEFERRED                                              { $$ = make_str("deferred"); }
                | DELETE_P                                              { $$ = make_str("delete"); }
-               | DELIMITER                                     { $$ = make_str("delimiter"); }
+               | DELIMITER                                             { $$ = make_str("delimiter"); }
                | DELIMITERS                                    { $$ = make_str("delimiters"); }
-               | DOMAIN_P                                      { $$ = make_str("domain"); }
-               | DOUBLE                                                { $$ = make_str("double"); }
+               | DOMAIN_P                                              { $$ = make_str("domain"); }
+               | DOUBLE_P                                              { $$ = make_str("double"); }
                | DROP                                                  { $$ = make_str("drop"); }
                | EACH                                                  { $$ = make_str("each"); }
                | ENCODING                                              { $$ = make_str("encoding"); }
@@ -5406,7 +5406,7 @@ unreserved_keyword:
                | HOUR_P                                                { $$ = make_str("hour"); }
                | IMMEDIATE                                             { $$ = make_str("immediate"); }
                | IMMUTABLE                                             { $$ = make_str("immutable"); }
-               | IMPLICIT_P                                            { $$ = make_str("implicit"); }
+               | IMPLICIT_P                                    { $$ = make_str("implicit"); }
                | INCREMENT                                             { $$ = make_str("increment"); }
                | INDEX                                                 { $$ = make_str("index"); }
                | INHERITS                                              { $$ = make_str("inherits"); }
@@ -5416,7 +5416,7 @@ unreserved_keyword:
                | INSTEAD                                               { $$ = make_str("instead"); }
                | ISOLATION                                             { $$ = make_str("isolation"); }
                | KEY                                                   { $$ = make_str("key"); }
-               | LANCOMPILER                                           { $$ = make_str("lancompiler"); }
+               | LANCOMPILER                                   { $$ = make_str("lancompiler"); }
                | LANGUAGE                                              { $$ = make_str("language"); }
                | LEVEL                                                 { $$ = make_str("level"); }
                | LISTEN                                                { $$ = make_str("listen"); }
@@ -5459,7 +5459,7 @@ unreserved_keyword:
                | READ                                                  { $$ = make_str("read"); }
                | RECHECK                                               { $$ = make_str("recheck"); }
                | REINDEX                                               { $$ = make_str("reindex"); }
-               | RELATIVE                                              { $$ = make_str("relative"); }
+               | RELATIVE_P                                    { $$ = make_str("relative"); }
                | RENAME                                                { $$ = make_str("rename"); }
                | REPLACE                                               { $$ = make_str("replace"); }
                | RESET                                                 { $$ = make_str("reset"); }
@@ -5536,12 +5536,12 @@ col_name_keyword:
                | COALESCE              { $$ = make_str("coalesce"); }
                | CONVERT               { $$ = make_str("convert"); }
                | DEC                   { $$ = make_str("dec"); }
-               | DECIMAL               { $$ = make_str("decimal"); }
+               | DECIMAL_P             { $$ = make_str("decimal"); }
                | EXISTS                { $$ = make_str("exists"); }
                | EXTRACT               { $$ = make_str("extract"); }
                | FLOAT_P               { $$ = make_str("float"); }
 /* INT must be excluded from ECPGColLabel because of conflict
-               | INT                   { $$ = make_str("int"); }
+               | INT_P                 { $$ = make_str("int"); }
  */
                | INTEGER               { $$ = make_str("integer"); }
                | INTERVAL              { $$ = make_str("interval"); }
@@ -5628,7 +5628,7 @@ reserved_keyword:
                | DISTINCT                                              { $$ = make_str("distinct"); }
                | DO                                                    { $$ = make_str("do"); }
                | ELSE                                                  { $$ = make_str("else"); }
-               | END_P                                         { $$ = make_str("end"); }
+               | END_P                                                 { $$ = make_str("end"); }
                | EXCEPT                                                { $$ = make_str("except"); }
                | FALSE_P                                               { $$ = make_str("false"); }
                | FOR                                                   { $$ = make_str("for"); }
@@ -5784,17 +5784,16 @@ c_anything:  IDENT                                      { $$ = $1; }
                | S_RSHIFT                                      { $$ = make_str(">>"); }
                | S_STATIC                                      { $$ = make_str("static"); }
                | S_SUB                                         { $$ = make_str("-="); }
-               | S_TYPEDEF                             { $$ = make_str("typedef"); }
+               | S_TYPEDEF                                     { $$ = make_str("typedef"); }
                | SQL_BOOL                                      { $$ = make_str("bool"); }
                | SQL_ENUM                                      { $$ = make_str("enum"); }
-               | INT                                   { $$ = make_str("int"); }
+               | INT_P                                         { $$ = make_str("int"); }
                | SQL_LONG                                      { $$ = make_str("long"); }
                | SQL_SHORT                                     { $$ = make_str("short"); }
                | SQL_SIGNED                            { $$ = make_str("signed"); }
                | SQL_STRUCT                            { $$ = make_str("struct"); }
                | SQL_UNSIGNED                          { $$ = make_str("unsigned"); }
                | CHAR_P                                        { $$ = make_str("char"); }
-               | DOUBLE                                        { $$ = make_str("double"); }
                | FLOAT_P                                       { $$ = make_str("float"); }
                | UNION                                         { $$ = make_str("union"); }
                | VARCHAR                                       { $$ = make_str("varchar"); }
diff --git a/src/port/gettimeofday.c b/src/port/gettimeofday.c
new file mode 100644 (file)
index 0000000..3e2a670
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * $Header: /cvsroot/pgsql/src/port/gettimeofday.c,v 1.1 2003/05/16 04:59:24 momjian Exp $
+ *
+ * Copyright (c) 2003 SRA, Inc.
+ * Copyright (c) 2003 SKC, Inc.
+ *
+ * Permission to use, copy, modify, and distribute this software and
+ * its documentation for any purpose, without fee, and without a
+ * written agreement is hereby granted, provided that the above
+ * copyright notice and this paragraph and the following two
+ * paragraphs appear in all copies.
+ *
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
+ * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+ * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+ * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS
+ * IS" BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
+ * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#include "postgres.h"
+
+#include "sys/time.h"
+
+/* FILETIME of Jan 1 1970 00:00:00. */
+static const unsigned __int64 epoch = 116444736000000000L;
+
+/*
+ * timezone information is stored outside the kernel so tzp isn't used anymore.
+ */
+int
+gettimeofday(struct timeval *tp, struct timezone *tzp)
+{
+       FILETIME                file_time;
+       SYSTEMTIME              system_time;
+       ULARGE_INTEGER  ularge;
+
+       GetSystemTime(&system_time);
+       SystemTimeToFileTime(&system_time, &file_time);
+       ularge.LowPart = file_time.dwLowDateTime;
+       ularge.HighPart = file_time.dwHighDateTime;
+
+       tp->tv_sec  = (long)((ularge.QuadPart - epoch) / 10000000L);
+       tp->tv_usec = (long)(system_time.wMilliseconds * 1000);
+
+       return 0;
+}
+