Lines 76-81
const char * signal_description(int signal) {
Link Here
|
76 |
return NULL; |
76 |
return NULL; |
77 |
} |
77 |
} |
78 |
|
78 |
|
|
|
79 |
int signal_cnt(void) { |
80 |
return EXCEPTION_NAMES_CNT; |
81 |
} |
82 |
|
79 |
unsigned signal_code(int signal) { |
83 |
unsigned signal_code(int signal) { |
80 |
int n = signal - 1; |
84 |
int n = signal - 1; |
81 |
if (n >= 0 && n < EXCEPTION_NAMES_CNT) return exception_names[n].code; |
85 |
if (n >= 0 && n < EXCEPTION_NAMES_CNT) return exception_names[n].code; |
Lines 103-109
typedef struct SignalInfo {
Link Here
|
103 |
const char * desc; |
107 |
const char * desc; |
104 |
} SignalInfo; |
108 |
} SignalInfo; |
105 |
|
109 |
|
106 |
#define SigDesc(sig, desc) { sig, ""#sig, desc }, |
110 |
#define SigDesc(sig, desc) [sig] = { sig, ""#sig, desc }, |
107 |
static SignalInfo info[] = { |
111 |
static SignalInfo info[] = { |
108 |
SigDesc(SIGHUP, "Hangup") |
112 |
SigDesc(SIGHUP, "Hangup") |
109 |
SigDesc(SIGINT, "Interrupt") |
113 |
SigDesc(SIGINT, "Interrupt") |
Lines 154-185
static SignalInfo info[] = {
Link Here
|
154 |
|
158 |
|
155 |
#define INFO_CNT ((int)(sizeof(info) / sizeof(SignalInfo))) |
159 |
#define INFO_CNT ((int)(sizeof(info) / sizeof(SignalInfo))) |
156 |
|
160 |
|
157 |
static SignalInfo * get_info(int signal) { |
|
|
158 |
static SignalInfo * index[32]; |
159 |
static int index_ok = 0; |
160 |
if (signal < 0 || signal > 31) return NULL; |
161 |
if (!index_ok) { |
162 |
int i; |
163 |
for (i = 0; i < INFO_CNT; i++) { |
164 |
index[info[i].signal] = &info[i]; |
165 |
} |
166 |
index_ok = 1; |
167 |
} |
168 |
return index[signal]; |
169 |
} |
170 |
|
171 |
const char * signal_name(int signal) { |
161 |
const char * signal_name(int signal) { |
172 |
SignalInfo * i = get_info(signal); |
162 |
SignalInfo * i = &info[signal]; |
173 |
if (i != NULL) return i->name; |
163 |
if (i != NULL) return i->name; |
174 |
return NULL; |
164 |
return NULL; |
175 |
} |
165 |
} |
176 |
|
166 |
|
177 |
const char * signal_description(int signal) { |
167 |
const char * signal_description(int signal) { |
178 |
SignalInfo * i = get_info(signal); |
168 |
SignalInfo * i = &info[signal]; |
179 |
if (i != NULL) return i->desc; |
169 |
if (i != NULL) return i->desc; |
180 |
return NULL; |
170 |
return NULL; |
181 |
} |
171 |
} |
182 |
|
172 |
|
|
|
173 |
int signal_cnt(void) { |
174 |
return INFO_CNT; |
175 |
} |
176 |
|
183 |
unsigned signal_code(int signal) { |
177 |
unsigned signal_code(int signal) { |
184 |
return signal; |
178 |
return signal; |
185 |
} |
179 |
} |