diff options
Diffstat (limited to 'signal')
-rw-r--r-- | signal/Makefile | 2 | ||||
-rw-r--r-- | signal/tst-sigaction.c | 56 |
2 files changed, 57 insertions, 1 deletions
diff --git a/signal/Makefile b/signal/Makefile index a9b99a20be..aa63434f47 100644 --- a/signal/Makefile +++ b/signal/Makefile @@ -46,7 +46,7 @@ routines := signal raise killpg \ sighold sigrelse sigignore sigset tests := tst-signal tst-sigset tst-sigsimple tst-raise tst-sigset2 \ - tst-sigwait-eintr \ + tst-sigwait-eintr tst-sigaction \ include ../Rules diff --git a/signal/tst-sigaction.c b/signal/tst-sigaction.c new file mode 100644 index 0000000000..c908e8f6f6 --- /dev/null +++ b/signal/tst-sigaction.c @@ -0,0 +1,56 @@ +/* Test sigaction regression for BZ #23069. + Copyright (C) 2018 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <signal.h> +#include <unistd.h> + +#include <support/check.h> + +static void +my_sig_handler (int signum) +{ +} + +static int +do_test (void) +{ + /* Define a simple signal handler */ + struct sigaction act; + act.sa_handler = my_sig_handler; + act.sa_flags = 0; + sigemptyset (&act.sa_mask); + + /* Set it as SIGUSR1 signal handler */ + TEST_VERIFY_EXIT (sigaction (SIGUSR1, &act, NULL) == 0); + + /* Get SIGUSR1 signal handler */ + TEST_VERIFY_EXIT (sigaction (SIGUSR1, NULL, &act) == 0); + + /* Check it is consistent with the defined one */ + TEST_VERIFY (act.sa_handler == my_sig_handler); + TEST_VERIFY (!(act.sa_flags & SA_RESETHAND)); + + for (int i = 1; i < _NSIG; i++) + { + TEST_VERIFY (!sigismember (&act.sa_mask, i)); + } + + return 0; +} + +#include <support/test-driver.c> |