From b6d2faaf24cb7f39c66667d2c1d1472f3c9ab4f8 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Sat, 20 Jul 2002 05:43:31 +0000
Subject: [PATCH] Hello, i noticed that win32 native stopped working/compiling
 after the SSL merge . So i took the opportunity to fix some stuff:

1. Made the thing compile (typos & needed definitions) with the new pqsecure_* s
tuff, and added fe-secure.c to the win32.mak makefile.
2. Fixed some MULTIBYTE compile errors (when building without MB support).
3. Made it do that you can build with debug info: "nmake -f win32.mak DEBUG=1".
4. Misc small compiler speedup changes.

The resulting .dll has been tested in production, and everything seems ok.
I CC:ed -hackers because i'm not sure about two things:

1. In libpq-int.h I typedef ssize_t as an int because Visual C (v6.0)
doesn't de fine ssize_t. Is that ok, or is there any standard about what
type should be use d for ssize_t?

2. To keep the .dll api consistent regarding MULTIBYTE I just return -1
in fe-connect.c:PQsetClientEncoding() instead of taking away the whole
function. I wonder if i should do any compares with the
conn->client_encoding and return 0 if not hing would have changed (if so
how do i check that?).

Regards

Magnus Naeslund
---
 src/interfaces/libpq/fe-auth.c    |  4 ++--
 src/interfaces/libpq/fe-connect.c |  8 +++++++-
 src/interfaces/libpq/fe-secure.c  |  4 +++-
 src/interfaces/libpq/libpq-int.h  |  6 +++++-
 src/interfaces/libpq/libpqdll.c   |  1 +
 src/interfaces/libpq/win32.c      |  7 +++++++
 src/interfaces/libpq/win32.h      |  6 +++++-
 src/interfaces/libpq/win32.mak    | 17 ++++++++++++++---
 8 files changed, 44 insertions(+), 9 deletions(-)

diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
index 63e573d5c2b..cd5cd7dce59 100644
--- a/src/interfaces/libpq/fe-auth.c
+++ b/src/interfaces/libpq/fe-auth.c
@@ -10,7 +10,7 @@
  * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.67 2002/06/20 20:29:53 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.68 2002/07/20 05:43:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -714,7 +714,7 @@ fe_getauthname(char *PQerrormsg)
 		char		username[128];
 		DWORD		namesize = sizeof(username) - 1;
 
-		if (GetUserNameFromId(username, &namesize))
+		if (GetUserName(username, &namesize))
 			name = username;
 #else
 		struct passwd *pw = getpwuid(geteuid());
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 630141ed549..19805db9813 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.189 2002/07/18 02:02:30 ishii Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.190 2002/07/20 05:43:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2717,6 +2717,9 @@ PQclientEncoding(const PGconn *conn)
 int
 PQsetClientEncoding(PGconn *conn, const char *encoding)
 {
+
+#ifdef MULTIBYTE
+
 	char		qbuf[128];
 	static char query[] = "set client_encoding to '%s'";
 	PGresult   *res;
@@ -2748,6 +2751,9 @@ PQsetClientEncoding(PGconn *conn, const char *encoding)
 	}
 	PQclear(res);
 	return (status);
+#else
+        return -1; /* Multibyte support isn't compiled in */
+#endif
 }
 
 void
diff --git a/src/interfaces/libpq/fe-secure.c b/src/interfaces/libpq/fe-secure.c
index 32d56948faa..1ef5d62e1be 100644
--- a/src/interfaces/libpq/fe-secure.c
+++ b/src/interfaces/libpq/fe-secure.c
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-secure.c,v 1.9 2002/06/23 20:30:48 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-secure.c,v 1.10 2002/07/20 05:43:31 momjian Exp $
  *	  
  * NOTES
  *	  The client *requires* a valid server certificate.  Since
@@ -110,7 +110,9 @@
 #include "strdup.h"
 #endif
 
+#ifndef WIN32
 #include <pwd.h>
+#endif
 #include <sys/stat.h>
 
 #ifdef USE_SSL
diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h
index 07cbe20d567..aee2fce13ca 100644
--- a/src/interfaces/libpq/libpq-int.h
+++ b/src/interfaces/libpq/libpq-int.h
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: libpq-int.h,v 1.51 2002/06/20 20:29:54 momjian Exp $
+ * $Id: libpq-int.h,v 1.52 2002/07/20 05:43:31 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +20,10 @@
 #ifndef LIBPQ_INT_H
 #define LIBPQ_INT_H
 
+#if defined(WIN32) && (!defined(ssize_t))
+  typedef int ssize_t; /* ssize_t doesn't exist in VC (atleast not VC6) */
+#endif 
+
 /* We assume libpq-fe.h has already been included. */
 #include "postgres_fe.h"
 
