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)));
}