1*a9e8641dSBaptiste Daroussin %{
2*a9e8641dSBaptiste Daroussin
3*a9e8641dSBaptiste Daroussin #include <err.h>
4*a9e8641dSBaptiste Daroussin #include <string.h>
5*a9e8641dSBaptiste Daroussin #include <syslog.h>
6*a9e8641dSBaptiste Daroussin #include "dma.h"
7*a9e8641dSBaptiste Daroussin
8*a9e8641dSBaptiste Daroussin extern int yylineno;
9*a9e8641dSBaptiste Daroussin static void yyerror(const char *);
10*a9e8641dSBaptiste Daroussin
11*a9e8641dSBaptiste Daroussin static void
yyerror(const char * msg)12*a9e8641dSBaptiste Daroussin yyerror(const char *msg)
13*a9e8641dSBaptiste Daroussin {
14*a9e8641dSBaptiste Daroussin /**
15*a9e8641dSBaptiste Daroussin * Because we do error '\n' below, we need to report the error
16*a9e8641dSBaptiste Daroussin * one line above of what yylineno points to.
17*a9e8641dSBaptiste Daroussin */
18*a9e8641dSBaptiste Daroussin syslog(LOG_CRIT, "aliases line %d: %s", yylineno - 1, msg);
19*a9e8641dSBaptiste Daroussin fprintf(stderr, "aliases line %d: %s\n", yylineno - 1, msg);
20*a9e8641dSBaptiste Daroussin }
21*a9e8641dSBaptiste Daroussin
22*a9e8641dSBaptiste Daroussin int
yywrap(void)23*a9e8641dSBaptiste Daroussin yywrap(void)
24*a9e8641dSBaptiste Daroussin {
25*a9e8641dSBaptiste Daroussin return (1);
26*a9e8641dSBaptiste Daroussin }
27*a9e8641dSBaptiste Daroussin
28*a9e8641dSBaptiste Daroussin %}
29*a9e8641dSBaptiste Daroussin
30*a9e8641dSBaptiste Daroussin %union {
31*a9e8641dSBaptiste Daroussin char *ident;
32*a9e8641dSBaptiste Daroussin struct stritem *strit;
33*a9e8641dSBaptiste Daroussin struct alias *alias;
34*a9e8641dSBaptiste Daroussin }
35*a9e8641dSBaptiste Daroussin
36*a9e8641dSBaptiste Daroussin %token <ident> T_IDENT
37*a9e8641dSBaptiste Daroussin %token T_ERROR
38*a9e8641dSBaptiste Daroussin %token T_EOF 0
39*a9e8641dSBaptiste Daroussin
40*a9e8641dSBaptiste Daroussin %type <strit> dests
41*a9e8641dSBaptiste Daroussin %type <alias> alias aliases
42*a9e8641dSBaptiste Daroussin
43*a9e8641dSBaptiste Daroussin %%
44*a9e8641dSBaptiste Daroussin
45*a9e8641dSBaptiste Daroussin start : aliases T_EOF
46*a9e8641dSBaptiste Daroussin {
47*a9e8641dSBaptiste Daroussin LIST_FIRST(&aliases) = $1;
48*a9e8641dSBaptiste Daroussin }
49*a9e8641dSBaptiste Daroussin
50*a9e8641dSBaptiste Daroussin aliases : /* EMPTY */
51*a9e8641dSBaptiste Daroussin {
52*a9e8641dSBaptiste Daroussin $$ = NULL;
53*a9e8641dSBaptiste Daroussin }
54*a9e8641dSBaptiste Daroussin | alias aliases
55*a9e8641dSBaptiste Daroussin {
56*a9e8641dSBaptiste Daroussin if ($2 != NULL && $1 != NULL)
57*a9e8641dSBaptiste Daroussin LIST_INSERT_AFTER($2, $1, next);
58*a9e8641dSBaptiste Daroussin else if ($2 == NULL)
59*a9e8641dSBaptiste Daroussin $2 = $1;
60*a9e8641dSBaptiste Daroussin $$ = $2;
61*a9e8641dSBaptiste Daroussin }
62*a9e8641dSBaptiste Daroussin ;
63*a9e8641dSBaptiste Daroussin
64*a9e8641dSBaptiste Daroussin alias : T_IDENT ':' dests '\n'
65*a9e8641dSBaptiste Daroussin {
66*a9e8641dSBaptiste Daroussin struct alias *al;
67*a9e8641dSBaptiste Daroussin
68*a9e8641dSBaptiste Daroussin if ($1 == NULL)
69*a9e8641dSBaptiste Daroussin YYABORT;
70*a9e8641dSBaptiste Daroussin al = calloc(1, sizeof(*al));
71*a9e8641dSBaptiste Daroussin if (al == NULL)
72*a9e8641dSBaptiste Daroussin YYABORT;
73*a9e8641dSBaptiste Daroussin al->alias = $1;
74*a9e8641dSBaptiste Daroussin SLIST_FIRST(&al->dests) = $3;
75*a9e8641dSBaptiste Daroussin $$ = al;
76*a9e8641dSBaptiste Daroussin }
77*a9e8641dSBaptiste Daroussin | error '\n'
78*a9e8641dSBaptiste Daroussin {
79*a9e8641dSBaptiste Daroussin YYABORT;
80*a9e8641dSBaptiste Daroussin }
81*a9e8641dSBaptiste Daroussin ;
82*a9e8641dSBaptiste Daroussin
83*a9e8641dSBaptiste Daroussin dests : T_IDENT
84*a9e8641dSBaptiste Daroussin {
85*a9e8641dSBaptiste Daroussin struct stritem *it;
86*a9e8641dSBaptiste Daroussin
87*a9e8641dSBaptiste Daroussin if ($1 == NULL)
88*a9e8641dSBaptiste Daroussin YYABORT;
89*a9e8641dSBaptiste Daroussin it = calloc(1, sizeof(*it));
90*a9e8641dSBaptiste Daroussin if (it == NULL)
91*a9e8641dSBaptiste Daroussin YYABORT;
92*a9e8641dSBaptiste Daroussin it->str = $1;
93*a9e8641dSBaptiste Daroussin $$ = it;
94*a9e8641dSBaptiste Daroussin }
95*a9e8641dSBaptiste Daroussin | T_IDENT ',' dests
96*a9e8641dSBaptiste Daroussin {
97*a9e8641dSBaptiste Daroussin struct stritem *it;
98*a9e8641dSBaptiste Daroussin
99*a9e8641dSBaptiste Daroussin if ($1 == NULL)
100*a9e8641dSBaptiste Daroussin YYABORT;
101*a9e8641dSBaptiste Daroussin it = calloc(1, sizeof(*it));
102*a9e8641dSBaptiste Daroussin if (it == NULL)
103*a9e8641dSBaptiste Daroussin YYABORT;
104*a9e8641dSBaptiste Daroussin it->str = $1;
105*a9e8641dSBaptiste Daroussin SLIST_NEXT(it, next) = $3;
106*a9e8641dSBaptiste Daroussin $$ = it;
107*a9e8641dSBaptiste Daroussin }
108*a9e8641dSBaptiste Daroussin ;
109*a9e8641dSBaptiste Daroussin
110*a9e8641dSBaptiste Daroussin %%
111