Commit 0cb6bc70 authored by Bruce Momjian's avatar Bruce Momjian

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
parent 2eebcdde
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "variables.h" #include "variables.h"
#ifdef WIN32 #ifdef WIN32
#include "../../interfaces/libpq/win32.h"
#define popen(x,y) _popen(x,y) #define popen(x,y) _popen(x,y)
#define pclose(x) _pclose(x) #define pclose(x) _pclose(x)
#endif #endif
...@@ -849,7 +850,11 @@ unescape(const char *source, int encoding) ...@@ -849,7 +850,11 @@ unescape(const char *source, int encoding)
unsigned int len; unsigned int len;
char *copy; char *copy;
const char *value; const char *value;
#ifndef WIN32
void *new; void *new;
#else
char *new;
#endif
len = strcspn(p + 2, "}"); len = strcspn(p + 2, "}");
copy = xstrdup(p + 2); copy = xstrdup(p + 2);
......
...@@ -111,10 +111,12 @@ setQFout(const char *fname) ...@@ -111,10 +111,12 @@ setQFout(const char *fname)
} }
/* Direct signals */ /* Direct signals */
#ifndef WIN32
if (pset.queryFoutPipe) if (pset.queryFoutPipe)
pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGPIPE, SIG_IGN);
else else
pqsignal(SIGPIPE, SIG_DFL); pqsignal(SIGPIPE, SIG_DFL);
#endif
return status; return status;
} }
...@@ -252,11 +254,15 @@ PSQLexec(const char *query) ...@@ -252,11 +254,15 @@ PSQLexec(const char *query)
return NULL; return NULL;
cancelConn = pset.db; cancelConn = pset.db;
#ifndef WIN32
pqsignal(SIGINT, handle_sigint); /* control-C => cancel */ pqsignal(SIGINT, handle_sigint); /* control-C => cancel */
#endif
res = PQexec(pset.db, query); res = PQexec(pset.db, query);
#ifndef WIN32
pqsignal(SIGINT, SIG_DFL); /* now control-C is back to normal */ pqsignal(SIGINT, SIG_DFL); /* now control-C is back to normal */
#endif
if (PQstatus(pset.db) == CONNECTION_BAD) if (PQstatus(pset.db) == CONNECTION_BAD)
{ {
...@@ -345,11 +351,15 @@ SendQuery(const char *query) ...@@ -345,11 +351,15 @@ SendQuery(const char *query)
} }
cancelConn = pset.db; cancelConn = pset.db;
#ifndef WIN32
pqsignal(SIGINT, handle_sigint); pqsignal(SIGINT, handle_sigint);
#endif
results = PQexec(pset.db, query); results = PQexec(pset.db, query);
#ifndef WIN32
pqsignal(SIGINT, SIG_DFL); pqsignal(SIGINT, SIG_DFL);
#endif
if (results == NULL) if (results == NULL)
{ {
......
...@@ -176,7 +176,9 @@ slashUsage(void) ...@@ -176,7 +176,9 @@ slashUsage(void)
(fout = popen(pagerenv, "w"))) (fout = popen(pagerenv, "w")))
{ {
usePipe = true; usePipe = true;
#ifndef WIN32
pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGPIPE, SIG_IGN);
#endif
} }
else else
fout = stdout; fout = stdout;
...@@ -220,7 +222,9 @@ slashUsage(void) ...@@ -220,7 +222,9 @@ slashUsage(void)
if (usePipe) if (usePipe)
{ {
pclose(fout); pclose(fout);
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL); pqsignal(SIGPIPE, SIG_DFL);
#endif
} }
} }
......
...@@ -922,7 +922,9 @@ printTable(const char *title, ...@@ -922,7 +922,9 @@ printTable(const char *title,
if (pager) if (pager)
{ {
output = pager; output = pager;
#ifndef WIN32
pqsignal(SIGPIPE, SIG_IGN); pqsignal(SIGPIPE, SIG_IGN);
#endif
} }
else else
output = fout; output = fout;
...@@ -963,7 +965,10 @@ printTable(const char *title, ...@@ -963,7 +965,10 @@ printTable(const char *title,
if (pager) if (pager)
{ {
pclose(pager); pclose(pager);
#ifndef WIN32
pqsignal(SIGPIPE, SIG_DFL); pqsignal(SIGPIPE, SIG_DFL);
#endif
} }
} }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#ifdef WIN32 #ifdef WIN32
#include <io.h> #include <io.h>
#include <window.h> #include <windows.h>
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
...@@ -223,7 +223,8 @@ main(int argc, char **argv) ...@@ -223,7 +223,8 @@ main(int argc, char **argv)
#ifdef WIN32 #ifdef WIN32
/* getopt is not in the standard includes on Win32 */ /* getopt is not in the standard includes on Win32 */
int getopt(int, char *const[], const char *); int getopt(int, char *const[], const char *);
/* And it requires progname to be set */
char *__progname = "psql";
#endif #endif
static void static void
......
...@@ -17,8 +17,20 @@ OutDir=.\Release ...@@ -17,8 +17,20 @@ OutDir=.\Release
ALL : "$(OUTDIR)\psql.exe" ALL : "$(OUTDIR)\psql.exe"
CLEAN : 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)\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)\getopt.obj"
-@erase "$(INTDIR)\vc50.idb" -@erase "$(INTDIR)\vc50.idb"
-@erase "$(OUTDIR)\psql.exe" -@erase "$(OUTDIR)\psql.exe"
...@@ -46,8 +58,20 @@ LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ ...@@ -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\ odbccp32.lib wsock32.lib /nologo /subsystem:console /incremental:no\
/pdb:"$(OUTDIR)\psql.pdb" /machine:I386 /out:"$(OUTDIR)\psql.exe" /pdb:"$(OUTDIR)\psql.pdb" /machine:I386 /out:"$(OUTDIR)\psql.exe"
LINK32_OBJS= \ LINK32_OBJS= \
"$(INTDIR)\psql.obj" \ "$(INTDIR)\command.obj" \
"$(INTDIR)\common.obj" \
"$(INTDIR)\help.obj" \
"$(INTDIR)\input.obj" \
"$(INTDIR)\stringutils.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" \ "$(INTDIR)\getopt.obj" \
"..\..\interfaces\libpq\Release\libpqdll.lib" "..\..\interfaces\libpq\Release\libpqdll.lib"
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes). * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
* *
* IDENTIFICATION * 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 @@ ...@@ -27,7 +27,9 @@
* *
*/ */
#ifndef WIN32
#include "postgres.h" #include "postgres.h"
#endif
#include "libpq-fe.h" #include "libpq-fe.h"
#include "libpq-int.h" #include "libpq-int.h"
#include "fe-auth.h" #include "fe-auth.h"
......
...@@ -7,13 +7,12 @@ ...@@ -7,13 +7,12 @@
* *
* *
* IDENTIFICATION * 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 <sys/types.h> #include <sys/types.h>
#include <sys/socket.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>
#include <ctype.h> #include <ctype.h>
...@@ -26,6 +25,7 @@ ...@@ -26,6 +25,7 @@
#ifdef WIN32 #ifdef WIN32
#include "win32.h" #include "win32.h"
#else #else
#include <sys/socket.h>
#include <unistd.h> #include <unistd.h>
#include <netdb.h> #include <netdb.h>
#include <netinet/tcp.h> #include <netinet/tcp.h>
...@@ -43,6 +43,16 @@ ...@@ -43,6 +43,16 @@
#include "mb/pg_wchar.h" #include "mb/pg_wchar.h"
#endif #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 * pg_setenv_state
* A struct used when polling a setenv request. This is referred to externally * A struct used when polling a setenv request. This is referred to externally
...@@ -842,7 +852,11 @@ connectDBStart(PGconn *conn) ...@@ -842,7 +852,11 @@ connectDBStart(PGconn *conn)
*/ */
if (connect(conn->sock, &conn->raddr.sa, conn->raddr_len) < 0) if (connect(conn->sock, &conn->raddr.sa, conn->raddr_len) < 0)
{ {
#ifndef WIN32
if (errno == EINPROGRESS) if (errno == EINPROGRESS)
#else
if (WSAGetLastError() == WSAEINPROGRESS)
#endif
{ {
/* This is fine - we're in non-blocking mode, and the /* This is fine - we're in non-blocking mode, and the
* connection is in progress. */ * connection is in progress. */
...@@ -1036,8 +1050,12 @@ PQconnectPoll(PGconn *conn) ...@@ -1036,8 +1050,12 @@ PQconnectPoll(PGconn *conn)
case CONNECTION_STARTED: case CONNECTION_STARTED:
{ {
SOCKET_SIZE_TYPE laddrlen; SOCKET_SIZE_TYPE laddrlen;
#ifndef WIN32
int optval; 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 /* Write ready, since we've made it here, so the connection
* has been made. */ * has been made. */
......
...@@ -24,12 +24,11 @@ ...@@ -24,12 +24,11 @@
* *
* *
* IDENTIFICATION * 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 <sys/time.h>
#include <errno.h> #include <errno.h>
#include <signal.h> #include <signal.h>
#include <time.h> #include <time.h>
...@@ -43,6 +42,7 @@ ...@@ -43,6 +42,7 @@
#include "win32.h" #include "win32.h"
#else #else
#include <unistd.h> #include <unistd.h>
#include <sys/time.h>
#endif #endif
#ifdef HAVE_SYS_SELECT_H #ifdef HAVE_SYS_SELECT_H
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* didn't really belong there. * didn't really belong there.
* *
* IDENTIFICATION * 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 @@ ...@@ -30,8 +30,10 @@
#ifdef HAVE_TERMIOS_H #ifdef HAVE_TERMIOS_H
#include <termios.h> #include <termios.h>
#else #else
#ifndef WIN32
#include <sys/termios.h> #include <sys/termios.h>
#endif #endif
#endif
#ifdef MULTIBYTE #ifdef MULTIBYTE
#include "mb/pg_wchar.h" #include "mb/pg_wchar.h"
......
#include <winver.h> #include <winver.h>
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 6,6,0,0 FILEVERSION 7,0,0,0
PRODUCTVERSION 6,6,0,0 PRODUCTVERSION 7,0,0,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
FILEFLAGS 0 FILEFLAGS 0
FILEOS VOS__WINDOWS32 FILEOS VOS__WINDOWS32
...@@ -15,13 +15,13 @@ BEGIN ...@@ -15,13 +15,13 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "\0" VALUE "CompanyName", "\0"
VALUE "FileDescription", "PostgreSQL Access Library\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 "InternalName", "libpq\0"
VALUE "LegalCopyright", "Copyright (C) 1999\0" VALUE "LegalCopyright", "Copyright (C) 2000\0"
VALUE "LegalTrademarks", "\0" VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libpq.dll\0" VALUE "OriginalFilename", "libpq.dll\0"
VALUE "ProductName", "PostgreSQL\0" VALUE "ProductName", "PostgreSQL\0"
VALUE "ProductVersion", "6, 6, 0, 0\0" VALUE "ProductVersion", "7, 0, 0, 0\0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"
......
...@@ -67,3 +67,14 @@ EXPORTS ...@@ -67,3 +67,14 @@ EXPORTS
PQmblen @ 64 PQmblen @ 64
PQresultErrorMessage @ 65 PQresultErrorMessage @ 65
PQresStatus @ 66 PQresStatus @ 66
termPQExpBuffer @ 67
appendPQExpBufferChar @ 68
initPQExpBuffer @ 69
resetPQExpBuffer @ 70
PQoidValue @ 71
PQclientencoding @ 72
PQenv2encoding @ 73
appendBinaryPQExpBuffer @ 74
appendPQExpBufferStr @ 75
destroyPQExpBuffer @ 76
createPQExpBuffer @ 77
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * 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 @@ ...@@ -24,6 +24,12 @@
#include "postgres.h" #include "postgres.h"
#include "pqexpbuffer.h" #include "pqexpbuffer.h"
#ifdef WIN32
#include <stdarg.h>
#include <stdio.h>
#include "win32.h"
#endif
/* /*
* createPQExpBuffer * createPQExpBuffer
* *
......
...@@ -15,9 +15,25 @@ MAKEMACRO = "MULTIBYTE=$(MULTIBYTE)" ...@@ -15,9 +15,25 @@ MAKEMACRO = "MULTIBYTE=$(MULTIBYTE)"
!ENDIF !ENDIF
ALL: ALL:
cd include
if not exist config.h copy config.h.win32 config.h
cd ..
cd interfaces\libpq cd interfaces\libpq
nmake /f win32.mak $(MAKEMACRO) nmake /f win32.mak $(MAKEMACRO)
cd ..\..\bin\psql cd ..\..\bin\psql
nmake /f win32.mak $(MAKEMACRO) nmake /f win32.mak $(MAKEMACRO)
cd ..\.. cd ..\..
echo All Win32 parts have been built! 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment