]> granicus.if.org Git - postgresql/blob - src/port/kill.c
Remove redundant code for getnameinfo() replacement
[postgresql] / src / port / kill.c
1 /*-------------------------------------------------------------------------
2  *
3  * kill.c
4  *        kill()
5  *
6  * Copyright (c) 1996-2012, PostgreSQL Global Development Group
7  *
8  *      This is a replacement version of kill for Win32 which sends
9  *      signals that the backend can recognize.
10  *
11  * IDENTIFICATION
12  *        src/port/kill.c
13  *
14  *-------------------------------------------------------------------------
15  */
16
17 #include "c.h"
18
19 #ifdef WIN32
20 /* signal sending */
21 int
22 pgkill(int pid, int sig)
23 {
24         char            pipename[128];
25         BYTE            sigData = sig;
26         BYTE            sigRet = 0;
27         DWORD           bytes;
28
29         /* we allow signal 0 here, but it will be ignored in pg_queue_signal */
30         if (sig >= PG_SIGNAL_COUNT || sig < 0)
31         {
32                 errno = EINVAL;
33                 return -1;
34         }
35         if (pid <= 0)
36         {
37                 /* No support for process groups */
38                 errno = EINVAL;
39                 return -1;
40         }
41         snprintf(pipename, sizeof(pipename), "\\\\.\\pipe\\pgsignal_%u", pid);
42
43         if (CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
44         {
45                 if (bytes != 1 || sigRet != sig)
46                 {
47                         errno = ESRCH;
48                         return -1;
49                 }
50                 return 0;
51         }
52
53         if (GetLastError() == ERROR_FILE_NOT_FOUND)
54                 errno = ESRCH;
55         else if (GetLastError() == ERROR_ACCESS_DENIED)
56                 errno = EPERM;
57         else
58                 errno = EINVAL;
59         return -1;
60 }
61
62 #endif