]> granicus.if.org Git - postgresql/commitdiff
Use snprintf instead of wsprintf, and use getenv("APPDATA") instead of
authorMagnus Hagander <magnus@hagander.net>
Tue, 23 Oct 2007 17:58:01 +0000 (17:58 +0000)
committerMagnus Hagander <magnus@hagander.net>
Tue, 23 Oct 2007 17:58:01 +0000 (17:58 +0000)
SHGetFolderPath.

This removes the direct dependency on shell32.dll and user32.dll, which
eats a lot of "desktop heap" for each backend that's started. The
desktop heap is a very limited resource, causing backends to no
longer start once it's been exhausted.

We still have indirect depdendencies on user32.dll through third party
libraries, but those can't easily be removed.

Dave Page

src/backend/port/win32/signal.c
src/port/kill.c
src/port/path.c

index a6b2715e07e36b5862fe6406d2872ebb4533038c..c073c84b34682db4e46ea3411583c2ccecf3336b 100644 (file)
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/port/win32/signal.c,v 1.18 2007/01/05 22:19:35 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/port/win32/signal.c,v 1.19 2007/10/23 17:58:01 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -178,7 +178,7 @@ pgwin32_create_signal_listener(pid_t pid)
        char            pipename[128];
        HANDLE          pipe;
 
-       wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%d", (int) pid);
+       snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", (int) pid);
 
        pipe = CreateNamedPipe(pipename, PIPE_ACCESS_DUPLEX,
                                           PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
@@ -251,7 +251,7 @@ pg_signal_thread(LPVOID param)
        char            pipename[128];
        HANDLE          pipe = pgwin32_initial_signal_pipe;
 
-       wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%d", GetCurrentProcessId());
+       snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", GetCurrentProcessId());
 
        for (;;)
        {
index 12d5dec456a009906cc5efa1764b26247823c766..d097051baefab24c691e1337131346672730f798 100644 (file)
@@ -9,7 +9,7 @@
  *     signals that the backend can recognize.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/kill.c,v 1.8 2007/01/05 22:20:02 momjian Exp $
+ *       $PostgreSQL: pgsql/src/port/kill.c,v 1.9 2007/10/23 17:58:01 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -38,7 +38,7 @@ pgkill(int pid, int sig)
                errno = EINVAL;
                return -1;
        }
-       wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%i", pid);
+       snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", pid);
        if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
        {
                if (GetLastError() == ERROR_FILE_NOT_FOUND)
index 10307d098864876839eeaf73db8866cc0f3f2d76..c43843bb4647586202276a442e5dc611271c053a 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/path.c,v 1.71 2007/01/05 22:20:02 momjian Exp $
+ *       $PostgreSQL: pgsql/src/port/path.c,v 1.72 2007/10/23 17:58:01 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -628,10 +628,14 @@ get_home_path(char *ret_path)
        strlcpy(ret_path, pwd->pw_dir, MAXPGPATH);
        return true;
 #else
-       char            tmppath[MAX_PATH];
-
-       ZeroMemory(tmppath, sizeof(tmppath));
-       if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, tmppath) != S_OK)
+       char            *tmppath;
+
+    /*
+     * Note: We use getenv here because the more modern SHGetSpecialFolderPath()
+     * will force us to link with shell32.lib which eats valuable desktop heap.
+     */
+    tmppath = getenv("APPDATA");
+       if (!tmppath)
                return false;
        snprintf(ret_path, MAXPGPATH, "%s/postgresql", tmppath);
        return true;