snj doesn't like my accent, so use proper English month names.
[netbsd-mini2440.git] / sbin / cgdconfig / cgdlex.l
blobd7a5bb009d8fab478d100d505242e27d871bf402
1 %{
2 /* $NetBSD: cgdlex.l,v 1.2 2008/04/28 20:23:08 martin Exp $ */
4 /*-
5  * Copyright (c) 2003 The NetBSD Foundation, Inc.
6  * All rights reserved.
7  *
8  * This code is derived from software contributed to The NetBSD Foundation
9  * by Roland C. Dowdeswell.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
33 #include <sys/cdefs.h>
34 #ifndef lint
35 __RCSID("$NetBSD: cgdlex.l,v 1.2 2008/04/28 20:23:08 martin Exp $");
36 #endif
38 #include <err.h>
39 #include <stdio.h>
41 #include "utils.h"
42 #include "cgdparse.h"
45  * We use macros here to separate the C from the tokeniser, to
46  * ease reading each.
47  */
49 #define RETSTRING(x)    do {                                    \
50                 yylval.string = string_new(yytext, yyleng);     \
51                 return (x);                                     \
52         } while (0)
53 #define RETTOKEN(x)     do {                                    \
54                 yylval.token.text = yytext;                     \
55                 yylval.token.length = yyleng;                   \
56                 return (x);                                     \
57         } while (0)
58 #define RETINTEGER(x)   do {                                    \
59                 yylval.integer = atoi(yytext);                  \
60                 return (x);                                     \
61         } while (0)
63 #define QUOTEDBEGIN() do {                                              \
64                 BEGIN(quoted);                                          \
65                 quoted_string = string_zero();                          \
66         } while (0)
67 #define QUOTEDADD() do {                                                \
68                 string_t        *tmp;                                   \
69                                                                         \
70                 tmp = string_new(yytext, yyleng);                       \
71                 quoted_string = string_add_d(quoted_string, tmp);       \
72         } while (0)
73 #define RETQUOTED(x) do {                                               \
74                 yylval.string = quoted_string;                          \
75                 quoted_string = NULL;                                   \
76                 BEGIN(INITIAL);                                         \
77                 return(x);                                              \
78         } while (0)
80 int yylineno;
82 string_t        *quoted_string;
84 void    yyerror(const char *);
85 int     yylex(void);
88 %x quoted
92 [0-9]+                                  { RETINTEGER(INTEGER); }
93 algorithm                               { RETTOKEN(ALGORITHM); }
94 keylength                               { RETTOKEN(KEYLENGTH); }
95 iv-method                               { RETTOKEN(IVMETHOD); }
96 verify_method                           { RETTOKEN(VERIFY_METHOD); }
97 keygen                                  { RETTOKEN(KEYGEN); }
98 salt                                    { RETTOKEN(SALT); }
99 iterations                              { RETTOKEN(ITERATIONS); }
100 key                                     { RETTOKEN(KEY); }
101 cmd                                     { RETTOKEN(CMD); }
102 keygen_method                           { RETTOKEN(KEYGEN_METHOD); }
103 keygen_salt                             { RETTOKEN(KEYGEN_SALT); }
104 keygen_iterations                       { RETTOKEN(KEYGEN_ITERATIONS); }
105 xor_key                                 { RETTOKEN(XOR_KEY); }
106 [;\n]                                   { return EOL; }
107 \\\n                                    /* ignore a quoted nl */
108 [ \t]                                   /* ignore spaces and tabs */
109 #[^;\n]*                                /* ignore comments */
110 [^ }{\t\n;"]+                           { RETSTRING(STRINGLIT); }
112 \"                                      { QUOTEDBEGIN(); }
113 <quoted>[^\"]+                          { QUOTEDADD(); }
114 <quoted>\"                              { RETQUOTED(STRINGLIT); }
116 .                                       { return yytext[0]; }
120 void
121 yyerror(const char *msg)
124          warnx("%s line %d: %s at '%s'", "foo", yylineno, msg, yytext);