Mercurial > hg > octave-kai > gnulib-hg
annotate lib/strsignal.c @ 17463:203c036eb0c6
bootstrap: support checksum utils without a --status option
* build-aux/bootstrap: Only look for sha1sum if updating po files.
Add sha1 to the list of supported checksum utils since it's now
supported through adjustments below.
(update_po_files): Remove the use of --status
in a way that will suppress all error messages, but since this is
only used to minimize updates, it shouldn't cause an issue.
Exit early if there is a problem updating the po file checksums.
(find_tool): Remove the check for --version support as this
is optional as per commit 86186b17. Don't even check for the
presence of the command as if that is needed, it's supported
through configuring prerequisites in bootstrap.conf.
Prompt that when a tool isn't found, one can define an environment
variable to add to the hardcoded search list.
author | Pádraig Brady <P@draigBrady.com> |
---|---|
date | Thu, 08 Aug 2013 11:08:49 +0100 |
parents | e542fd46ad6f |
children |
rev | line source |
---|---|
17249
e542fd46ad6f
maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents:
16201
diff
changeset
|
1 /* Copyright (C) 1991, 1994-2002, 2005, 2008-2013 Free Software Foundation, |
12518
b5e42ef33b49
update nearly all FSF copyright year lists to include 2009
Jim Meyering <meyering@redhat.com>
parents:
12421
diff
changeset
|
2 Inc. |
9616 | 3 This file is part of the GNU C Library. |
4 | |
12002
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
8 (at your option) any later version. |
9616 | 9 |
12002
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
9616 | 11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
12002
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
13 GNU General Public License for more details. |
9616 | 14 |
12002
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
f295924fa612
Use the standard header with GPL copyright.
Bruno Haible <bruno@clisp.org>
parents:
10318
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
9616 | 17 |
18 #ifndef _LIBC | |
19 # include <config.h> | |
20 #endif | |
21 | |
15816
db340f34e324
glthread/*, strsignal: Support for MSVC.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
22 /* Specification. */ |
db340f34e324
glthread/*, strsignal: Support for MSVC.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
23 #include <string.h> |
db340f34e324
glthread/*, strsignal: Support for MSVC.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
24 |
9616 | 25 #include <signal.h> |
26 #include <stdio.h> | |
27 #include <stdlib.h> | |
28 | |
29 #ifdef _LIBC | |
30 # include <libintl.h> | |
31 #else /* !_LIBC */ | |
32 # include "gettext.h" | |
33 # define _(msgid) gettext (msgid) | |
34 # define N_(msgid) gettext_noop (msgid) | |
35 #endif /* _LIBC */ | |
36 | |
37 #ifdef _LIBC | |
38 # include <bits/libc-lock.h> | |
39 #else /* !_LIBC */ | |
10318
8a3539888308
Move the lock and tls source files into a subdirectory.
Bruno Haible <bruno@clisp.org>
parents:
9893
diff
changeset
|
40 # include "glthread/lock.h" |
8a3539888308
Move the lock and tls source files into a subdirectory.
Bruno Haible <bruno@clisp.org>
parents:
9893
diff
changeset
|
41 # include "glthread/tls.h" |
9616 | 42 # define __libc_once_define(CLASS, NAME) gl_once_define (CLASS, NAME) |
43 # define __libc_once(NAME, INIT) gl_once ((NAME), (INIT)) | |
44 # define __libc_key_t gl_tls_key_t | |
45 # define __libc_getspecific(NAME) gl_tls_get ((NAME)) | |
46 # define __libc_setspecific(NAME, POINTER) gl_tls_set ((NAME), (POINTER)) | |
47 # define __snprintf snprintf | |
48 #endif /* _LIBC */ | |
49 | |
50 #ifdef _LIBC | |
51 | |
52 /* Defined in siglist.c. */ | |
53 extern const char *const _sys_siglist[]; | |
54 extern const char *const _sys_siglist_internal[] attribute_hidden; | |
55 | |
56 #else /* !_LIBC */ | |
57 | |
58 /* NetBSD declares sys_siglist in unistd.h. */ | |
15816
db340f34e324
glthread/*, strsignal: Support for MSVC.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
59 # if HAVE_UNISTD_H |
db340f34e324
glthread/*, strsignal: Support for MSVC.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
60 # include <unistd.h> |
db340f34e324
glthread/*, strsignal: Support for MSVC.
Bruno Haible <bruno@clisp.org>
parents:
14079
diff
changeset
|
61 # endif |
9616 | 62 |
63 # define INTUSE(x) (x) | |
64 | |
65 # if HAVE_DECL_SYS_SIGLIST | |
66 # undef _sys_siglist | |
67 # define _sys_siglist sys_siglist | |
68 # else /* !HAVE_DECL_SYS_SIGLIST */ | |
69 # ifndef NSIG | |
70 # define NSIG 32 | |
71 # endif /* NSIG */ | |
9893
ec6e90aaf2d7
Fix two compilation errors.
Bruno Haible <bruno@clisp.org>
parents:
9616
diff
changeset
|
72 # if !HAVE_DECL__SYS_SIGLIST |
9616 | 73 static const char *_sys_siglist[NSIG]; |
9893
ec6e90aaf2d7
Fix two compilation errors.
Bruno Haible <bruno@clisp.org>
parents:
9616
diff
changeset
|
74 # endif |
9616 | 75 # endif /* !HAVE_DECL_SYS_SIGLIST */ |
76 | |
77 #endif /* _LIBC */ | |
78 | |
79 static __libc_key_t key; | |
80 | |
81 /* If nonzero the key allocation failed and we should better use a | |
82 static buffer than fail. */ | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
83 #define BUFFERSIZ 100 |
9616 | 84 static char local_buf[BUFFERSIZ]; |
85 static char *static_buf; | |
86 | |
87 /* Destructor for the thread-specific data. */ | |
88 static void init (void); | |
89 static void free_key_mem (void *mem); | |
90 static char *getbuffer (void); | |
91 | |
92 | |
93 /* Return a string describing the meaning of the signal number SIGNUM. */ | |
94 char * | |
95 strsignal (int signum) | |
96 { | |
97 const char *desc; | |
98 __libc_once_define (static, once); | |
99 | |
100 /* If we have not yet initialized the buffer do it now. */ | |
101 __libc_once (once, init); | |
102 | |
103 if ( | |
104 #ifdef SIGRTMIN | |
105 (signum >= SIGRTMIN && signum <= SIGRTMAX) || | |
106 #endif | |
107 signum < 0 || signum >= NSIG | |
108 || (desc = INTUSE(_sys_siglist)[signum]) == NULL) | |
109 { | |
110 char *buffer = getbuffer (); | |
111 int len; | |
112 #ifdef SIGRTMIN | |
113 if (signum >= SIGRTMIN && signum <= SIGRTMAX) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
114 len = __snprintf (buffer, BUFFERSIZ - 1, _("Real-time signal %d"), |
13957
4efda5bffbf3
signal: Document problem with type of SIGRTMIN, SIGRTMAX on OSF/1 5.1.
Bruno Haible <bruno@clisp.org>
parents:
12559
diff
changeset
|
115 signum - (int) SIGRTMIN); |
9616 | 116 else |
117 #endif | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
118 len = __snprintf (buffer, BUFFERSIZ - 1, _("Unknown signal %d"), |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
119 signum); |
9616 | 120 if (len >= BUFFERSIZ) |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
121 buffer = NULL; |
9616 | 122 else |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
123 buffer[len] = '\0'; |
9616 | 124 |
125 return buffer; | |
126 } | |
127 | |
128 return (char *) _(desc); | |
129 } | |
130 | |
131 | |
132 /* Initialize buffer. */ | |
133 static void | |
134 init (void) | |
135 { | |
136 #ifdef _LIBC | |
137 if (__libc_key_create (&key, free_key_mem)) | |
138 /* Creating the key failed. This means something really went | |
139 wrong. In any case use a static buffer which is better than | |
140 nothing. */ | |
141 static_buf = local_buf; | |
142 #else /* !_LIBC */ | |
143 gl_tls_key_init (key, free_key_mem); | |
144 | |
145 # if !HAVE_DECL_SYS_SIGLIST | |
146 memset (_sys_siglist, 0, NSIG * sizeof *_sys_siglist); | |
147 | |
148 /* No need to use a do {} while (0) here since init_sig(...) must expand | |
149 to a complete statement. (We cannot use the ISO C99 designated array | |
150 initializer syntax since it is not supported by ANSI C compilers and | |
151 since some signal numbers might exceed NSIG.) */ | |
152 # define init_sig(sig, abbrev, desc) \ | |
153 if (sig >= 0 && sig < NSIG) \ | |
154 _sys_siglist[sig] = desc; | |
155 | |
156 # include "siglist.h" | |
157 | |
158 # undef init_sig | |
159 | |
160 # endif /* !HAVE_DECL_SYS_SIGLIST */ | |
161 #endif /* !_LIBC */ | |
162 } | |
163 | |
164 | |
165 /* Free the thread specific data, this is done if a thread terminates. */ | |
166 static void | |
167 free_key_mem (void *mem) | |
168 { | |
169 free (mem); | |
170 __libc_setspecific (key, NULL); | |
171 } | |
172 | |
173 | |
174 /* Return the buffer to be used. */ | |
175 static char * | |
176 getbuffer (void) | |
177 { | |
178 char *result; | |
179 | |
180 if (static_buf != NULL) | |
181 result = static_buf; | |
182 else | |
183 { | |
184 /* We don't use the static buffer and so we have a key. Use it | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
185 to get the thread-specific buffer. */ |
9616 | 186 result = __libc_getspecific (key); |
187 if (result == NULL) | |
12421
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
188 { |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
189 /* No buffer allocated so far. */ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
190 result = malloc (BUFFERSIZ); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
191 if (result == NULL) |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
192 /* No more memory available. We use the static buffer. */ |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
193 result = local_buf; |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
194 else |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
195 __libc_setspecific (key, result); |
e8d2c6fc33ad
Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents:
12002
diff
changeset
|
196 } |
9616 | 197 } |
198 | |
199 return result; | |
200 } |