From 0cb6bc70cec12d4fbcb68673bd73453061de89f2 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Tue, 18 Jan 2000 19:05:31 +0000 Subject: [PATCH] Hi! Here is a patch to bring both libpq and psql to a state where it compiles on win32 (native) again. A lot of things have changed, and I have not been able to keep up with them all, so it has been broken for quite a while. After this patch, at least it compiles. It also talks "basic talk" to the server, but I have not yet tested all things. Sending queries, and using e.g. \d or \dt works fine. The rest will have to be tested further. It also bumps the version on libpq.dll to 7.0. Everything should be enclosed in #ifdef WIN32, unless I have missed something. Except for one or maybe two places where I have moved a #include that should not be used on win32 from the "global area" into a "#ifndef WIN32 area". //Magnus --- src/bin/psql/command.c | 5 +++++ src/bin/psql/common.c | 10 ++++++++++ src/bin/psql/help.c | 4 ++++ src/bin/psql/print.c | 5 +++++ src/bin/psql/startup.c | 5 +++-- src/bin/psql/win32.mak | 28 ++++++++++++++++++++++++++-- src/interfaces/libpq/fe-auth.c | 4 +++- src/interfaces/libpq/fe-connect.c | 24 +++++++++++++++++++++--- src/interfaces/libpq/fe-misc.c | 4 ++-- src/interfaces/libpq/fe-print.c | 4 +++- src/interfaces/libpq/libpq.rc | 10 +++++----- src/interfaces/libpq/libpqdll.def | 11 +++++++++++ src/interfaces/libpq/pqexpbuffer.c | 8 +++++++- src/win32.mak | 16 ++++++++++++++++ 14 files changed, 121 insertions(+), 17 deletions(-) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 6f1bc1b66d8..4ed0280c895 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -28,6 +28,7 @@ #include "variables.h" #ifdef WIN32 +#include "../../interfaces/libpq/win32.h" #define popen(x,y) _popen(x,y) #define pclose(x) _pclose(x) #endif @@ -849,7 +850,11 @@ unescape(const char *source, int encoding) unsigned int len; char *copy; const char *value; +#ifndef WIN32 void *new; +#else + char *new; +#endif len = strcspn(p + 2, "}"); copy = xstrdup(p + 2); diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index 8133faa467a..b1241bd53d8 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -111,10 +111,12 @@ setQFout(const char *fname) } /* Direct signals */ +#ifndef WIN32 if (pset.queryFoutPipe) pqsignal(SIGPIPE, SIG_IGN); else pqsignal(SIGPIPE, SIG_DFL); +#endif return status; } @@ -252,11 +254,15 @@ PSQLexec(const char *query) return NULL; cancelConn = pset.db; +#ifndef WIN32 pqsignal(SIGINT, handle_sigint); /* control-C => cancel */ +#endif res = PQexec(pset.db, query); +#ifndef WIN32 pqsignal(SIGINT, SIG_DFL); /* now control-C is back to normal */ +#endif if (PQstatus(pset.db) == CONNECTION_BAD) { @@ -345,11 +351,15 @@ SendQuery(const char *query) } cancelConn = pset.db; +#ifndef WIN32 pqsignal(SIGINT, handle_sigint); +#endif results = PQexec(pset.db, query); +#ifndef WIN32 pqsignal(SIGINT, SIG_DFL); +#endif if (results == NULL) { diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 47fc0d8fc51..18f41e84fc5 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -176,7 +176,9 @@ slashUsage(void) (fout = popen(pagerenv, "w"))) { usePipe = true; +#ifndef WIN32 pqsignal(SIGPIPE, SIG_IGN); +#endif } else fout = stdout; @@ -220,7 +222,9 @@ slashUsage(void) if (usePipe) { pclose(fout); +#ifndef WIN32 pqsignal(SIGPIPE, SIG_DFL); +#endif } } diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c index 156cdf6c653..4676d4b506e 100644 --- a/src/bin/psql/print.c +++ b/src/bin/psql/print.c @@ -922,7 +922,9 @@ printTable(const char *title, if (pager) { output = pager; +#ifndef WIN32 pqsignal(SIGPIPE, SIG_IGN); +#endif } else output = fout; @@ -963,7 +965,10 @@ printTable(const char *title, if (pager) { pclose(pager); +#ifndef WIN32 pqsignal(SIGPIPE, SIG_DFL); +#endif + } } diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 2b2a1db3d4b..c1e9fa02190 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -10,7 +10,7 @@ #ifdef WIN32 #include -#include +#include #else #include #endif @@ -223,7 +223,8 @@ main(int argc, char **argv) #ifdef WIN32 /* getopt is not in the standard includes on Win32 */ int getopt(int, char *const[], const char *); - +/* And it requires progname to be set */ +char *__progname = "psql"; #endif static void diff --git a/src/bin/psql/win32.mak b/src/bin/psql/win32.mak index 0b0228f3f62..0365a003116 100644 --- a/src/bin/psql/win32.mak +++ b/src/bin/psql/win32.mak @@ -17,8 +17,20 @@ OutDir=.\Release ALL : "$(OUTDIR)\psql.exe" CLEAN : - -@erase "$(INTDIR)\psql.obj" + -@erase "$(INTDIR)\command.obj" + -@erase "$(INTDIR)\common.obj" + -@erase "$(INTDIR)\help.obj" + -@erase "$(INTDIR)\input.obj" -@erase "$(INTDIR)\stringutils.obj" + -@erase "$(INTDIR)\mainloop.obj" + -@erase "$(INTDIR)\copy.obj" + -@erase "$(INTDIR)\startup.obj" + -@erase "$(INTDIR)\prompt.obj" + -@erase "$(INTDIR)\variables.obj" + -@erase "$(INTDIR)\large_obj.obj" + -@erase "$(INTDIR)\print.obj" + -@erase "$(INTDIR)\describe.obj" + -@erase "$(INTDIR)\tab-complete.obj" -@erase "$(INTDIR)\getopt.obj" -@erase "$(INTDIR)\vc50.idb" -@erase "$(OUTDIR)\psql.exe" @@ -46,8 +58,20 @@ LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ odbccp32.lib wsock32.lib /nologo /subsystem:console /incremental:no\ /pdb:"$(OUTDIR)\psql.pdb" /machine:I386 /out:"$(OUTDIR)\psql.exe" LINK32_OBJS= \ - "$(INTDIR)\psql.obj" \ + "$(INTDIR)\command.obj" \ + "$(INTDIR)\common.obj" \ + "$(INTDIR)\help.obj" \ + "$(INTDIR)\input.obj" \ "$(INTDIR)\stringutils.obj" \ + "$(INTDIR)\mainloop.obj" \ + "$(INTDIR)\copy.obj" \ + "$(INTDIR)\startup.obj" \ + "$(INTDIR)\prompt.obj" \ + "$(INTDIR)\variables.obj" \ + "$(INTDIR)\large_obj.obj" \ + "$(INTDIR)\print.obj" \ + "$(INTDIR)\describe.obj" \ + "$(INTDIR)\tab-complete.obj" \ "$(INTDIR)\getopt.obj" \ "..\..\interfaces\libpq\Release\libpqdll.lib" diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index fe92bd6964a..53d29a59d31 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -9,7 +9,7 @@ * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes). * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.34 1999/10/25 03:08:00 tgl Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.35 2000/01/18 19:05:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,7 +27,9 @@ * */ +#ifndef WIN32 #include "postgres.h" +#endif #include "libpq-fe.h" #include "libpq-int.h" #include "fe-auth.h" diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 818b85f0eae..a444e5bd7a8 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -7,13 +7,12 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.112 2000/01/18 06:09:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.113 2000/01/18 19:05:31 momjian Exp $ * *------------------------------------------------------------------------- */ #include -#include #include #include #include @@ -26,6 +25,7 @@ #ifdef WIN32 #include "win32.h" #else +#include #include #include #include @@ -43,6 +43,16 @@ #include "mb/pg_wchar.h" #endif +#ifdef WIN32 +static int inet_aton(const char *cp, struct in_addr *inp) { + unsigned long a = inet_addr(cp); + if (a == -1) + return 0; + inp->s_addr = a; + return 1; +} +#endif + /* ---------- * pg_setenv_state * A struct used when polling a setenv request. This is referred to externally @@ -842,7 +852,11 @@ connectDBStart(PGconn *conn) */ if (connect(conn->sock, &conn->raddr.sa, conn->raddr_len) < 0) { +#ifndef WIN32 if (errno == EINPROGRESS) +#else + if (WSAGetLastError() == WSAEINPROGRESS) +#endif { /* This is fine - we're in non-blocking mode, and the * connection is in progress. */ @@ -1036,8 +1050,12 @@ PQconnectPoll(PGconn *conn) case CONNECTION_STARTED: { SOCKET_SIZE_TYPE laddrlen; +#ifndef WIN32 int optval; - int optlen = sizeof(int); +#else + char optval; +#endif + int optlen = sizeof(optval); /* Write ready, since we've made it here, so the connection * has been made. */ diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c index a936e937427..b87ab4df98b 100644 --- a/src/interfaces/libpq/fe-misc.c +++ b/src/interfaces/libpq/fe-misc.c @@ -24,12 +24,11 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.34 2000/01/18 06:09:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.35 2000/01/18 19:05:31 momjian Exp $ * *------------------------------------------------------------------------- */ -#include #include #include #include @@ -43,6 +42,7 @@ #include "win32.h" #else #include +#include #endif #ifdef HAVE_SYS_SELECT_H diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c index d6f952d32bd..7a73a8669b8 100644 --- a/src/interfaces/libpq/fe-print.c +++ b/src/interfaces/libpq/fe-print.c @@ -9,7 +9,7 @@ * didn't really belong there. * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.29 2000/01/15 05:37:21 ishii Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.30 2000/01/18 19:05:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,8 +30,10 @@ #ifdef HAVE_TERMIOS_H #include #else +#ifndef WIN32 #include #endif +#endif #ifdef MULTIBYTE #include "mb/pg_wchar.h" diff --git a/src/interfaces/libpq/libpq.rc b/src/interfaces/libpq/libpq.rc index 9bf68cb19a9..5a6ada372ad 100644 --- a/src/interfaces/libpq/libpq.rc +++ b/src/interfaces/libpq/libpq.rc @@ -1,8 +1,8 @@ #include VS_VERSION_INFO VERSIONINFO - FILEVERSION 6,6,0,0 - PRODUCTVERSION 6,6,0,0 + FILEVERSION 7,0,0,0 + PRODUCTVERSION 7,0,0,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0 FILEOS VOS__WINDOWS32 @@ -15,13 +15,13 @@ BEGIN BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "PostgreSQL Access Library\0" - VALUE "FileVersion", "6, 6, 0, 0\0" + VALUE "FileVersion", "7, 0, 0, 0\0" VALUE "InternalName", "libpq\0" - VALUE "LegalCopyright", "Copyright (C) 1999\0" + VALUE "LegalCopyright", "Copyright (C) 2000\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "libpq.dll\0" VALUE "ProductName", "PostgreSQL\0" - VALUE "ProductVersion", "6, 6, 0, 0\0" + VALUE "ProductVersion", "7, 0, 0, 0\0" END END BLOCK "VarFileInfo" diff --git a/src/interfaces/libpq/libpqdll.def b/src/interfaces/libpq/libpqdll.def index d83bdfafd48..dc33dc0ee90 100644 --- a/src/interfaces/libpq/libpqdll.def +++ b/src/interfaces/libpq/libpqdll.def @@ -67,3 +67,14 @@ EXPORTS PQmblen @ 64 PQresultErrorMessage @ 65 PQresStatus @ 66 + termPQExpBuffer @ 67 + appendPQExpBufferChar @ 68 + initPQExpBuffer @ 69 + resetPQExpBuffer @ 70 + PQoidValue @ 71 + PQclientencoding @ 72 + PQenv2encoding @ 73 + appendBinaryPQExpBuffer @ 74 + appendPQExpBufferStr @ 75 + destroyPQExpBuffer @ 76 + createPQExpBuffer @ 77 diff --git a/src/interfaces/libpq/pqexpbuffer.c b/src/interfaces/libpq/pqexpbuffer.c index bedf456b3ce..6850a80c5b7 100644 --- a/src/interfaces/libpq/pqexpbuffer.c +++ b/src/interfaces/libpq/pqexpbuffer.c @@ -16,7 +16,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Header: /cvsroot/pgsql/src/interfaces/libpq/pqexpbuffer.c,v 1.2 2000/01/17 02:59:46 tgl Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/pqexpbuffer.c,v 1.3 2000/01/18 19:05:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -24,6 +24,12 @@ #include "postgres.h" #include "pqexpbuffer.h" +#ifdef WIN32 +#include +#include +#include "win32.h" +#endif + /* * createPQExpBuffer * diff --git a/src/win32.mak b/src/win32.mak index a7264acf543..86d9ee8216e 100644 --- a/src/win32.mak +++ b/src/win32.mak @@ -15,9 +15,25 @@ MAKEMACRO = "MULTIBYTE=$(MULTIBYTE)" !ENDIF ALL: + cd include + if not exist config.h copy config.h.win32 config.h + cd .. cd interfaces\libpq nmake /f win32.mak $(MAKEMACRO) cd ..\..\bin\psql nmake /f win32.mak $(MAKEMACRO) cd ..\.. echo All Win32 parts have been built! + +CLEAN: + cd interfaces\libpq + nmake /f win32.mak CLEAN + cd ..\..\bin\psql + nmake /f win32.mak CLEAN + cd ..\.. + echo All Win32 parts have been cleaned! + +DISTCLEAN: CLEAN + cd include + del config.h + cd .. \ No newline at end of file