clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name map_parse.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -pic-is-pie -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/sbin/wsconsctl/obj -resource-dir /usr/local/lib/clang/13.0.0 -I /usr/src/sbin/wsconsctl -I . -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/sbin/wsconsctl/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c map_parse.c
1 | #include <stdlib.h> |
2 | #include <string.h> |
3 | #define YYBYACC 1 |
4 | #define YYMAJOR 1 |
5 | #define YYMINOR 9 |
6 | #define YYLEX yylex() |
7 | #define YYEMPTY -1 |
8 | #define yyclearin (yychar=(YYEMPTY)) |
9 | #define yyerrok (yyerrflag=0) |
10 | #define YYRECOVERING() (yyerrflag!=0) |
11 | #define YYPREFIX "yy" |
12 | #line 50 "/usr/src/sbin/wsconsctl/map_parse.y" |
13 | |
14 | #include <sys/time.h> |
15 | #include <dev/wscons/wsksymdef.h> |
16 | #include <dev/wscons/wsconsio.h> |
17 | #include <err.h> |
18 | #include "wsconsctl.h" |
19 | |
20 | extern struct wskbd_map_data kbmap; |
21 | |
22 | static struct wscons_keymap mapdata[KS_NUMKEYCODES]; |
23 | struct wskbd_map_data newkbmap; |
24 | static struct wscons_keymap *cur_mp; |
25 | |
26 | static int ksym_lookup(keysym_t); |
27 | |
28 | static int |
29 | ksym_lookup(keysym_t ksym) |
30 | { |
31 | int i; |
32 | struct wscons_keymap *mp; |
33 | |
34 | for (i = 0; i < kbmap.maplen; i++) { |
35 | mp = kbmap.map + i; |
36 | if (mp->command == ksym || |
37 | mp->group1[0] == ksym || mp->group1[1] == ksym || |
38 | mp->group2[0] == ksym || mp->group2[1] == ksym) |
39 | return(i); |
40 | } |
41 | |
42 | errx(1, "keysym %s not found", ksym2name(ksym)); |
43 | } |
44 | |
45 | #line 84 "/usr/src/sbin/wsconsctl/map_parse.y" |
46 | #ifndef YYSTYPE_DEFINED |
47 | #define YYSTYPE_DEFINED |
48 | typedef union { |
49 | keysym_t kval; |
50 | int ival; |
51 | } YYSTYPE; |
52 | #endif /* YYSTYPE_DEFINED */ |
53 | #line 54 "map_parse.c" |
54 | #define T_KEYSYM 257 |
55 | #define T_KEYCODE 258 |
56 | #define T_KEYSYM_VAR 259 |
57 | #define T_KEYSYM_CMD_VAR 260 |
58 | #define T_NUMBER 261 |
59 | #define YYERRCODE 256 |
60 | const short yylhs[] = |
61 | { -1, |
62 | 3, 0, 2, 2, 4, 4, 5, 8, 6, 7, |
63 | 7, 9, 9, 9, 9, 1, 1, |
64 | }; |
65 | const short yylen[] = |
66 | { 2, |
67 | 0, 2, 1, 2, 1, 1, 4, 0, 6, 0, |
68 | 1, 1, 2, 3, 4, 1, 1, |
69 | }; |
70 | const short yydefred[] = |
71 | { 1, |
72 | 0, 0, 0, 0, 0, 3, 5, 6, 16, 17, |
73 | 0, 0, 4, 0, 8, 7, 0, 11, 0, 0, |
74 | 9, 0, 0, 15, |
75 | }; |
76 | const short yydgoto[] = |
77 | { 1, |
78 | 11, 5, 2, 6, 7, 8, 19, 17, 21, |
79 | }; |
80 | const short yysindex[] = |
81 | { 0, |
82 | 0, -242, -255, -261, -242, 0, 0, 0, 0, 0, |
83 | -52, -48, 0, -255, 0, 0, -243, 0, -255, -255, |
84 | 0, -255, -255, 0,}; |
85 | const short yyrindex[] = |
86 | { 0, |
87 | 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, |
88 | 0, 0, 0, 0, 0, 0, -247, 0, 0, 1, |
89 | 0, 3, 5, 0,}; |
90 | const short yygindex[] = |
91 | { 0, |
92 | -12, 0, 0, 14, 0, 0, 0, 0, 0, |
93 | }; |
94 | #define YYTABLESIZE 263 |
95 | const short yytable[] = |
96 | { 12, |
97 | 12, 16, 13, 9, 14, 10, 20, 22, 14, 23, |
98 | 24, 10, 15, 10, 3, 4, 18, 2, 13, 0, |
99 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
100 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
101 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
102 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
103 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
104 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
105 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
106 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
107 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
108 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
109 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
110 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
111 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
112 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
113 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
114 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
115 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
116 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
117 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
118 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
119 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
120 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
121 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
122 | 0, 0, 0, 0, 0, 0, 0, 12, 12, 13, |
123 | 13, 14, 14, |
124 | }; |
125 | const short yycheck[] = |
126 | { 261, |
127 | 0, 14, 0, 259, 0, 261, 19, 20, 61, 22, |
128 | 23, 259, 61, 261, 257, 258, 260, 0, 5, -1, |
129 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
130 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
131 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
132 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
133 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
134 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
135 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
136 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
137 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
138 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
139 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
140 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
141 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
142 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
143 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
144 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
145 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
146 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
147 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
148 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
149 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
150 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
151 | -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
152 | -1, -1, -1, -1, -1, -1, -1, 257, 258, 257, |
153 | 258, 257, 258, |
154 | }; |
155 | #define YYFINAL 1 |
156 | #ifndef YYDEBUG |
157 | #define YYDEBUG 0 |
158 | #endif |
159 | #define YYMAXTOKEN 261 |
160 | #if YYDEBUG |
161 | const char * const yyname[] = |
162 | { |
163 | "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
164 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0, |
165 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
166 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
167 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
168 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
169 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"T_KEYSYM","T_KEYCODE", |
170 | "T_KEYSYM_VAR","T_KEYSYM_CMD_VAR","T_NUMBER", |
171 | }; |
172 | const char * const yyrule[] = |
173 | {"$accept : program", |
174 | "$$1 :", |
175 | "program : $$1 expr_list", |
176 | "expr_list : expr", |
177 | "expr_list : expr_list expr", |
178 | "expr : keysym_expr", |
179 | "expr : keycode_expr", |
180 | "keysym_expr : T_KEYSYM keysym_var '=' keysym_var", |
181 | "$$2 :", |
182 | "keycode_expr : T_KEYCODE T_NUMBER '=' $$2 keysym_cmd keysym_list", |
183 | "keysym_cmd :", |
184 | "keysym_cmd : T_KEYSYM_CMD_VAR", |
185 | "keysym_list : keysym_var", |
186 | "keysym_list : keysym_var keysym_var", |
187 | "keysym_list : keysym_var keysym_var keysym_var", |
188 | "keysym_list : keysym_var keysym_var keysym_var keysym_var", |
189 | "keysym_var : T_KEYSYM_VAR", |
190 | "keysym_var : T_NUMBER", |
191 | }; |
192 | #endif |
193 | #ifdef YYSTACKSIZE |
194 | #undef YYMAXDEPTH |
195 | #define YYMAXDEPTH YYSTACKSIZE |
196 | #else |
197 | #ifdef YYMAXDEPTH |
198 | #define YYSTACKSIZE YYMAXDEPTH |
199 | #else |
200 | #define YYSTACKSIZE 10000 |
201 | #define YYMAXDEPTH 10000 |
202 | #endif |
203 | #endif |
204 | #define YYINITSTACKSIZE 200 |
205 | |
206 | int yydebug; |
207 | int yynerrs; |
208 | int yyerrflag; |
209 | int yychar; |
210 | short *yyssp; |
211 | YYSTYPE *yyvsp; |
212 | YYSTYPE yyval; |
213 | YYSTYPE yylval; |
214 | short *yyss; |
215 | short *yysslim; |
216 | YYSTYPE *yyvs; |
217 | unsigned int yystacksize; |
218 | int yyparse(void); |
219 | #line 193 "/usr/src/sbin/wsconsctl/map_parse.y" |
220 | |
221 | void |
222 | yyerror(char *msg) |
223 | { |
224 | errx(1, "parse: %s", msg); |
225 | } |
226 | #line 219 "map_parse.c" |
227 | |
228 | static int yygrowstack(void) |
229 | { |
230 | unsigned int newsize; |
231 | long sslen; |
232 | short *newss; |
233 | YYSTYPE *newvs; |
234 | |
235 | if ((newsize = yystacksize) == 0) |
| 3 | | Assuming the condition is false | |
|
| |
236 | newsize = YYINITSTACKSIZE; |
237 | else if (newsize >= YYMAXDEPTH) |
| 5 | | Assuming 'newsize' is < YYMAXDEPTH | |
|
| |
238 | return -1; |
239 | else if ((newsize *= 2) > YYMAXDEPTH) |
| 7 | | Assuming the condition is false | |
|
| |
240 | newsize = YYMAXDEPTH; |
241 | sslen = yyssp - yyss; |
242 | #ifdef SIZE_MAX |
243 | #define YY_SIZE_MAX SIZE_MAX |
244 | #else |
245 | #define YY_SIZE_MAX 0xffffffffU |
246 | #endif |
247 | if (newsize && YY_SIZE_MAX / newsize < sizeof *newss) |
| |
248 | goto bail; |
249 | newss = (short *)realloc(yyss, newsize * sizeof *newss); |
250 | if (newss == NULL) |
| 10 | | Assuming 'newss' is not equal to NULL | |
|
| |
251 | goto bail; |
252 | yyss = newss; |
253 | yyssp = newss + sslen; |
254 | if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs) |
255 | goto bail; |
256 | newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs); |
| |
257 | if (newvs == NULL) |
| 13 | | Assuming 'newvs' is equal to NULL | |
|
| |
258 | goto bail; |
| 15 | | Control jumps to line 265 | |
|
259 | yyvs = newvs; |
260 | yyvsp = newvs + sslen; |
261 | yystacksize = newsize; |
262 | yysslim = yyss + newsize - 1; |
263 | return 0; |
264 | bail: |
265 | if (yyss) |
| |
266 | free(yyss); |
267 | if (yyvs) |
| 17 | | Assuming 'yyvs' is non-null | |
|
| |
268 | free(yyvs); |
| 19 | | Attempt to free released memory |
|
269 | yyss = yyssp = NULL; |
270 | yyvs = yyvsp = NULL; |
271 | yystacksize = 0; |
272 | return -1; |
273 | } |
274 | |
275 | #define YYABORT goto yyabort |
276 | #define YYREJECT goto yyabort |
277 | #define YYACCEPT goto yyaccept |
278 | #define YYERROR goto yyerrlab |
279 | int |
280 | yyparse(void) |
281 | { |
282 | int yym, yyn, yystate; |
283 | #if YYDEBUG |
284 | const char *yys; |
285 | |
286 | if ((yys = getenv("YYDEBUG"))) |
287 | { |
288 | yyn = *yys; |
289 | if (yyn >= '0' && yyn <= '9') |
290 | yydebug = yyn - '0'; |
291 | } |
292 | #endif /* YYDEBUG */ |
293 | |
294 | yynerrs = 0; |
295 | yyerrflag = 0; |
296 | yychar = (-1); |
297 | |
298 | if (yyss == NULL && yygrowstack()) goto yyoverflow; |
| 1 | Assuming 'yyss' is equal to NULL | |
|
| |
299 | yyssp = yyss; |
300 | yyvsp = yyvs; |
301 | *yyssp = yystate = 0; |
302 | |
303 | yyloop: |
304 | if ((yyn = yydefred[yystate]) != 0) goto yyreduce; |
305 | if (yychar < 0) |
306 | { |
307 | if ((yychar = yylex()) < 0) yychar = 0; |
308 | #if YYDEBUG |
309 | if (yydebug) |
310 | { |
311 | yys = 0; |
312 | if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
313 | if (!yys) yys = "illegal-symbol"; |
314 | printf("%sdebug: state %d, reading %d (%s)\n", |
315 | YYPREFIX, yystate, yychar, yys); |
316 | } |
317 | #endif |
318 | } |
319 | if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && |
320 | yyn <= YYTABLESIZE && yycheck[yyn] == yychar) |
321 | { |
322 | #if YYDEBUG |
323 | if (yydebug) |
324 | printf("%sdebug: state %d, shifting to state %d\n", |
325 | YYPREFIX, yystate, yytable[yyn]); |
326 | #endif |
327 | if (yyssp >= yysslim && yygrowstack()) |
328 | { |
329 | goto yyoverflow; |
330 | } |
331 | *++yyssp = yystate = yytable[yyn]; |
332 | *++yyvsp = yylval; |
333 | yychar = (-1); |
334 | if (yyerrflag > 0) --yyerrflag; |
335 | goto yyloop; |
336 | } |
337 | if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && |
338 | yyn <= YYTABLESIZE && yycheck[yyn] == yychar) |
339 | { |
340 | yyn = yytable[yyn]; |
341 | goto yyreduce; |
342 | } |
343 | if (yyerrflag) goto yyinrecovery; |
344 | #if defined(__GNUC__) |
345 | goto yynewerror; |
346 | #endif |
347 | yynewerror: |
348 | yyerror("syntax error"); |
349 | #if defined(__GNUC__) |
350 | goto yyerrlab; |
351 | #endif |
352 | yyerrlab: |
353 | ++yynerrs; |
354 | yyinrecovery: |
355 | if (yyerrflag < 3) |
356 | { |
357 | yyerrflag = 3; |
358 | for (;;) |
359 | { |
360 | if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && |
361 | yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) |
362 | { |
363 | #if YYDEBUG |
364 | if (yydebug) |
365 | printf("%sdebug: state %d, error recovery shifting\ |
366 | to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); |
367 | #endif |
368 | if (yyssp >= yysslim && yygrowstack()) |
369 | { |
370 | goto yyoverflow; |
371 | } |
372 | *++yyssp = yystate = yytable[yyn]; |
373 | *++yyvsp = yylval; |
374 | goto yyloop; |
375 | } |
376 | else |
377 | { |
378 | #if YYDEBUG |
379 | if (yydebug) |
380 | printf("%sdebug: error recovery discarding state %d\n", |
381 | YYPREFIX, *yyssp); |
382 | #endif |
383 | if (yyssp <= yyss) goto yyabort; |
384 | --yyssp; |
385 | --yyvsp; |
386 | } |
387 | } |
388 | } |
389 | else |
390 | { |
391 | if (yychar == 0) goto yyabort; |
392 | #if YYDEBUG |
393 | if (yydebug) |
394 | { |
395 | yys = 0; |
396 | if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
397 | if (!yys) yys = "illegal-symbol"; |
398 | printf("%sdebug: state %d, error recovery discards token %d (%s)\n", |
399 | YYPREFIX, yystate, yychar, yys); |
400 | } |
401 | #endif |
402 | yychar = (-1); |
403 | goto yyloop; |
404 | } |
405 | yyreduce: |
406 | #if YYDEBUG |
407 | if (yydebug) |
408 | printf("%sdebug: state %d, reducing by rule %d (%s)\n", |
409 | YYPREFIX, yystate, yyn, yyrule[yyn]); |
410 | #endif |
411 | yym = yylen[yyn]; |
412 | if (yym) |
413 | yyval = yyvsp[1-yym]; |
414 | else |
415 | memset(&yyval, 0, sizeof yyval); |
416 | switch (yyn) |
417 | { |
418 | case 1: |
419 | #line 97 "/usr/src/sbin/wsconsctl/map_parse.y" |
420 | { |
421 | int i; |
422 | struct wscons_keymap *mp; |
423 | |
424 | for (i = 0; i < KS_NUMKEYCODES; i++) { |
425 | mp = mapdata + i; |
426 | mp->command = KS_voidSymbol; |
427 | mp->group1[0] = KS_voidSymbol; |
428 | mp->group1[1] = KS_voidSymbol; |
429 | mp->group2[0] = KS_voidSymbol; |
430 | mp->group2[1] = KS_voidSymbol; |
431 | } |
432 | |
433 | newkbmap.maplen = 0; |
434 | newkbmap.map = mapdata; |
435 | } |
436 | break; |
437 | case 7: |
438 | #line 123 "/usr/src/sbin/wsconsctl/map_parse.y" |
439 | { |
440 | int src, dst; |
441 | |
442 | dst = ksym_lookup(yyvsp[-2].kval); |
443 | src = ksym_lookup(yyvsp[0].kval); |
444 | newkbmap.map[dst] = kbmap.map[src]; |
445 | if (dst >= newkbmap.maplen) |
446 | newkbmap.maplen = dst + 1; |
447 | } |
448 | break; |
449 | case 8: |
450 | #line 134 "/usr/src/sbin/wsconsctl/map_parse.y" |
451 | { |
452 | if (yyvsp[-1].ival >= KS_NUMKEYCODES) |
453 | errx(1, "%d: keycode too large", yyvsp[-1].ival); |
454 | if (yyvsp[-1].ival >= newkbmap.maplen) |
455 | newkbmap.maplen = yyvsp[-1].ival + 1; |
456 | cur_mp = mapdata + yyvsp[-1].ival; |
457 | } |
458 | break; |
459 | case 11: |
460 | #line 144 "/usr/src/sbin/wsconsctl/map_parse.y" |
461 | { |
462 | cur_mp->command = yyvsp[0].kval; |
463 | } |
464 | break; |
465 | case 12: |
466 | #line 149 "/usr/src/sbin/wsconsctl/map_parse.y" |
467 | { |
468 | cur_mp->group1[0] = yyvsp[0].kval; |
469 | cur_mp->group1[1] = ksym_upcase(cur_mp->group1[0]); |
470 | cur_mp->group2[0] = cur_mp->group1[0]; |
471 | cur_mp->group2[1] = cur_mp->group1[1]; |
472 | } |
473 | break; |
474 | case 13: |
475 | #line 155 "/usr/src/sbin/wsconsctl/map_parse.y" |
476 | { |
477 | cur_mp->group1[0] = yyvsp[-1].kval; |
478 | cur_mp->group1[1] = yyvsp[0].kval; |
479 | cur_mp->group2[0] = cur_mp->group1[0]; |
480 | cur_mp->group2[1] = cur_mp->group1[1]; |
481 | } |
482 | break; |
483 | case 14: |
484 | #line 161 "/usr/src/sbin/wsconsctl/map_parse.y" |
485 | { |
486 | cur_mp->group1[0] = yyvsp[-2].kval; |
487 | cur_mp->group1[1] = yyvsp[-1].kval; |
488 | cur_mp->group2[0] = yyvsp[0].kval; |
489 | cur_mp->group2[1] = ksym_upcase(cur_mp->group2[0]); |
490 | } |
491 | break; |
492 | case 15: |
493 | #line 167 "/usr/src/sbin/wsconsctl/map_parse.y" |
494 | { |
495 | cur_mp->group1[0] = yyvsp[-3].kval; |
496 | cur_mp->group1[1] = yyvsp[-2].kval; |
497 | cur_mp->group2[0] = yyvsp[-1].kval; |
498 | cur_mp->group2[1] = yyvsp[0].kval; |
499 | } |
500 | break; |
501 | case 16: |
502 | #line 175 "/usr/src/sbin/wsconsctl/map_parse.y" |
503 | { |
504 | yyval.kval = yyvsp[0].kval; |
505 | } |
506 | break; |
507 | case 17: |
508 | #line 178 "/usr/src/sbin/wsconsctl/map_parse.y" |
509 | { |
510 | char name[2]; |
511 | int res; |
512 | |
513 | if (yyvsp[0].ival < 0 || yyvsp[0].ival > 9) |
514 | yyerror("keysym expected"); |
515 | name[0] = yyvsp[0].ival + '0'; |
516 | name[1] = '\0'; |
517 | res = name2ksym(name); |
518 | if (res < 0) |
519 | yyerror("keysym expected"); |
520 | yyval.kval = res; |
521 | } |
522 | break; |
523 | #line 516 "map_parse.c" |
524 | } |
525 | yyssp -= yym; |
526 | yystate = *yyssp; |
527 | yyvsp -= yym; |
528 | yym = yylhs[yyn]; |
529 | if (yystate == 0 && yym == 0) |
530 | { |
531 | #if YYDEBUG |
532 | if (yydebug) |
533 | printf("%sdebug: after reduction, shifting from state 0 to\ |
534 | state %d\n", YYPREFIX, YYFINAL); |
535 | #endif |
536 | yystate = YYFINAL; |
537 | *++yyssp = YYFINAL; |
538 | *++yyvsp = yyval; |
539 | if (yychar < 0) |
540 | { |
541 | if ((yychar = yylex()) < 0) yychar = 0; |
542 | #if YYDEBUG |
543 | if (yydebug) |
544 | { |
545 | yys = 0; |
546 | if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; |
547 | if (!yys) yys = "illegal-symbol"; |
548 | printf("%sdebug: state %d, reading %d (%s)\n", |
549 | YYPREFIX, YYFINAL, yychar, yys); |
550 | } |
551 | #endif |
552 | } |
553 | if (yychar == 0) goto yyaccept; |
554 | goto yyloop; |
555 | } |
556 | if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && |
557 | yyn <= YYTABLESIZE && yycheck[yyn] == yystate) |
558 | yystate = yytable[yyn]; |
559 | else |
560 | yystate = yydgoto[yym]; |
561 | #if YYDEBUG |
562 | if (yydebug) |
563 | printf("%sdebug: after reduction, shifting from state %d \ |
564 | to state %d\n", YYPREFIX, *yyssp, yystate); |
565 | #endif |
566 | if (yyssp >= yysslim && yygrowstack()) |
567 | { |
568 | goto yyoverflow; |
569 | } |
570 | *++yyssp = yystate; |
571 | *++yyvsp = yyval; |
572 | goto yyloop; |
573 | yyoverflow: |
574 | yyerror("yacc stack overflow"); |
575 | yyabort: |
576 | if (yyss) |
577 | free(yyss); |
578 | if (yyvs) |
579 | free(yyvs); |
580 | yyss = yyssp = NULL; |
581 | yyvs = yyvsp = NULL; |
582 | yystacksize = 0; |
583 | return (1); |
584 | yyaccept: |
585 | if (yyss) |
586 | free(yyss); |
587 | if (yyvs) |
588 | free(yyvs); |
589 | yyss = yyssp = NULL; |
590 | yyvs = yyvsp = NULL; |
591 | yystacksize = 0; |
592 | return (0); |
593 | } |