X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/445cb4e989351ad2eae5bd011843a1ad557f2663..b59b91bb6e46b51bfc7960bacd654ca7b710f3c7:/src/files.c diff --git a/src/files.c b/src/files.c index aff55bbf..f6f3c2f7 100644 --- a/src/files.c +++ b/src/files.c @@ -23,6 +23,7 @@ #include "getargs.h" #include "files.h" #include "gram.h" +#include "error.h" #include "complain.h" FILE *finput = NULL; @@ -86,37 +87,44 @@ 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) { - int ite; - char *macro_name; + 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 (ite = 0; macro_name[ite]; ite++) - if (macro_name[ite] == '.') - macro_name[ite] = '_'; - else - { - if (islower (macro_name[ite])) - macro_name[ite] -= ('a' - 'A'); - } + for (cp = macro_name; *cp; ++cp) + if (islower (*cp)) + *cp = toupper (*cp); + else if (!isalnum (*cp)) + *cp = '_'; + return macro_name; } @@ -204,9 +212,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