]> granicus.if.org Git - postgresql/blobdiff - src/port/kill.c
Centralize single quote escaping in src/port/quotes.c
[postgresql] / src / port / kill.c
index b13fea924f76ba6b90788745ecfbbaaff7bc8735..0a810cd22528ab2680d14173069f0adb1820e6a1 100644 (file)
@@ -3,18 +3,18 @@
  * kill.c
  *       kill()
  *
- * Copyright (c) 1996-2003, PostgreSQL Global Development Group
+ * Copyright (c) 1996-2013, PostgreSQL Global Development Group
  *
  *     This is a replacement version of kill for Win32 which sends
  *     signals that the backend can recognize.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/kill.c,v 1.1 2004/05/27 13:08:57 momjian Exp $
+ *       src/port/kill.c
  *
  *-------------------------------------------------------------------------
  */
 
-#include "postgres.h"
+#include "c.h"
 
 #ifdef WIN32
 /* signal sending */
@@ -26,7 +26,8 @@ pgkill(int pid, int sig)
        BYTE            sigRet = 0;
        DWORD           bytes;
 
-       if (sig >= PG_SIGNAL_COUNT || sig <= 0)
+       /* we allow signal 0 here, but it will be ignored in pg_queue_signal */
+       if (sig >= PG_SIGNAL_COUNT || sig < 0)
        {
                errno = EINVAL;
                return -1;
@@ -37,23 +38,25 @@ pgkill(int pid, int sig)
                errno = EINVAL;
                return -1;
        }
-       wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%i", pid);
-       if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
+       snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", pid);
+
+       if (CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
        {
-               if (GetLastError() == ERROR_FILE_NOT_FOUND)
+               if (bytes != 1 || sigRet != sig)
+               {
                        errno = ESRCH;
-               else if (GetLastError() == ERROR_ACCESS_DENIED)
-                       errno = EPERM;
-               else
-                       errno = EINVAL;
-               return -1;
-       }
-       if (bytes != 1 || sigRet != sig)
-       {
-               errno = ESRCH;
-               return -1;
+                       return -1;
+               }
+               return 0;
        }
 
-       return 0;
+       if (GetLastError() == ERROR_FILE_NOT_FOUND)
+               errno = ESRCH;
+       else if (GetLastError() == ERROR_ACCESS_DENIED)
+               errno = EPERM;
+       else
+               errno = EINVAL;
+       return -1;
 }
+
 #endif