summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2007-03-08 19:27:48 +0000
committerMagnus Hagander2007-03-08 19:27:48 +0000
commit76ccea1428e11bdbaf60fe1e4ce838fa271953bc (patch)
treedccdcdaff17b0b20b26e1bc6249bc0d39784bc32
parent8cedf54b2c81f20caf3e8fae1e452d2592093e6d (diff)
Remove unsafe calling of WSAStartup and WSACleanup from DllMain. Move the
inline cleanup call around so it will be called in the right order, and be called on errors. Per report from Tokuharu Yuzawa.
-rw-r--r--src/interfaces/libpq/bcc32.mak6
-rw-r--r--src/interfaces/libpq/fe-connect.c17
-rw-r--r--src/interfaces/libpq/libpqdll.c33
-rw-r--r--src/interfaces/libpq/win32.mak4
4 files changed, 13 insertions, 47 deletions
diff --git a/src/interfaces/libpq/bcc32.mak b/src/interfaces/libpq/bcc32.mak
index 992bb5b68e..73fb1faf13 100644
--- a/src/interfaces/libpq/bcc32.mak
+++ b/src/interfaces/libpq/bcc32.mak
@@ -93,7 +93,6 @@ CLEAN :
-@erase "$(INTDIR)\fe-secure.obj"
-@erase "$(INTDIR)\pqexpbuffer.obj"
-@erase "$(INTDIR)\pqsignal.obj"
- -@erase "$(OUTDIR)\libpqdll.obj"
-@erase "$(OUTDIR)\win32.obj"
-@erase "$(INTDIR)\wchar.obj"
-@erase "$(INTDIR)\encnames.obj"
@@ -155,14 +154,13 @@ RSC_PROJ=-l 0x409 -i$(BCB)\include -fo"$(INTDIR)\libpq.res"
LINK32=ilink32.exe
LINK32_FLAGS = -Gn -L$(BCB)\lib;$(INTDIR); -x -Tpd -v
-LINK32_OBJS= "$(INTDIR)\libpqdll.obj"
# @<< is a Response file, http://www.opussoftware.com/tutorial/TutMakefile.htm
-"$(OUTDIR)\blibpq.dll": "$(OUTDIR)\blibpq.lib" $(LINK32_OBJS) "$(INTDIR)\libpq.res" blibpqdll.def
+"$(OUTDIR)\blibpq.dll": "$(OUTDIR)\blibpq.lib" "$(INTDIR)\libpq.res" blibpqdll.def
$(LINK32) @<<
$(LINK32_FLAGS) +
- c0d32.obj $(LINK32_OBJS), +
+ c0d32.obj , +
$@,, +
"$(OUTDIR)\blibpq.lib" import32.lib cw32mt.lib, +
blibpqdll.def,"$(INTDIR)\libpq.res"
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index c2bc7bce3f..4e813f308e 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -1840,9 +1840,7 @@ makeEmptyPGconn(void)
#ifdef WIN32
/*
- * Make sure socket support is up and running. Even though this is done in
- * libpqdll.c, that is only for MSVC and BCC builds and doesn't work for
- * static builds at all, so we have to do it in the main code too.
+ * Make sure socket support is up and running.
*/
WSADATA wsaData;
@@ -1853,7 +1851,12 @@ makeEmptyPGconn(void)
conn = (PGconn *) malloc(sizeof(PGconn));
if (conn == NULL)
+ {
+#ifdef WIN32
+ WSACleanup();
+#endif
return conn;
+ }
/* Zero all pointers and booleans */
MemSet(conn, 0, sizeof(PGconn));
@@ -1918,10 +1921,6 @@ freePGconn(PGconn *conn)
PGnotify *notify;
pgParameterStatus *pstatus;
-#ifdef WIN32
- WSACleanup();
-#endif
-
if (!conn)
return;
@@ -1986,6 +1985,10 @@ freePGconn(PGconn *conn)
termPQExpBuffer(&conn->errorMessage);
termPQExpBuffer(&conn->workBuffer);
free(conn);
+
+#ifdef WIN32
+ WSACleanup();
+#endif
}
/*
diff --git a/src/interfaces/libpq/libpqdll.c b/src/interfaces/libpq/libpqdll.c
deleted file mode 100644
index 48849c3f13..0000000000
--- a/src/interfaces/libpq/libpqdll.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* $PostgreSQL$ */
-
-#define WIN32_LEAN_AND_MEAN
-#include <winsock.h>
-#include <windows.h>
-#include "win32.h"
-
-
-BOOL WINAPI
-DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
- LPVOID lpReserved)
-{
- WSADATA wsaData;
-
- switch (fdwReason)
- {
- case DLL_PROCESS_ATTACH:
- if (WSAStartup(MAKEWORD(1, 1), &wsaData))
- {
- /*
- * No really good way to do error handling here, since we
- * don't know how we were loaded
- */
- return FALSE;
- }
- break;
- case DLL_PROCESS_DETACH:
- WSACleanup();
- break;
- }
-
- return TRUE;
-}
diff --git a/src/interfaces/libpq/win32.mak b/src/interfaces/libpq/win32.mak
index ca5f4326aa..f558aaca46 100644
--- a/src/interfaces/libpq/win32.mak
+++ b/src/interfaces/libpq/win32.mak
@@ -63,7 +63,6 @@ CLEAN :
-@erase "$(INTDIR)\fe-secure.obj"
-@erase "$(INTDIR)\pqexpbuffer.obj"
-@erase "$(INTDIR)\pqsignal.obj"
- -@erase "$(OUTDIR)\libpqdll.obj"
-@erase "$(OUTDIR)\win32.obj"
-@erase "$(INTDIR)\wchar.obj"
-@erase "$(INTDIR)\encnames.obj"
@@ -143,7 +142,6 @@ LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib shfolder.lib wsock32.lib $(SSL
/pdb:"$(OUTDIR)\libpqdll.pdb" /machine:I386 /out:"$(OUTDIR)\$(OUTFILENAME).dll"\
/implib:"$(OUTDIR)\$(OUTFILENAME)dll.lib" /def:$(OUTFILENAME)dll.def
LINK32_OBJS= \
- "$(INTDIR)\libpqdll.obj" \
"$(OUTDIR)\$(OUTFILENAME).lib" \
"$(OUTDIR)\libpq.res"
@@ -159,7 +157,7 @@ LINK32_OBJS= \
$(RSC) $(RSC_PROJ) libpq.rc
-"$(OUTDIR)\$(OUTFILENAME).dll" : "$(OUTDIR)" "$(OUTDIR)\libpqdll.obj" "$(INTDIR)\libpqdll.obj" "$(INTDIR)\libpq.res"
+"$(OUTDIR)\$(OUTFILENAME).dll" : "$(OUTDIR)" "$(INTDIR)\libpq.res"
$(LINK32) @<<
$(LINK32_FLAGS) $(LINK32_OBJS)
<<