Print this page
OS-4300 increase RT signal count
Reviewed by: Robert Mustacchi <rm@joyent.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/lib/libc/port/gen/str2sig.c
+++ new/usr/src/lib/libc/port/gen/str2sig.c
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
↓ open down ↓ |
14 lines elided |
↑ open up ↑ |
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21
22 22 /*
23 23 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
24 24 * Use is subject to license terms.
25 - * Copyright (c) 2014, Joyent, Inc. All rights reserved.
25 + * Copyright 2015, Joyent, Inc.
26 26 */
27 27
28 28 /* Copyright (c) 1988 AT&T */
29 29 /* All Rights Reserved */
30 30
31 31 #include "lint.h"
32 32 #include <string.h>
33 33 #include <stdlib.h>
34 34 #include <signal.h>
35 35 #include <sys/types.h>
36 36 #include <errno.h>
37 37
38 38 typedef struct signame {
39 39 const char *sigstr;
40 40 const int signum;
41 41 } signame_t;
42 42
43 43 static signame_t signames[] = {
44 44 { "EXIT", 0 },
45 45 { "HUP", SIGHUP },
46 46 { "INT", SIGINT },
47 47 { "QUIT", SIGQUIT },
48 48 { "ILL", SIGILL },
49 49 { "TRAP", SIGTRAP },
50 50 { "ABRT", SIGABRT },
51 51 { "IOT", SIGIOT },
52 52 { "EMT", SIGEMT },
53 53 { "FPE", SIGFPE },
54 54 { "KILL", SIGKILL },
55 55 { "BUS", SIGBUS },
56 56 { "SEGV", SIGSEGV },
57 57 { "SYS", SIGSYS },
58 58 { "PIPE", SIGPIPE },
59 59 { "ALRM", SIGALRM },
60 60 { "TERM", SIGTERM },
61 61 { "USR1", SIGUSR1 },
62 62 { "USR2", SIGUSR2 },
63 63 { "CLD", SIGCLD },
64 64 { "CHLD", SIGCHLD },
65 65 { "PWR", SIGPWR },
66 66 { "WINCH", SIGWINCH },
67 67 { "URG", SIGURG },
68 68 { "POLL", SIGPOLL },
69 69 { "IO", SIGPOLL },
70 70 { "STOP", SIGSTOP },
71 71 { "TSTP", SIGTSTP },
72 72 { "CONT", SIGCONT },
73 73 { "TTIN", SIGTTIN },
74 74 { "TTOU", SIGTTOU },
75 75 { "VTALRM", SIGVTALRM },
76 76 { "PROF", SIGPROF },
77 77 { "XCPU", SIGXCPU },
78 78 { "XFSZ", SIGXFSZ },
79 79 { "WAITING", SIGWAITING },
80 80 { "LWP", SIGLWP },
81 81 { "FREEZE", SIGFREEZE },
82 82 { "THAW", SIGTHAW },
83 83 { "CANCEL", SIGCANCEL },
84 84 { "LOST", SIGLOST },
85 85 { "XRES", SIGXRES },
86 86 { "JVM1", SIGJVM1 },
87 87 { "JVM2", SIGJVM2 },
88 88 { "INFO", SIGINFO },
89 89 { "RTMIN", _SIGRTMIN },
90 90 { "RTMIN+1", _SIGRTMIN+1 },
91 91 { "RTMIN+2", _SIGRTMIN+2 },
92 92 { "RTMIN+3", _SIGRTMIN+3 },
93 93 { "RTMIN+4", _SIGRTMIN+4 },
94 94 { "RTMIN+5", _SIGRTMIN+5 },
|
↓ open down ↓ |
59 lines elided |
↑ open up ↑ |
95 95 { "RTMIN+6", _SIGRTMIN+6 },
96 96 { "RTMIN+7", _SIGRTMIN+7 },
97 97 { "RTMIN+8", _SIGRTMIN+8 },
98 98 { "RTMIN+9", _SIGRTMIN+9 },
99 99 { "RTMIN+10", _SIGRTMIN+10 },
100 100 { "RTMIN+11", _SIGRTMIN+11 },
101 101 { "RTMIN+12", _SIGRTMIN+12 },
102 102 { "RTMIN+13", _SIGRTMIN+13 },
103 103 { "RTMIN+14", _SIGRTMIN+14 },
104 104 { "RTMIN+15", _SIGRTMIN+15 },
105 + { "RTMIN+16", _SIGRTMIN+16 },
105 106 { "RTMAX-15", _SIGRTMAX-15 },
106 107 { "RTMAX-14", _SIGRTMAX-14 },
107 108 { "RTMAX-13", _SIGRTMAX-13 },
108 109 { "RTMAX-12", _SIGRTMAX-12 },
109 110 { "RTMAX-11", _SIGRTMAX-11 },
110 111 { "RTMAX-10", _SIGRTMAX-10 },
111 112 { "RTMAX-9", _SIGRTMAX-9 },
112 113 { "RTMAX-8", _SIGRTMAX-8 },
113 114 { "RTMAX-7", _SIGRTMAX-7 },
114 115 { "RTMAX-6", _SIGRTMAX-6 },
115 116 { "RTMAX-5", _SIGRTMAX-5 },
116 117 { "RTMAX-4", _SIGRTMAX-4 },
117 118 { "RTMAX-3", _SIGRTMAX-3 },
118 119 { "RTMAX-2", _SIGRTMAX-2 },
119 120 { "RTMAX-1", _SIGRTMAX-1 },
120 121 { "RTMAX", _SIGRTMAX },
121 122 };
122 123
123 124 #define SIGCNT (sizeof (signames) / sizeof (struct signame))
124 125
125 126 static int str2long(const char *, long *);
126 127
127 128 static int
128 129 str2long(const char *p, long *val)
129 130 {
130 131 char *q;
131 132 int error;
132 133 int saved_errno = errno;
133 134
134 135 errno = 0;
135 136 *val = strtol(p, &q, 10);
136 137
137 138 error = ((errno != 0 || q == p || *q != '\0') ? -1 : 0);
138 139 errno = saved_errno;
139 140
140 141 return (error);
141 142 }
142 143
143 144 int
144 145 str2sig(const char *s, int *sigp)
145 146 {
146 147 const struct signame *sp;
147 148
148 149 if (*s >= '0' && *s <= '9') {
149 150 long val;
150 151
151 152 if (str2long(s, &val) == -1)
152 153 return (-1);
153 154
154 155 for (sp = signames; sp < &signames[SIGCNT]; sp++) {
155 156 if (sp->signum == val) {
156 157 *sigp = sp->signum;
157 158 return (0);
158 159 }
159 160 }
160 161 return (-1);
161 162 } else {
162 163 for (sp = signames; sp < &signames[SIGCNT]; sp++) {
163 164 if (strcmp(sp->sigstr, s) == 0) {
164 165 *sigp = sp->signum;
165 166 return (0);
166 167 }
167 168 }
168 169 return (-1);
169 170 }
170 171 }
171 172
172 173 int
173 174 sig2str(int i, char *s)
174 175 {
175 176 const struct signame *sp;
176 177
177 178 for (sp = signames; sp < &signames[SIGCNT]; sp++) {
178 179 if (sp->signum == i) {
179 180 (void) strcpy(s, sp->sigstr);
180 181 return (0);
181 182 }
182 183 }
183 184 return (-1);
184 185 }
|
↓ open down ↓ |
70 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX