diff options
author | Mike Frysinger <vapier@gentoo.org> | 2006-02-15 05:03:49 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2006-02-15 05:03:49 +0000 |
commit | 6a22e84a33d80766d39a4ab10afe21873c633795 (patch) | |
tree | 39e264d71923985a7b6130382f5a2b1342d4f233 /test | |
parent | 4d0d43c40a4cf86fa330d4399105bb1a2d6e805e (diff) |
grab some more tests from glibc
Diffstat (limited to 'test')
-rw-r--r-- | test/signal/tst-raise.c | 63 | ||||
-rw-r--r-- | test/signal/tst-signal.c | 44 | ||||
-rw-r--r-- | test/signal/tst-sigset.c | 45 | ||||
-rw-r--r-- | test/signal/tst-sigsimple.c | 57 |
4 files changed, 209 insertions, 0 deletions
diff --git a/test/signal/tst-raise.c b/test/signal/tst-raise.c new file mode 100644 index 000000000..9e8e472be --- /dev/null +++ b/test/signal/tst-raise.c @@ -0,0 +1,63 @@ +/* Copyright (C) 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. + + 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <string.h> +#include <error.h> +#include <signal.h> +#include <stdlib.h> +#include <stdio.h> + +volatile int count; + +void +sh (int sig) +{ + ++count; +} + +int +main (void) +{ + struct sigaction sa; + sa.sa_handler = sh; + sigemptyset (&sa.sa_mask); + sa.sa_flags = 0; + if (sigaction (SIGUSR1, &sa, NULL) < 0) + { + printf ("sigaction failed: %s\n", strerror(errno)); + exit (1); + } + if (raise (SIGUSR1) < 0) + { + printf ("first raise failed: %s\n", strerror(errno)); + exit (1); + } + if (raise (SIGUSR1) < 0) + { + printf ("second raise failed: %s\n", strerror(errno)); + exit (1); + } + if (count != 2) + { + printf ("signal handler not called 2 times\n"); + exit (1); + } + exit (0); +} diff --git a/test/signal/tst-signal.c b/test/signal/tst-signal.c new file mode 100644 index 000000000..6d3178792 --- /dev/null +++ b/test/signal/tst-signal.c @@ -0,0 +1,44 @@ +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int win = 0; + +static void +handler (int sig) +{ + printf ("Received signal %d (%s).\n", sig, strsignal(sig)); + win = 1; +} + +int +main (void) +{ + if (signal (SIGTERM, handler) == SIG_ERR) + { + perror ("signal: SIGTERM"); + exit (EXIT_FAILURE); + } + + puts ("Set handler."); + + printf ("Sending myself signal %d.\n", SIGTERM); + fflush (stdout); + + if (raise (SIGTERM) < 0) + { + perror ("raise: SIGTERM"); + exit (EXIT_FAILURE); + } + + if (!win) + { + puts ("Didn't get any signal. Test FAILED!"); + exit (EXIT_FAILURE); + } + + puts ("Got a signal. Test succeeded."); + + return EXIT_SUCCESS; +} diff --git a/test/signal/tst-sigset.c b/test/signal/tst-sigset.c new file mode 100644 index 000000000..bc1b05764 --- /dev/null +++ b/test/signal/tst-sigset.c @@ -0,0 +1,45 @@ +/* Test sig*set functions. */ + +#include <signal.h> +#include <string.h> +#include <errno.h> +#include <stdio.h> + +#define TEST_FUNCTION do_test () +static int +do_test (void) +{ + int result = 0; + int sig = -1; + +#define TRY(call) \ + if (call) \ + { \ + printf ("%s (sig = %d): %s\n", #call, sig, strerror(errno)); \ + result = 1; \ + } \ + else + + + sigset_t set; + TRY (sigemptyset (&set) != 0); + +#ifdef SIGRTMAX + int max_sig = SIGRTMAX; +#else + int max_sig = NSIG - 1; +#endif + + for (sig = 1; sig <= max_sig; ++sig) + { + TRY (sigismember (&set, sig) != 0); + TRY (sigaddset (&set, sig) != 0); + TRY (sigismember (&set, sig) == 0); + TRY (sigdelset (&set, sig) != 0); + TRY (sigismember (&set, sig) != 0); + } + + return result; +} + +#include "../test-skeleton.c" diff --git a/test/signal/tst-sigsimple.c b/test/signal/tst-sigsimple.c new file mode 100644 index 000000000..22bb85cba --- /dev/null +++ b/test/signal/tst-sigsimple.c @@ -0,0 +1,57 @@ +/* Copyright (C) 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. + + 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <signal.h> +#include <stdio.h> +#include <string.h> + + +static int +do_test (void) +{ + int result = 0; + int e; + +#define RUN(test) \ + errno = 0; \ + e = test; \ + if (e != -1) \ + { \ + printf ("%s returned %d\n", #test, e); \ + result = 1; \ + } \ + else if (errno != EINVAL) \ + { \ + printf ("%s didn't set errno to EINVAL (%s instead)\n", \ + #test, strerror (errno)); \ + result = 1; \ + } + + RUN (sighold (-1)); + RUN (sighold (_NSIG + 100)); + + RUN (sigrelse (-1)); + RUN (sigrelse (_NSIG + 100)); + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |