Remove _sys_signal_strings.

We already have sys_siglist as public API.

Test: tests pass
Change-Id: I45bf72955f41b34d91fac19dbfb2946bb9995ef4
diff --git a/libc/bionic/strsignal.cpp b/libc/bionic/strsignal.cpp
index 1cdfec1..5637431 100644
--- a/libc/bionic/strsignal.cpp
+++ b/libc/bionic/strsignal.cpp
@@ -26,20 +26,43 @@
  * SUCH DAMAGE.
  */
 
+#include <signal.h>
 #include <string.h>
 
 #include "bionic/pthread_internal.h"
 
-extern "C" const char* __strsignal_lookup(int);
-extern "C" const char* __strsignal(int, char*, size_t);
+const char* const sys_siglist[NSIG] = {
+#define __BIONIC_SIGDEF(signal_number, signal_description) [ signal_number ] = signal_description,
+#include "private/bionic_sigdefs.h"
+};
 
-char* strsignal(int signal_number) {
-  // Just return the original constant in the easy cases.
-  char* result = const_cast<char*>(__strsignal_lookup(signal_number));
-  if (result != nullptr) {
-    return result;
+const char* const sys_signame[NSIG] = {
+#define __BIONIC_SIGDEF(signal_number, unused) [ signal_number ] = #signal_number + 3,
+#include "private/bionic_sigdefs.h"
+};
+
+extern "C" __LIBC_HIDDEN__ const char* __strsignal(int signal_number, char* buf, size_t buf_len) {
+  const char* signal_name = nullptr;
+  if (signal_number >= 0 && signal_number < NSIG) {
+    signal_name = sys_siglist[signal_number];
+  }
+  if (signal_name != nullptr) {
+    return signal_name;
   }
 
+  const char* prefix = "Unknown";
+  if (signal_number >= SIGRTMIN && signal_number <= SIGRTMAX) {
+    prefix = "Real-time";
+    signal_number -= SIGRTMIN;
+  }
+  size_t length = snprintf(buf, buf_len, "%s signal %d", prefix, signal_number);
+  if (length >= buf_len) {
+    return nullptr;
+  }
+  return buf;
+}
+
+char* strsignal(int signal_number) {
   bionic_tls& tls = __get_bionic_tls();
   return const_cast<char*>(__strsignal(signal_number, tls.strsignal_buf, sizeof(tls.strsignal_buf)));
 }