OILS / _gen / frontend / signal.cc View on Github | oils.pub

221 lines, 178 significant
1#include "signal.h"
2
3#include <signal.h> // SIG*
4#include <stdio.h> // printf
5
6namespace signal_def {
7
8int MaxSigNumber() {
9 return 31;
10}
11
12int GetNumber(BigStr* sig_spec) {
13 int length = len(sig_spec);
14 if (length == 0) {
15 return NO_SIGNAL;
16 }
17
18 const char* data = sig_spec->data_;
19
20 if (length == 3 && memcmp("HUP", data, 3) == 0) {
21 return SIGHUP;
22 }
23 if (length == 3 && memcmp("INT", data, 3) == 0) {
24 return SIGINT;
25 }
26 if (length == 4 && memcmp("QUIT", data, 4) == 0) {
27 return SIGQUIT;
28 }
29 if (length == 3 && memcmp("ILL", data, 3) == 0) {
30 return SIGILL;
31 }
32 if (length == 4 && memcmp("TRAP", data, 4) == 0) {
33 return SIGTRAP;
34 }
35 if (length == 4 && memcmp("ABRT", data, 4) == 0) {
36 return SIGABRT;
37 }
38 if (length == 3 && memcmp("BUS", data, 3) == 0) {
39 return SIGBUS;
40 }
41 if (length == 3 && memcmp("FPE", data, 3) == 0) {
42 return SIGFPE;
43 }
44 if (length == 4 && memcmp("KILL", data, 4) == 0) {
45 return SIGKILL;
46 }
47 if (length == 4 && memcmp("USR1", data, 4) == 0) {
48 return SIGUSR1;
49 }
50 if (length == 4 && memcmp("SEGV", data, 4) == 0) {
51 return SIGSEGV;
52 }
53 if (length == 4 && memcmp("USR2", data, 4) == 0) {
54 return SIGUSR2;
55 }
56 if (length == 4 && memcmp("PIPE", data, 4) == 0) {
57 return SIGPIPE;
58 }
59 if (length == 4 && memcmp("ALRM", data, 4) == 0) {
60 return SIGALRM;
61 }
62 if (length == 4 && memcmp("TERM", data, 4) == 0) {
63 return SIGTERM;
64 }
65 if (length == 4 && memcmp("CHLD", data, 4) == 0) {
66 return SIGCHLD;
67 }
68 if (length == 4 && memcmp("CONT", data, 4) == 0) {
69 return SIGCONT;
70 }
71 if (length == 4 && memcmp("STOP", data, 4) == 0) {
72 return SIGSTOP;
73 }
74 if (length == 4 && memcmp("TSTP", data, 4) == 0) {
75 return SIGTSTP;
76 }
77 if (length == 4 && memcmp("TTIN", data, 4) == 0) {
78 return SIGTTIN;
79 }
80 if (length == 4 && memcmp("TTOU", data, 4) == 0) {
81 return SIGTTOU;
82 }
83 if (length == 3 && memcmp("URG", data, 3) == 0) {
84 return SIGURG;
85 }
86 if (length == 4 && memcmp("XCPU", data, 4) == 0) {
87 return SIGXCPU;
88 }
89 if (length == 4 && memcmp("XFSZ", data, 4) == 0) {
90 return SIGXFSZ;
91 }
92 if (length == 6 && memcmp("VTALRM", data, 6) == 0) {
93 return SIGVTALRM;
94 }
95 if (length == 5 && memcmp("WINCH", data, 5) == 0) {
96 return SIGWINCH;
97 }
98 if (length == 3 && memcmp("SYS", data, 3) == 0) {
99 return SIGSYS;
100 }
101 return NO_SIGNAL;
102}
103
104GLOBAL_STR(kSIGHUP, "SIGHUP");
105GLOBAL_STR(kSIGINT, "SIGINT");
106GLOBAL_STR(kSIGQUIT, "SIGQUIT");
107GLOBAL_STR(kSIGILL, "SIGILL");
108GLOBAL_STR(kSIGTRAP, "SIGTRAP");
109GLOBAL_STR(kSIGABRT, "SIGABRT");
110GLOBAL_STR(kSIGBUS, "SIGBUS");
111GLOBAL_STR(kSIGFPE, "SIGFPE");
112GLOBAL_STR(kSIGKILL, "SIGKILL");
113GLOBAL_STR(kSIGUSR1, "SIGUSR1");
114GLOBAL_STR(kSIGSEGV, "SIGSEGV");
115GLOBAL_STR(kSIGUSR2, "SIGUSR2");
116GLOBAL_STR(kSIGPIPE, "SIGPIPE");
117GLOBAL_STR(kSIGALRM, "SIGALRM");
118GLOBAL_STR(kSIGTERM, "SIGTERM");
119GLOBAL_STR(kSIGCHLD, "SIGCHLD");
120GLOBAL_STR(kSIGCONT, "SIGCONT");
121GLOBAL_STR(kSIGSTOP, "SIGSTOP");
122GLOBAL_STR(kSIGTSTP, "SIGTSTP");
123GLOBAL_STR(kSIGTTIN, "SIGTTIN");
124GLOBAL_STR(kSIGTTOU, "SIGTTOU");
125GLOBAL_STR(kSIGURG, "SIGURG");
126GLOBAL_STR(kSIGXCPU, "SIGXCPU");
127GLOBAL_STR(kSIGXFSZ, "SIGXFSZ");
128GLOBAL_STR(kSIGVTALRM, "SIGVTALRM");
129GLOBAL_STR(kSIGWINCH, "SIGWINCH");
130GLOBAL_STR(kSIGSYS, "SIGSYS");
131BigStr* GetName(int sig_num) {
132 switch (sig_num) {
133 case 1:
134 return kSIGHUP;
135 break;
136 case 2:
137 return kSIGINT;
138 break;
139 case 3:
140 return kSIGQUIT;
141 break;
142 case 4:
143 return kSIGILL;
144 break;
145 case 5:
146 return kSIGTRAP;
147 break;
148 case 6:
149 return kSIGABRT;
150 break;
151 case 7:
152 return kSIGBUS;
153 break;
154 case 8:
155 return kSIGFPE;
156 break;
157 case 9:
158 return kSIGKILL;
159 break;
160 case 10:
161 return kSIGUSR1;
162 break;
163 case 11:
164 return kSIGSEGV;
165 break;
166 case 12:
167 return kSIGUSR2;
168 break;
169 case 13:
170 return kSIGPIPE;
171 break;
172 case 14:
173 return kSIGALRM;
174 break;
175 case 15:
176 return kSIGTERM;
177 break;
178 case 17:
179 return kSIGCHLD;
180 break;
181 case 18:
182 return kSIGCONT;
183 break;
184 case 19:
185 return kSIGSTOP;
186 break;
187 case 20:
188 return kSIGTSTP;
189 break;
190 case 21:
191 return kSIGTTIN;
192 break;
193 case 22:
194 return kSIGTTOU;
195 break;
196 case 23:
197 return kSIGURG;
198 break;
199 case 24:
200 return kSIGXCPU;
201 break;
202 case 25:
203 return kSIGXFSZ;
204 break;
205 case 26:
206 return kSIGVTALRM;
207 break;
208 case 28:
209 return kSIGWINCH;
210 break;
211 case 31:
212 return kSIGSYS;
213 break;
214 default:
215 return nullptr;
216 }
217}
218
219
220
221} // namespace signal_def