[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-67-gfe3ad49
From: |
Andrew J. Schorr |
Subject: |
[gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-67-gfe3ad49 |
Date: |
Fri, 05 Jul 2013 21:11:59 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".
The branch, select has been updated
via fe3ad49e37792999b36f1e590974a19a92b7f388 (commit)
from 6b5925f4c303d43228ffe5e37b84d9017d2ff5e3 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=fe3ad49e37792999b36f1e590974a19a92b7f388
commit fe3ad49e37792999b36f1e590974a19a92b7f388
Author: Andrew J. Schorr <address@hidden>
Date: Fri Jul 5 17:11:13 2013 -0400
For select extension signal trapping, fall back to signal if sigaction is
unavailable.
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 49c100e..4108f74 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,5 +1,10 @@
2013-07-05 Andrew J. Schorr <address@hidden>
+ * select.c (do_signal): If sigaction is unavailable, fall back to
+ signal and hope that it does the right thing.
+
+2013-07-05 Andrew J. Schorr <address@hidden>
+
* configure.ac (AC_CHECK_FUNCS): Add kill and sigprocmask.
* select.c (get_signal_number): Change error messages since now may
be called by "kill" as well as "select_signal".
diff --git a/extension/select.c b/extension/select.c
index 261d8eb..44b60d5 100644
--- a/extension/select.c
+++ b/extension/select.c
@@ -152,10 +152,9 @@ get_signal_number(awk_value_t signame)
static awk_value_t *
do_signal(int nargs, awk_value_t *result)
{
-#ifdef HAVE_SIGACTION
awk_value_t signame, disposition;
int signum;
- struct sigaction sa;
+ void (*func)(int);
if (do_lint && nargs > 2)
lintwarn(ext_id, _("select_signal: called with too many
arguments"));
@@ -170,25 +169,36 @@ do_signal(int nargs, awk_value_t *result)
return make_number(-1, result);
}
if (strcasecmp(disposition.str_value.str, "default") == 0)
- sa.sa_handler = SIG_DFL;
+ func = SIG_DFL;
else if (strcasecmp(disposition.str_value.str, "ignore") == 0)
- sa.sa_handler = SIG_IGN;
+ func = SIG_IGN;
else if (strcasecmp(disposition.str_value.str, "trap") == 0)
- sa.sa_handler = signal_handler;
+ func = signal_handler;
else {
update_ERRNO_string(_("select_signal: invalid disposition
argument"));
return make_number(-1, result);
}
- sigfillset(& sa.sa_mask); /* block all signals in handler */
- sa.sa_flags = SA_RESTART;
- if (sigaction(signum, &sa, NULL) < 0) {
+#ifdef HAVE_SIGACTION
+ {
+ int rc;
+ struct sigaction sa;
+ sa.sa_handler = func;
+ sigfillset(& sa.sa_mask); /* block all signals in handler */
+ sa.sa_flags = SA_RESTART;
+ if ((rc = sigaction(signum, &sa, NULL)) < 0)
+ update_ERRNO_int(errno);
+ return make_number(rc, result);
+ }
+#else
+ /*
+ * Fall back to signal; this is available on all platforms. We can
+ * only hope that it does the right thing.
+ */
+ if (signal(signum, func) == SIG_ERR) {
update_ERRNO_int(errno);
return make_number(-1, result);
}
return make_number(0, result);
-#else
- update_ERRNO_string(_("select_signal: not supported on this platform"));
- return make_number(-1, result);
#endif
}
-----------------------------------------------------------------------
Summary of changes:
extension/ChangeLog | 5 +++++
extension/select.c | 32 +++++++++++++++++++++-----------
2 files changed, 26 insertions(+), 11 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-67-gfe3ad49,
Andrew J. Schorr <=