summaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorErik Faye-Lund <kusmabite@gmail.com>2010-11-04 01:35:15 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-11-04 23:53:50 (GMT)
commit82fc07b7baa6f9e188025cc06a87ebc60a6f2d5e (patch)
treeb9b6e7623b923eeb6f5e793df493aeb9823b5790 /compat
parentef7108caf3cd200620000921f1b121f8c78d9d3b (diff)
downloadgit-82fc07b7baa6f9e188025cc06a87ebc60a6f2d5e.zip
git-82fc07b7baa6f9e188025cc06a87ebc60a6f2d5e.tar.gz
git-82fc07b7baa6f9e188025cc06a87ebc60a6f2d5e.tar.bz2
mingw: add kill emulation
This is a quite limited kill-emulation; it can only handle SIGTERM on positive pids. However, it's enough for git-daemon. Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
-rw-r--r--compat/mingw.c19
-rw-r--r--compat/mingw.h3
2 files changed, 22 insertions, 0 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index 47a0e88..146a6ed 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -936,6 +936,25 @@ void mingw_execv(const char *cmd, char *const *argv)
mingw_execve(cmd, argv, environ);
}
+int mingw_kill(pid_t pid, int sig)
+{
+ if (pid > 0 && sig == SIGTERM) {
+ HANDLE h = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
+
+ if (TerminateProcess(h, -1)) {
+ CloseHandle(h);
+ return 0;
+ }
+
+ errno = err_win_to_posix(GetLastError());
+ CloseHandle(h);
+ return -1;
+ }
+
+ errno = EINVAL;
+ return -1;
+}
+
static char **copy_environ(void)
{
char **env;
diff --git a/compat/mingw.h b/compat/mingw.h
index 379d7bf..51fca2f 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -143,6 +143,9 @@ static inline int mingw_unlink(const char *pathname)
#define WNOHANG 1
pid_t waitpid(pid_t pid, int *status, unsigned options);
+#define kill mingw_kill
+int mingw_kill(pid_t pid, int sig);
+
#ifndef NO_OPENSSL
#include <openssl/ssl.h>
static inline int mingw_SSL_set_fd(SSL *ssl, int fd)