Re: [PATCH v3 1/9] compat/mingw.c: expand MinGW support for sigaction
From: Johannes Sixt <hidden>
Date: 2016-06-15 23:01:26
Am 6/1/2014 20:10, schrieb Jeremiah Mahler:
quoted hunk ↗ jump to hunk
Due to portability issues across UNIX versions sigaction(2) should be used instead of signal(2).quoted
From the signal(2) man page:The behavior of signal() varies across UNIX versions, and has also var‐ ied historically across different versions of Linux. Avoid its use: use sigaction(2) instead. Unfortunately MinGW under Windows has limited support for signal and no support for sigaction. And this prevents sigaction from being used across the entire Git project. In compat/mingw.c there is a faux sigaction function but it only supports SIGALARM. Hence the need for continuing to use signal() in other cases. This patch expands the faux sigaction function so that it calls signal in cases other than SIGALRM. Now sigaction can be used across the entire Git project and MinGW will still work with signal as it did before. Signed-off-by: Jeremiah Mahler <redacted> --- compat/mingw.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)diff --git a/compat/mingw.c b/compat/mingw.c index e9892f8..e504cef 100644 --- a/compat/mingw.c +++ b/compat/mingw.c@@ -1651,14 +1651,15 @@ int setitimer(int type, struct itimerval *in, struct itimerval *out) int sigaction(int sig, struct sigaction *in, struct sigaction *out) { - if (sig != SIGALRM) - return errno = EINVAL, - error("sigaction only implemented for SIGALRM"); if (out != NULL) return errno = EINVAL, error("sigaction: param 3 != NULL not implemented");
A fix for this missing implementation is needed before patch 9/9 can be applied.
- timer_fn = in->sa_handler; + if (sig == SIGALRM) + timer_fn = in->sa_handler; + else + signal(sig, in->sa_handler); + return 0; }
-- Hannes