Deleted Added
full compact
strsignal.c (165903) strsignal.c (202916)
1/*
2 * Copyright (c) 1988, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#if defined(LIBC_SCCS) && !defined(lint)
31static char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93";
32#endif /* LIBC_SCCS and not lint */
33#include <sys/cdefs.h>
1/*
2 * Copyright (c) 1988, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#if defined(LIBC_SCCS) && !defined(lint)
31static char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93";
32#endif /* LIBC_SCCS and not lint */
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/lib/libc/string/strsignal.c 165903 2007-01-09 00:28:16Z imp $");
34__FBSDID("$FreeBSD: head/lib/libc/string/strsignal.c 202916 2010-01-24 10:35:26Z ume $");
35
35
36#include "namespace.h"
36#if defined(NLS)
37#include <nl_types.h>
38#endif
37#if defined(NLS)
38#include <nl_types.h>
39#endif
39
40#include <limits.h>
41#include <errno.h>
40#include <limits.h>
41#include <errno.h>
42#include <stdlib.h>
42#include <string.h>
43#include <signal.h>
43#include <string.h>
44#include <signal.h>
45#include "reentrant.h"
46#include "un-namespace.h"
44
45#define UPREFIX "Unknown signal"
46
47
48#define UPREFIX "Unknown signal"
49
50static char sig_ebuf[NL_TEXTMAX];
51static char sig_ebuf_err[NL_TEXTMAX];
52static once_t sig_init_once = ONCE_INITIALIZER;
53static thread_key_t sig_key;
54static int sig_keycreated = 0;
55
56static void
57sig_keycreate(void)
58{
59 sig_keycreated = (thr_keycreate(&sig_key, free) == 0);
60}
61
62static char *
63sig_tlsalloc(void)
64{
65 char *ebuf = NULL;
66
67 if (thr_main() != 0)
68 ebuf = sig_ebuf;
69 else {
70 if (thr_once(&sig_init_once, sig_keycreate) != 0 ||
71 !sig_keycreated)
72 goto thr_err;
73 if ((ebuf = thr_getspecific(sig_key)) == NULL) {
74 if ((ebuf = malloc(sizeof(sig_ebuf))) == NULL)
75 goto thr_err;
76 if (thr_setspecific(sig_key, ebuf) != 0) {
77 free(ebuf);
78 ebuf = NULL;
79 goto thr_err;
80 }
81 }
82 }
83thr_err:
84 if (ebuf == NULL)
85 ebuf = sig_ebuf_err;
86 return (ebuf);
87}
88
47/* XXX: negative 'num' ? (REGR) */
48char *
49strsignal(int num)
50{
89/* XXX: negative 'num' ? (REGR) */
90char *
91strsignal(int num)
92{
51 static char ebuf[NL_TEXTMAX];
93 char *ebuf;
52 char tmp[20];
53 size_t n;
54 int signum;
55 char *t, *p;
56
57#if defined(NLS)
58 int saved_errno = errno;
59 nl_catd catd;
60 catd = catopen("libc", NL_CAT_LOCALE);
61#endif
62
94 char tmp[20];
95 size_t n;
96 int signum;
97 char *t, *p;
98
99#if defined(NLS)
100 int saved_errno = errno;
101 nl_catd catd;
102 catd = catopen("libc", NL_CAT_LOCALE);
103#endif
104
105 ebuf = sig_tlsalloc();
106
63 if (num > 0 && num < sys_nsig) {
64 n = strlcpy(ebuf,
65#if defined(NLS)
66 catgets(catd, 2, num, sys_siglist[num]),
67#else
68 sys_siglist[num],
69#endif
107 if (num > 0 && num < sys_nsig) {
108 n = strlcpy(ebuf,
109#if defined(NLS)
110 catgets(catd, 2, num, sys_siglist[num]),
111#else
112 sys_siglist[num],
113#endif
70 sizeof(ebuf));
114 sizeof(sig_ebuf));
71 } else {
72 n = strlcpy(ebuf,
73#if defined(NLS)
74 catgets(catd, 2, 0xffff, UPREFIX),
75#else
76 UPREFIX,
77#endif
115 } else {
116 n = strlcpy(ebuf,
117#if defined(NLS)
118 catgets(catd, 2, 0xffff, UPREFIX),
119#else
120 UPREFIX,
121#endif
78 sizeof(ebuf));
122 sizeof(sig_ebuf));
79 }
80
81 signum = num;
82 if (num < 0)
83 signum = -signum;
84
85 t = tmp;
86 do {

--- 22 unchanged lines hidden ---
123 }
124
125 signum = num;
126 if (num < 0)
127 signum = -signum;
128
129 t = tmp;
130 do {

--- 22 unchanged lines hidden ---