Fix pg_dump bug in the database-level collation patch. "datcollate" and
[PostgreSQL.git] / src / port / kill.c
blobec1dcb978c3542c5dac2c598e08c54c9a05ad40c
1 /*-------------------------------------------------------------------------
3 * kill.c
4 * kill()
6 * Copyright (c) 1996-2008, PostgreSQL Global Development Group
8 * This is a replacement version of kill for Win32 which sends
9 * signals that the backend can recognize.
11 * IDENTIFICATION
12 * $PostgreSQL$
14 *-------------------------------------------------------------------------
17 #include "c.h"
19 #ifdef WIN32
20 /* signal sending */
21 int
22 pgkill(int pid, int sig)
24 char pipename[128];
25 BYTE sigData = sig;
26 BYTE sigRet = 0;
27 DWORD bytes;
29 /* we allow signal 0 here, but it will be ignored in pg_queue_signal */
30 if (sig >= PG_SIGNAL_COUNT || sig < 0)
32 errno = EINVAL;
33 return -1;
35 if (pid <= 0)
37 /* No support for process groups */
38 errno = EINVAL;
39 return -1;
41 snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", pid);
42 if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
44 if (GetLastError() == ERROR_FILE_NOT_FOUND)
45 errno = ESRCH;
46 else if (GetLastError() == ERROR_ACCESS_DENIED)
47 errno = EPERM;
48 else
49 errno = EINVAL;
50 return -1;
52 if (bytes != 1 || sigRet != sig)
54 errno = ESRCH;
55 return -1;
58 return 0;
61 #endif