summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--win32/win32.c36
2 files changed, 31 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 4539604b8d..4aa83572b9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat May 12 15:43:55 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.
+
Fri May 11 15:09:52 2001 WATANABE Hirofumi <eban@ruby-lang.org>
* ruby.h (rb_string_value): add volatile to avoid compiler warning.
diff --git a/win32/win32.c b/win32/win32.c
index 15a9a2a673..b67a094fe4 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -2559,18 +2559,36 @@ chown(const char *path, int owner, int group)
int
kill(int pid, int sig)
{
-#if 1
- if ((unsigned int)pid == GetCurrentProcessId())
- return raise(sig);
+ if ((unsigned int)pid == GetCurrentProcessId())
+ return raise(sig);
- if (sig == 2 && pid > 0)
- if (GenerateConsoleCtrlEvent(CTRL_C_EVENT, (DWORD)pid))
- return 0;
+ if (sig == 2 && pid > 0) {
+ if (!GenerateConsoleCtrlEvent(CTRL_C_EVENT, (DWORD)pid)) {
+ errno = GetLastError();
+ return -1;
+ }
+ }
+ else if (sig == 9 && pid > 0) {
+ HANDLE hProc;
+ hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
+ if (hProc == NULL || hProc == INVALID_HANDLE_VALUE) {
+ errno = GetLastError();
+ return -1;
+ }
+ if (!TerminateProcess(hProc, 0)) {
+ errno = GetLastError();
+ CloseHandle(hProc);
+ return -1;
+ }
+ CloseHandle(hProc);
+ }
+ else {
+ errno = EINVAL;
return -1;
-#else
- return 0;
-#endif
+ }
+
+ return 0;
}
int