Allow interfaces to compile under MingGW/Win32 by adding _P to symbols
authorBruce Momjian
Fri, 16 May 2003 04:59:24 +0000 (04:59 +0000)
committerBruce Momjian
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 ef40360ca6568e50f8ebe8cc012068e4a9eae800..f42067d29ab2effd39d25666dc30b4497de1c1fd 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 36bb246e9b52fea68119dcc4caf72320e58d4a8f..747a2d757c805312d66de4fd3dd934932bb264ba 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 .
- */
-#define isnan _isnan
-#define finite _finite
-extern double rint(double x);
-
-/*
- * Supplement to .
- */
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
index 68f2f112c532ed2ec579bfb6de43e87c0c56eaa8..04c55f5b3f2bbc99157993acd8991a27af909eb8 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 b294ac229087cc210e3600b27aa96a14b375d8fe..e0e80f8fe3b35adad9d7c3cf3fe159f76f54715a 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 4e9374f3d02796882b7eaedc25bb42210165895b..276f8ccd9a0f0d46552b627c4eba8d812b3afb7c 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  ABORT_P ABSOLUTE ACCESS ACTION ADD AFTER
+%token  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;
+}
+