X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=userv.git;a=blobdiff_plain;f=lexer.l.m4;h=7b42a1d33914f1678f5098402121c325e9445b6d;hp=5aaeff088b312349b22732ce2ce0bca3738731a4;hb=6b27a56e90d8905ad9fd9d87c4bb3265914feb05;hpb=7bc3c582a0a80d34d2c9c86ed9a588b3983e0db1 diff --git a/lexer.l.m4 b/lexer.l.m4 index 5aaeff0..7b42a1d 100644 --- a/lexer.l.m4 +++ b/lexer.l.m4 @@ -1,7 +1,7 @@ dnl userv - lexer.l.m4 dnl lexer, passed through m4 with defs from langauge.i4 /* - * Copyright (C)1996-1997 Ian Jackson + * Copyright (C)1996-1997,1999 Ian Jackson * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by @@ -42,6 +42,7 @@ include(language.i4) #include "common.h" #include "daemon.h" #include "lib.h" +#include "both.h" #include "tokens.h" #define HYPHEN '-' @@ -131,6 +132,7 @@ struct error_handling { static struct error_handling eh = { tokv_word_errorstostderr, 0,0,0,0,0 }; static int dequote(char *inplace); +static void countnewlines(void); #define YY_NO_UNPUT @@ -154,42 +156,43 @@ changequote({*,*}) char *ep; lr_min= (int)strtoul(yytext,&ep,10); assert(*ep == HYPHEN); - assert(*++ep); + ep++; assert(*ep); lr_max= (int)strtoul(ep,&ep,10); assert(!*ep); - if (lr_max < lr_min) { - parseerrprint("fd range has min > max"); - return tokv_error; - } + if (lr_max < lr_min) + return parseerrprint("fd range has min > max"); return tokv_fdrange; } [0-9]{1,8}- { char *ep; lr_min= (int)strtoul(yytext,&ep,10); assert(*ep == HYPHEN); - assert(!*++ep); + ep++; assert(!*ep); lr_max=-1; return tokv_fdstoend; } -[\ \t]+ return tokv_lwsp; +([\ \t]*\\[\ \t]*\n[\ \t]*)+ countnewlines(); return tokv_lwsp; +[\ \t]+ return tokv_lwsp; [\ \t]*\n cstate->lineno++; return tokv_newline; [\ \t]*\#[^\n]*\n cstate->lineno++; return tokv_newline; -[\ \t]*\#[^\n]* { - parseerrprint("missing newline at eof after comment"); - return tokv_error; - } +[\ \t]*\#[^\n]* return parseerrprint("missing newline at eof after comment"); \"([^\\\"\n]|\\[a-z]|\\[0-9]{3}|\\x[0-9A-Fa-f]{2}|\\[[:punct:]]|\\[ \t]*\n)*\" { + countnewlines(); return dequote(yytext); } -\".* { - parseerrprint("misquoted or unterminated string"); - return tokv_error; - } -[^\ \t\n]+ return tokv_barestring; -<> return tokv_eof; +[^\ \t\n\\\"]+ return tokv_barestring; +<> return tokv_eof; +\" return parseerrprint("misquoted or unterminated string"); +\\ return parseerrprint("unexpected backslash"); +. abort(); /* expect lex warning "rule cannot be matched" */ *} changequote(`,') %% + +const char *const builtinservicehelpstrings[]= { +undivert(5)dnl + 0 +}; ` #include "parser.c" '