Loading...
--- /dev/null
+++ Libc/Libc-763.13/string/FreeBSD/strsignal.c.patch
@@ -0,0 +1,77 @@
+--- strsignal.c.orig 2010-01-24 02:35:26.000000000 -0800
++++ strsignal.c 2010-05-06 12:29:53.000000000 -0700
+@@ -47,8 +47,6 @@ __FBSDID("$FreeBSD: src/lib/libc/string/
+
+ #define UPREFIX "Unknown signal"
+
+-static char sig_ebuf[NL_TEXTMAX];
+-static char sig_ebuf_err[NL_TEXTMAX];
+ static once_t sig_init_once = ONCE_INITIALIZER;
+ static thread_key_t sig_key;
+ static int sig_keycreated = 0;
+@@ -64,25 +62,19 @@ sig_tlsalloc(void)
+ {
+ char *ebuf = NULL;
+
+- if (thr_main() != 0)
+- ebuf = sig_ebuf;
+- else {
+- if (thr_once(&sig_init_once, sig_keycreate) != 0 ||
+- !sig_keycreated)
++ if (thr_once(&sig_init_once, sig_keycreate) != 0 ||
++ !sig_keycreated)
++ goto thr_err;
++ if ((ebuf = thr_getspecific(sig_key)) == NULL) {
++ if ((ebuf = malloc(NL_TEXTMAX * sizeof(char))) == NULL)
++ goto thr_err;
++ if (thr_setspecific(sig_key, ebuf) != 0) {
++ free(ebuf);
++ ebuf = NULL;
+ goto thr_err;
+- if ((ebuf = thr_getspecific(sig_key)) == NULL) {
+- if ((ebuf = malloc(sizeof(sig_ebuf))) == NULL)
+- goto thr_err;
+- if (thr_setspecific(sig_key, ebuf) != 0) {
+- free(ebuf);
+- ebuf = NULL;
+- goto thr_err;
+- }
+ }
+ }
+ thr_err:
+- if (ebuf == NULL)
+- ebuf = sig_ebuf_err;
+ return (ebuf);
+ }
+
+@@ -103,15 +95,19 @@ strsignal(int num)
+ #endif
+
+ ebuf = sig_tlsalloc();
++ if(ebuf == NULL) {
++ errno = ENOMEM;
++ return NULL;
++ }
+
+- if (num > 0 && num < sys_nsig) {
++ if (num > 0 && num < NSIG) {
+ n = strlcpy(ebuf,
+ #if defined(NLS)
+ catgets(catd, 2, num, sys_siglist[num]),
+ #else
+ sys_siglist[num],
+ #endif
+- sizeof(sig_ebuf));
++ NL_TEXTMAX * sizeof(char));
+ } else {
+ n = strlcpy(ebuf,
+ #if defined(NLS)
+@@ -119,7 +115,7 @@ strsignal(int num)
+ #else
+ UPREFIX,
+ #endif
+- sizeof(sig_ebuf));
++ NL_TEXTMAX * sizeof(char));
+ }
+
+ signum = num;