]> git.saurik.com Git - bison.git/blobdiff - src/files.c
Revert the previous patch which was meant for the trunk only.
[bison.git] / src / files.c
index 19d14c157ea0c45efb32ca6719a33c99a4bb733a..8dcf357f88577ed02b93dca6a8749cabb2fa4caf 100644 (file)
@@ -1,5 +1,6 @@
 /* Open and close files for bison,
-   Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 1992, 2000, 2001, 2002
+   Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
@@ -23,6 +24,7 @@
 #include "getargs.h"
 #include "files.h"
 #include "gram.h"
+#include "error.h"
 #include "complain.h"
 
 FILE *finput = NULL;
@@ -57,7 +59,7 @@ const char *header_extension = NULL;
 | Is SUFFIX ending STRING?  |
 `--------------------------*/
 
-static int
+int
 strsuffix (const char *string, const char *suffix)
 {
   size_t string_len = strlen (string);
@@ -86,26 +88,36 @@ stringappend (const char *string1, const char *string2)
 }
 
 
-/*---------------------------------------------------------------.
-|  Computes the macro name used to avoid double inclusion in the |
-|  header of the parser and store it in header_macro_name.       |
-`---------------------------------------------------------------*/
+/*-----------------------------------------------------------------.
+| Computes the macro name used to avoid double inclusion in the    |
+| header of the parser and store it in header_macro_name.  Be sure |
+| to produce valid CPP names (don't start with digit, remain       |
+| alphanumerical + underscore).                                    |
+`-----------------------------------------------------------------*/
 
 static char *
 compute_header_macro (void)
 {
+  const char *prefix = "BISON_";
   char *macro_name, *cp;
 
   if (spec_defines_file)
-    macro_name = xstrdup (spec_defines_file);
+    {
+      macro_name = XMALLOC (char,
+                           strlen (prefix) +
+                           strlen (spec_defines_file) + 1);
+      cp = stpcpy (macro_name, prefix);
+      cp = stpcpy (cp, spec_defines_file);
+    }
   else
     {
       macro_name = XMALLOC (char,
+                           strlen (prefix) +
                            strlen (base_name) +
                            strlen (header_extension) + 1);
-
-      stpcpy (macro_name, base_name);
-      strcat (macro_name, header_extension);
+      cp = stpcpy (macro_name, prefix);
+      cp = stpcpy (cp, base_name);
+      cp = stpcpy (cp, header_extension);
     }
 
   for (cp = macro_name; *cp; ++cp)
@@ -201,9 +213,9 @@ skeleton_find (const char *envvar, const char *skeleton_name)
   if (!res)
     {
       /* Skeleton file name without path */
-      const char *skel_name = strrchr(skeleton_name, '/');
+      const char *skel_name = strrchr (skeleton_name, '/');
       if (!skel_name)
-        skel_name = strrchr(skeleton_name, '\\');
+        skel_name = strrchr (skeleton_name, '\\');
       if (!skel_name)
         skel_name = skeleton_name;
       else