gawk-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]