View | Details | Raw Unified | Return to bug 408257
Collapse All | Expand All

(-)a/agent/tcf/framework/signames.c (-17 / +11 lines)
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
}
(-)a/agent/tcf/framework/signames.h (+3 lines)
Lines 26-31 extern const char * signal_name(int signal); Link Here
26
/* Return human readable signal description, or NULL if not available */
26
/* Return human readable signal description, or NULL if not available */
27
extern const char * signal_description(int signal);
27
extern const char * signal_description(int signal);
28
28
29
/* Return the number of signals supported by the OS*/
30
extern int signal_cnt(void);
31
29
/* Return OS exception code for a signal. For POSIX OSes, the code and signal values are same */
32
/* Return OS exception code for a signal. For POSIX OSes, the code and signal values are same */
30
extern unsigned signal_code(int signal);
33
extern unsigned signal_code(int signal);
31
34
(-)a/agent/tcf/services/processes.c (-2 / +2 lines)
Lines 700-707 static void command_get_signal_list(char * token, Channel * c) { Link Here
700
    else {
700
    else {
701
        int i = 0;
701
        int i = 0;
702
        int n = 0;
702
        int n = 0;
703
        int cnt = signal_cnt();;
703
        write_stream(&c->out, '[');
704
        write_stream(&c->out, '[');
704
        for (i = 0; i < 32; i++) {
705
        for (i = 0; i < cnt; i++) {
705
            const char * name = signal_name(i);
706
            const char * name = signal_name(i);
706
            const char * desc = signal_description(i);
707
            const char * desc = signal_description(i);
707
            if (name != NULL || desc != NULL) {
708
            if (name != NULL || desc != NULL) {
708
- 

Return to bug 408257