No empty .Rs/.Re
[netbsd-mini2440.git] / sbin / cgdconfig / cgdlex.l
blob5261364ca75e2c6293dee754cfd5d05ecd6c372f
1 %{
2 /* $NetBSD: cgdlex.l,v 1.4 2009/10/28 20:59:46 christos 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.4 2009/10/28 20:59:46 christos 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
89 %option nounput
93 [0-9]+                                  { RETINTEGER(INTEGER); }
94 algorithm                               { RETTOKEN(ALGORITHM); }
95 keylength                               { RETTOKEN(KEYLENGTH); }
96 iv-method                               { RETTOKEN(IVMETHOD); }
97 verify_method                           { RETTOKEN(VERIFY_METHOD); }
98 keygen                                  { RETTOKEN(KEYGEN); }
99 salt                                    { RETTOKEN(SALT); }
100 iterations                              { RETTOKEN(ITERATIONS); }
101 key                                     { RETTOKEN(KEY); }
102 cmd                                     { RETTOKEN(CMD); }
103 keygen_method                           { RETTOKEN(KEYGEN_METHOD); }
104 keygen_salt                             { RETTOKEN(KEYGEN_SALT); }
105 keygen_iterations                       { RETTOKEN(KEYGEN_ITERATIONS); }
106 xor_key                                 { RETTOKEN(XOR_KEY); }
107 [;\n]                                   { return EOL; }
108 \\\n                                    /* ignore a quoted nl */
109 [ \t]                                   /* ignore spaces and tabs */
110 #[^;\n]*                                /* ignore comments */
111 [^ }{\t\n;"]+                           { RETSTRING(STRINGLIT); }
113 \"                                      { QUOTEDBEGIN(); }
114 <quoted>[^\"]+                          { QUOTEDADD(); }
115 <quoted>\"                              { RETQUOTED(STRINGLIT); }
117 .                                       { return yytext[0]; }
121 void
122 yyerror(const char *msg)
125          warnx("%s line %d: %s at '%s'", "foo", yylineno, msg, yytext);