]> git.saurik.com Git - apple/libc.git/blob - string/FreeBSD/strsignal.c.patch
Libc-763.11.tar.gz
[apple/libc.git] / string / FreeBSD / strsignal.c.patch
1 --- strsignal.c.orig 2010-01-24 02:35:26.000000000 -0800
2 +++ strsignal.c 2010-05-06 12:29:53.000000000 -0700
3 @@ -47,8 +47,6 @@ __FBSDID("$FreeBSD: src/lib/libc/string/
4
5 #define UPREFIX "Unknown signal"
6
7 -static char sig_ebuf[NL_TEXTMAX];
8 -static char sig_ebuf_err[NL_TEXTMAX];
9 static once_t sig_init_once = ONCE_INITIALIZER;
10 static thread_key_t sig_key;
11 static int sig_keycreated = 0;
12 @@ -64,25 +62,19 @@ sig_tlsalloc(void)
13 {
14 char *ebuf = NULL;
15
16 - if (thr_main() != 0)
17 - ebuf = sig_ebuf;
18 - else {
19 - if (thr_once(&sig_init_once, sig_keycreate) != 0 ||
20 - !sig_keycreated)
21 + if (thr_once(&sig_init_once, sig_keycreate) != 0 ||
22 + !sig_keycreated)
23 + goto thr_err;
24 + if ((ebuf = thr_getspecific(sig_key)) == NULL) {
25 + if ((ebuf = malloc(NL_TEXTMAX * sizeof(char))) == NULL)
26 + goto thr_err;
27 + if (thr_setspecific(sig_key, ebuf) != 0) {
28 + free(ebuf);
29 + ebuf = NULL;
30 goto thr_err;
31 - if ((ebuf = thr_getspecific(sig_key)) == NULL) {
32 - if ((ebuf = malloc(sizeof(sig_ebuf))) == NULL)
33 - goto thr_err;
34 - if (thr_setspecific(sig_key, ebuf) != 0) {
35 - free(ebuf);
36 - ebuf = NULL;
37 - goto thr_err;
38 - }
39 }
40 }
41 thr_err:
42 - if (ebuf == NULL)
43 - ebuf = sig_ebuf_err;
44 return (ebuf);
45 }
46
47 @@ -103,15 +95,19 @@ strsignal(int num)
48 #endif
49
50 ebuf = sig_tlsalloc();
51 + if(ebuf == NULL) {
52 + errno = ENOMEM;
53 + return NULL;
54 + }
55
56 - if (num > 0 && num < sys_nsig) {
57 + if (num > 0 && num < NSIG) {
58 n = strlcpy(ebuf,
59 #if defined(NLS)
60 catgets(catd, 2, num, sys_siglist[num]),
61 #else
62 sys_siglist[num],
63 #endif
64 - sizeof(sig_ebuf));
65 + NL_TEXTMAX * sizeof(char));
66 } else {
67 n = strlcpy(ebuf,
68 #if defined(NLS)
69 @@ -119,7 +115,7 @@ strsignal(int num)
70 #else
71 UPREFIX,
72 #endif
73 - sizeof(sig_ebuf));
74 + NL_TEXTMAX * sizeof(char));
75 }
76
77 signum = num;