summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-12 06:47:24 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-12 06:47:24 +0000
commit0f55389d96f50ec2d4a6145bde8565dfbe28f49f (patch)
treec1b772cb4a90c762e4d5c39856b715cb6106cb93
parentfd379cd7f0e74b21ee7bd30572ddb0fb90c36a3c (diff)
* win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--win32/win32.c36
2 files changed, 31 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 4539604b8db..4aa83572b91 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 15a9a2a673f..b67a094fe47 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