[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/build/uClibc/libc/string/strsignal.c b/ap/build/uClibc/libc/string/strsignal.c
new file mode 100644
index 0000000..0fbbf85
--- /dev/null
+++ b/ap/build/uClibc/libc/string/strsignal.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2002 Manuel Novoa III
+ * Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+/*
+ * Sep 11, 2003
+ * Patch by Atsushi Nemoto <anemo@mba.ocn.ne.jp> to do arch-required
+ * mapping of signal strings (alpha, mips, hppa, sparc).
+ */
+
+/* TODO: make a threadsafe version? */
+
+#include <features.h>
+#include <string.h>
+#include <bits/uClibc_uintmaxtostr.h>
+#include <signal.h>
+
+#define _SYS_NSIG 32
+
+#ifdef __UCLIBC_HAS_SIGNUM_MESSAGES__
+# define _SYS_SIGMSG_MAXLEN 25
+#else
+# define _SYS_SIGMSG_MAXLEN 0
+#endif
+
+#if _SYS_SIGMSG_MAXLEN < __UIM_BUFLEN_INT + 15
+# define _STRSIGNAL_BUFSIZE (__UIM_BUFLEN_INT + 15)
+#else
+# define _STRSIGNAL_BUFSIZE _SYS_SIGMSG_MAXLEN
+#endif
+
+#ifdef __UCLIBC_HAS_SIGNUM_MESSAGES__
+
+extern const char _string_syssigmsgs[] attribute_hidden;
+
+#if defined(__alpha__) || defined(__mips__) || defined(__hppa__) || defined(__sparc__)
+static const unsigned char sstridx[] = {
+ 0,
+ SIGHUP,
+ SIGINT,
+ SIGQUIT,
+ SIGILL,
+ SIGTRAP,
+ SIGIOT,
+ SIGBUS,
+ SIGFPE,
+ SIGKILL,
+ SIGUSR1,
+ SIGSEGV,
+ SIGUSR2,
+ SIGPIPE,
+ SIGALRM,
+ SIGTERM,
+#if defined SIGSTKFLT
+ SIGSTKFLT,
+#else
+ 0,
+#endif
+ SIGCHLD,
+ SIGCONT,
+ SIGSTOP,
+ SIGTSTP,
+ SIGTTIN,
+ SIGTTOU,
+ SIGURG,
+ SIGXCPU,
+ SIGXFSZ,
+ SIGVTALRM,
+ SIGPROF,
+ SIGWINCH,
+ SIGIO,
+ SIGPWR,
+ SIGSYS,
+#if defined SIGEMT
+ SIGEMT,
+#endif
+};
+#endif
+
+char *strsignal(int signum)
+{
+ register char *s;
+ int i;
+ static char buf[_STRSIGNAL_BUFSIZE];
+ static const char unknown[] = {
+ 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' '
+ };
+
+#if defined(__alpha__) || defined(__mips__) || defined(__hppa__) || defined(__sparc__)
+ /* Need to translate signum to string index. */
+ for (i = 0; i < sizeof(sstridx)/sizeof(sstridx[0]); i++) {
+ if (sstridx[i] == signum) {
+ goto GOT_SSTRIDX;
+ }
+ }
+ i = INT_MAX; /* Failed. */
+ GOT_SSTRIDX:
+#else
+ /* No signum to string index translation needed. */
+ i = signum;
+#endif
+
+ if (((unsigned int) signum) < _SYS_NSIG) {
+ /* Trade time for space. This function should rarely be called
+ * so rather than keeping an array of pointers for the different
+ * messages, just run through the buffer until we find the
+ * correct string. */
+ for (s = (char *) _string_syssigmsgs; i; ++s) {
+ if (!*s) {
+ --i;
+ }
+ }
+ if (*s) { /* Make sure we have an actual message. */
+ goto DONE;
+ }
+ }
+
+ s = _int10tostr(buf + sizeof(buf)-1, signum) - sizeof(unknown);
+ memcpy(s, unknown, sizeof(unknown));
+
+ DONE:
+ return s;
+}
+
+#else /* __UCLIBC_HAS_SIGNUM_MESSAGES__ */
+
+char *strsignal(int signum)
+{
+ static char buf[_STRSIGNAL_BUFSIZE];
+ static const char unknown[] = {
+ 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ', 's', 'i', 'g', 'n', 'a', 'l', ' '
+ };
+
+ return memcpy(_int10tostr(buf + sizeof(buf)-1, signum) - sizeof(unknown),
+ unknown, sizeof(unknown));
+}
+
+#endif /* __UCLIBC_HAS_SIGNUM_MESSAGES__ */
+
+libc_hidden_def(strsignal)