summaryrefslogtreecommitdiff
path: root/test/signal/signal.c
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@uclibc-ng.org>2016-10-24 20:22:12 +0200
committerWaldemar Brodkorb <wbx@uclibc-ng.org>2016-10-24 20:22:12 +0200
commit7988979a722b4cdf287b2093956a76a3f19b9897 (patch)
treed35e251d0472ceca55a2eef61cff261c8ee68fab /test/signal/signal.c
add uClibc-ng test directory
Diffstat (limited to 'test/signal/signal.c')
-rw-r--r--test/signal/signal.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/test/signal/signal.c b/test/signal/signal.c
new file mode 100644
index 0000000..01d1a78
--- /dev/null
+++ b/test/signal/signal.c
@@ -0,0 +1,95 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * signal testing function for uClibc
+ * Copyright (C) 2000-2006 by Erik Andersen <andersen@uclibc.org>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <fcntl.h>
+#include <signal.h>
+
+
+/* -------------------------------------------------*/
+/* This stuff is common to all the testing routines */
+/* -------------------------------------------------*/
+const char *it = "<UNSET>"; /* Routine name for message routines. */
+size_t errors = 0;
+
+static void check(int thing, int number)
+{
+ if (!thing) {
+ printf("%s: flunked test %d\n", it, number);
+ ++errors;
+ }
+}
+
+#if 0
+static void equal(const char *a, const char *b, int number)
+{
+ check(a != NULL && b != NULL && (strcmp(a, b) == 0), number);
+}
+#endif
+
+
+/* -------------------------------------------------*/
+/* Let the tests begin.... */
+/* -------------------------------------------------*/
+
+int global_int = 0;
+
+static void set_global_int_to_one(int signum)
+{
+ printf ("Received signal %d (%s).\n", signum, strsignal(signum));
+ global_int = 1;
+ return;
+}
+
+static void signal_test_1(void)
+{
+ global_int = 0;
+
+ it = "global variable set from signal handler";
+ if (signal(SIGUSR1, set_global_int_to_one) == SIG_ERR) {
+ perror("signal(SIGUSR1) failed");
+ exit(-1);
+ }
+ raise(SIGUSR1);
+
+ /* This should already have jumped to the signal handler */
+ check((global_int == 1), 1);
+
+ global_int = 0;
+ if (signal(SIGUSR1, SIG_IGN) == SIG_ERR) {
+ perror("signal(SIGUSR1) failed");
+ exit(-1);
+ }
+ raise(SIGUSR1);
+ /* This should not go to the signal handler this time since we */
+ check((global_int == 0), 1);
+}
+
+
+int main(void)
+{
+ int status;
+
+ signal_test_1();
+
+ if (errors == 0) {
+ status = EXIT_SUCCESS;
+ printf("No errors.\n");
+ } else {
+ status = EXIT_FAILURE;
+ printf("%lu errors.\n", (unsigned long)errors);
+ }
+ exit(status);
+}