]> git.saurik.com Git - bison.git/commitdiff
* src/reader.c (parse_dquoted_param): New.
authorMarc Autret <autret_m@epita.fr>
Thu, 16 Aug 2001 20:48:02 +0000 (20:48 +0000)
committerMarc Autret <autret_m@epita.fr>
Thu, 16 Aug 2001 20:48:02 +0000 (20:48 +0000)
(parse_header_extension_decl): Use it.
(parse_source_extension_decl): Likewise.

ChangeLog
src/reader.c

index 05524ebbbe09f1efb59736420b9e98376d2640c7..2021a918cf614a6aa1ee2159bdacff1002e34b27 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-08-16  Marc Autret  <autret_m@epita.fr>
+       
+       * src/reader.c (parse_dquoted_param): New.
+       (parse_header_extension_decl): Use it.
+       (parse_source_extension_decl): Likewise.
+
 2001-08-16  Marc Autret  <autret_m@epita.fr>
 
        * src/vcg.c: Remove includes of `complain.h' and `xalloc.h'.
index 7e23c0ef94a6537c4554bc9b29928734e6635eda..90a0eff147571c33b1ada4d245b57ab3d96b869b 100644 (file)
@@ -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");
 }
 
 /*----------------------------------------------------------------.