aboutsummaryrefslogtreecommitdiff
path: root/src/port/kill.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2004-05-27 13:08:57 +0000
committerBruce Momjian <bruce@momjian.us>2004-05-27 13:08:57 +0000
commit6f21f4adaa87f7ba4dedda01a1c392ee472f43c2 (patch)
treec81dc3428aae143d0a2766e1e3203d7b9c6afb0b /src/port/kill.c
parentd157b7bbc74643dc7459b813d9ed073a629ecd8a (diff)
downloadpostgresql-6f21f4adaa87f7ba4dedda01a1c392ee472f43c2.tar.gz
postgresql-6f21f4adaa87f7ba4dedda01a1c392ee472f43c2.zip
Move pgkill out into /port so pg_ctl can use it on Win32.
Diffstat (limited to 'src/port/kill.c')
-rw-r--r--src/port/kill.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/port/kill.c b/src/port/kill.c
new file mode 100644
index 00000000000..b13fea924f7
--- /dev/null
+++ b/src/port/kill.c
@@ -0,0 +1,59 @@
+/*-------------------------------------------------------------------------
+ *
+ * kill.c
+ * kill()
+ *
+ * Copyright (c) 1996-2003, 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 $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#ifdef WIN32
+/* signal sending */
+int
+pgkill(int pid, int sig)
+{
+ char pipename[128];
+ BYTE sigData = sig;
+ BYTE sigRet = 0;
+ DWORD bytes;
+
+ if (sig >= PG_SIGNAL_COUNT || sig <= 0)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ if (pid <= 0)
+ {
+ /* No support for process groups */
+ errno = EINVAL;
+ return -1;
+ }
+ wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%i", pid);
+ if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000))
+ {
+ if (GetLastError() == ERROR_FILE_NOT_FOUND)
+ 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 0;
+}
+#endif