diff --git a/src/interfaces/libpq/libpqdll.c b/src/interfaces/libpq/libpqdll.c
index 2fd6cfc7de5..f145d3e0e4e 100644
--- a/src/interfaces/libpq/libpqdll.c
+++ b/src/interfaces/libpq/libpqdll.c
@@ -1,4 +1,5 @@
 #define WIN32_LEAN_AND_MEAN
+#include <winsock.h>
 #include <windows.h>
 #include "win32.h"
 
diff --git a/src/interfaces/libpq/win32.c b/src/interfaces/libpq/win32.c
index 2e90c3dad30..4b577e3bfc1 100644
--- a/src/interfaces/libpq/win32.c
+++ b/src/interfaces/libpq/win32.c
@@ -17,7 +17,14 @@
  *
  */
 
+/* Make stuff compile faster by excluding not used stuff */
+
 #define WIN32_LEAN_AND_MEAN
+#define WIN32_EXTRA_LEAN
+#define VC_EXTRALEAN
+#define NOGDI
+#define NOCRYPT
+
 #include <windows.h>
 #include <winsock.h>
 #include <stdio.h>
diff --git a/src/interfaces/libpq/win32.h b/src/interfaces/libpq/win32.h
index bf6d01b7ca9..db1aa53b24f 100644
--- a/src/interfaces/libpq/win32.h
+++ b/src/interfaces/libpq/win32.h
@@ -1,4 +1,5 @@
-#include <winsock.h>
+#ifndef __win32_h_included
+#define __win32_h_included
 
 /*
  * strcasecmp() is not in Windows, stricmp is, though
@@ -34,3 +35,6 @@
  * support for handling Windows Socket errors
  */
 extern const char *winsock_strerror(int eno);
+
+
+#endif
diff --git a/src/interfaces/libpq/win32.mak b/src/interfaces/libpq/win32.mak
index 98b4e986ef9..766d33ce08a 100644
--- a/src/interfaces/libpq/win32.mak
+++ b/src/interfaces/libpq/win32.mak
@@ -30,6 +30,15 @@ CFG=Release
 !ERROR An invalid configuration was specified.
 !ENDIF
 
+!IFDEF DEBUG
+OPT=/Od
+LOPT=/debug
+DEBUGDEF=/D _DEBUG
+!ELSE
+OPT=/O2
+LOPT=
+DEBUGDEF=/D NDEBUG
+!ENDIF
 
 !IF "$(OS)" == "Windows_NT"
 NULL=
@@ -62,6 +71,7 @@ CLEAN :
 	-@erase "$(INTDIR)\fe-lobj.obj"
 	-@erase "$(INTDIR)\fe-misc.obj"
 	-@erase "$(INTDIR)\fe-print.obj"
+	-@erase "$(INTDIR)\fe-secure.obj"
 	-@erase "$(INTDIR)\pqexpbuffer.obj"
 	-@erase "$(OUTDIR)\libpqdll.obj"
 	-@erase "$(OUTDIR)\win32.obj"
@@ -80,7 +90,7 @@ CLEAN :
 "$(OUTDIR)" :
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\include" /D "FRONTEND" /D "NDEBUG" /D\
+CPP_PROJ=/nologo /MD /W3 /GX $(OPT) /I "..\..\include" /D "FRONTEND" $(DEBUGDEF) /D\
  "WIN32" /D "_WINDOWS" /Fp"$(INTDIR)\libpq.pch" /YX\
  /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c  /D "HAVE_VSNPRINTF" /D "HAVE_STRDUP"
 
@@ -95,7 +105,7 @@ CPP_OBJS=.\Release/
 CPP_SBRS=.
 	
 LIB32=link.exe -lib
-LIB32_FLAGS=/nologo /out:"$(OUTDIR)\libpq.lib" 
+LIB32_FLAGS=$(LOPT) /nologo /out:"$(OUTDIR)\libpq.lib" 
 LIB32_OBJS= \
 	"$(OUTDIR)\win32.obj" \
 	"$(INTDIR)\dllist.obj" \
@@ -106,6 +116,7 @@ LIB32_OBJS= \
 	"$(INTDIR)\fe-lobj.obj" \
 	"$(INTDIR)\fe-misc.obj" \
 	"$(INTDIR)\fe-print.obj" \
+	"$(INTDIR)\fe-secure.obj" \
 	"$(INTDIR)\pqexpbuffer.obj"
 
 !IFDEF MULTIBYTE
@@ -116,7 +127,7 @@ RSC_PROJ=/l 0x409 /fo"$(INTDIR)\libpq.res"
 
 LINK32=link.exe
 LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib wsock32.lib\
- /nologo /subsystem:windows /dll /incremental:no\
+ /nologo /subsystem:windows /dll $(LOPT) /incremental:no\
  /pdb:"$(OUTDIR)\libpqdll.pdb" /machine:I386 /out:"$(OUTDIR)\libpq.dll"\
  /implib:"$(OUTDIR)\libpqdll.lib"  /def:libpqdll.def
 LINK32_OBJS= \
-- 
GitLab