zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/build/uClibc/test/signal/.indent.pro b/ap/build/uClibc/test/signal/.indent.pro
new file mode 100644
index 0000000..492ecf1
--- /dev/null
+++ b/ap/build/uClibc/test/signal/.indent.pro
@@ -0,0 +1,33 @@
+--blank-lines-after-declarations
+--blank-lines-after-procedures
+--break-before-boolean-operator
+--no-blank-lines-after-commas
+--braces-on-if-line
+--braces-on-struct-decl-line
+--comment-indentation25
+--declaration-comment-column25
+--no-comment-delimiters-on-blank-lines
+--cuddle-else
+--continuation-indentation4
+--case-indentation0
+--else-endif-column33
+--space-after-cast
+--line-comments-indentation0
+--declaration-indentation1
+--dont-format-first-column-comments
+--dont-format-comments
+--honour-newlines
+--indent-level4
+/* changed from 0 to 4 */
+--parameter-indentation4
+--line-length78 /* changed from 75 */
+--continue-at-parentheses
+--no-space-after-function-call-names
+--dont-break-procedure-type
+--dont-star-comments
+--leave-optional-blank-lines
+--dont-space-special-semicolon
+--tab-size4
+/* additions by Mark */
+--case-brace-indentation0
+--leave-preprocessor-space
diff --git a/ap/build/uClibc/test/signal/Makefile b/ap/build/uClibc/test/signal/Makefile
new file mode 100644
index 0000000..e829365
--- /dev/null
+++ b/ap/build/uClibc/test/signal/Makefile
@@ -0,0 +1,7 @@
+# uClibc signal tests
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+top_builddir=../../
+include ../Rules.mak
+-include Makefile.in
+include ../Test.mak
diff --git a/ap/build/uClibc/test/signal/Makefile.in b/ap/build/uClibc/test/signal/Makefile.in
new file mode 100644
index 0000000..c8e2545
--- /dev/null
+++ b/ap/build/uClibc/test/signal/Makefile.in
@@ -0,0 +1,6 @@
+# uClibc signal tests
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+
+ifeq ($(UCLIBC_HAS_OBSOLETE_BSD_SIGNAL),)
+TESTS_DISABLED := tst-sigsimple
+endif
diff --git a/ap/build/uClibc/test/signal/sigchld.c b/ap/build/uClibc/test/signal/sigchld.c
new file mode 100644
index 0000000..22febac
--- /dev/null
+++ b/ap/build/uClibc/test/signal/sigchld.c
@@ -0,0 +1,68 @@
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <sys/signal.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+
+#ifdef __ARCH_USE_MMU__
+
+static void test_handler(int signo)
+{
+    write(1, "caught SIGCHLD\n", 15);
+    return;
+}
+
+int main(void)
+{
+    pid_t mypid;
+    struct sigaction siga;
+    static sigset_t set;
+
+    /* Set up sighandling */
+    sigfillset(&set);
+    siga.sa_handler = test_handler;
+    siga.sa_mask = set;
+    siga.sa_flags = 0;
+    if (sigaction(SIGCHLD, &siga, (struct sigaction *)NULL) != 0) {
+	fprintf(stderr, "sigaction choked: %s!", strerror(errno));
+	exit(EXIT_FAILURE);
+    }
+
+    /* Setup a child process to exercise the sig handling for us */
+    mypid = getpid();
+    if (fork() == 0) {
+	int i;
+
+	for (i=0; i < 3; i++) {
+	    sleep(2);
+	    kill(mypid, SIGCHLD);
+	}
+	_exit(EXIT_SUCCESS);
+    }
+
+
+    /* Wait for signals */
+    write(1, "waiting for a SIGCHLD\n",22);
+    for(;;) {
+	sleep(10);
+	if (waitpid(-1, NULL, WNOHANG | WUNTRACED) > 0)
+	    break;
+	write(1, "after sleep\n", 12);
+    }
+
+    printf("Bye-bye!  All done!\n");
+    return 0;
+}
+
+#else
+
+int main(void)
+{
+    printf("Skipping test on non-mmu host!\n");
+    return 0;
+}
+
+#endif
diff --git a/ap/build/uClibc/test/signal/signal.c b/ap/build/uClibc/test/signal/signal.c
new file mode 100644
index 0000000..01d1a78
--- /dev/null
+++ b/ap/build/uClibc/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);
+}
diff --git a/ap/build/uClibc/test/signal/tst-raise.c b/ap/build/uClibc/test/signal/tst-raise.c
new file mode 100644
index 0000000..d24c316
--- /dev/null
+++ b/ap/build/uClibc/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;
+
+static 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/ap/build/uClibc/test/signal/tst-signal.c b/ap/build/uClibc/test/signal/tst-signal.c
new file mode 100644
index 0000000..6d31787
--- /dev/null
+++ b/ap/build/uClibc/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/ap/build/uClibc/test/signal/tst-sigset.c b/ap/build/uClibc/test/signal/tst-sigset.c
new file mode 100644
index 0000000..bc1b057
--- /dev/null
+++ b/ap/build/uClibc/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/ap/build/uClibc/test/signal/tst-sigsimple.c b/ap/build/uClibc/test/signal/tst-sigsimple.c
new file mode 100644
index 0000000..22bb85c
--- /dev/null
+++ b/ap/build/uClibc/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"