From: Marc Autret Date: Thu, 16 Aug 2001 20:48:02 +0000 (+0000) Subject: * src/reader.c (parse_dquoted_param): New. X-Git-Tag: BISON-1_28d~25 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/7a360eeaedb2aa9978e24bbd216ff9de6dea1db2?ds=sidebyside * src/reader.c (parse_dquoted_param): New. (parse_header_extension_decl): Use it. (parse_source_extension_decl): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 05524ebb..2021a918 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2001-08-16 Marc Autret + + * src/reader.c (parse_dquoted_param): New. + (parse_header_extension_decl): Use it. + (parse_source_extension_decl): Likewise. + 2001-08-16 Marc Autret * src/vcg.c: Remove includes of `complain.h' and `xalloc.h'. diff --git a/src/reader.c b/src/reader.c index 7e23c0ef..90a0eff1 100644 --- a/src/reader.c +++ b/src/reader.c @@ -874,34 +874,72 @@ parse_thong_decl (void) nsyms--; } -/*------------------------------------------. -| Parse what comes after %header_extension. | -`------------------------------------------*/ +/*--------------------------------------------------------------. +| Parse what comes after %header_extension and %source_etension | +`--------------------------------------------------------------*/ -static void -parse_header_extension_decl (void) +static const char * +parse_dquoted_param (const char *from) { char buff[32]; + int c; + int index; + + c = skip_white_space (); + + if (c != '"') + { + ungetc (c, finput); + complain (_("invalid %s declaration"), from); + return NULL; + } + + c = getc (finput); + for (index = 0; (c >= '!') && (c <= '~'); index++) + { + if (c == '"') + break; + if (c == '\\') + { + c = getc (finput); + if ((c < '!') && (c > '~')) + break; + } + + buff[index] = c; + c = getc (finput); + } + buff[index] = '\0'; + + if (c != '"') + { + ungetc (c, finput); + complain (_("invalid %s declaration"), from); + return NULL; + } + + return xstrdup (buff); +} + +/* %header_extension case. */ +static void +parse_header_extension_decl (void) +{ if (header_extension) complain (_("multiple %%header_extension declarations")); - fscanf (finput, "%s", buff); - header_extension = xstrdup (buff); -} -/*------------------------------------------. -| Parse what comes after %source_extension. | -`------------------------------------------*/ + header_extension = parse_dquoted_param ("%header_extension"); +} +/* %source_extension case. */ static void parse_source_extension_decl (void) { - char buff[32]; - if (src_extension) complain (_("multiple %%source_extension declarations")); - fscanf (finput, "%s", buff); - src_extension = xstrdup (buff); + + src_extension = parse_dquoted_param ("%source_extension"); } /*----------------------------------------------------------------.