Loading...
string/FreeBSD/strsignal.c.patch /dev/null Libc-763.12
--- /dev/null
+++ Libc/Libc-763.12/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;