]> git.saurik.com Git - bison.git/commitdiff
* src/output.c (output_parser): Assert `skeleton'.
authorAkim Demaille <akim@epita.fr>
Tue, 2 Oct 2001 14:48:53 +0000 (14:48 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 2 Oct 2001 14:48:53 +0000 (14:48 +0000)
* src/files.c (skeleton_find): Look harder for skeletons on DOSish
systems.
From Shura.

ChangeLog
THANKS
src/files.c
src/output.c

index df2b828cab9505f4f1a54e667b9dea61743fd51e..900814f20a828997fdd86d33319fed2f38b99d5b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,14 +1,21 @@
+2001-10-02  Akim Demaille  <akim@epita.fr>
+
+       * src/output.c (output_parser): Assert `skeleton'.
+       * src/files.c (skeleton_find): Look harder for skeletons on DOSish
+       systems.
+       From Shura.
+
 2001-10-01  Marc Autret  <autret_m@epita.fr>
 
        * src/lex.h: Echo modifications.
        * src/lex.c (unlex): Parameter is now token_t.
        From Hans Aberg.
-       
+
 2001-10-01  Marc Autret  <autret_m@epita.fr>
 
        * src/main.c: Include lex.h.
        From Hans Aberg.
-       
+
 2001-09-29  Akim Demaille  <akim@epita.fr>
 
        * src/getargs.c (longopts): `--debug' is `-t', not `-d'.
diff --git a/THANKS b/THANKS
index 04d42d0ed61235d8e45ac08a00e60129ef251f8f..527abd8981a7b73bfdf7b641c8def09de41dc486 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -20,6 +20,7 @@ Paul Eggert           eggert@twinsun.com
 Piotr Gackiewicz       gacek@intertel.com.pl
 Richard Stallman       rms@gnu.org
 Robert Anisko           anisko_r@epita.fr
+Shura                   debil_urod@ngs.ru
 
 Many people are not named here because we lost track of them.  We
 thank them!  Please, help us keeping this list up to date.
index 628ce8f2736b84ffb63894d55a7c36525c5398d4..aff55bbf9eb2d768197a275faec828975257320f 100644 (file)
@@ -200,17 +200,42 @@ skeleton_find (const char *envvar, const char *skeleton_name)
 {
   const char *res = getenv (envvar);
 
-#ifdef MSDOS
-  const char *cp;
-
-  /* File doesn't exist in current directory; try in INIT directory.  */
-  if (!res && (cp = getenv ("INIT")))
+#if defined (MSDOS) || defined (_WIN32)
+  if (!res)
     {
-      res = XMALLOC (char, strlen (cp) + strlen (skeleton_name) + 2);
-      sprintf (res, "%s%c%s", cp, '/', skeleton_name);
+      /* Skeleton file name without path */
+      const char *skel_name = strrchr(skeleton_name, '/');
+      if (!skel_name)
+        skel_name = strrchr(skeleton_name, '\\');
+      if (!skel_name)
+        skel_name = skeleton_name;
+      else
+        ++skel_name;
+
+      /* File doesn't exist in current directory; try in INIT directory.  */
+      const char *cp = getenv ("INIT");
+      if (cp)
+       {
+         res = XMALLOC (char, strlen (cp) + strlen (skel_name) + 2);
+         sprintf (res, "%s%c%s", cp, '\\', skel_name);
+       }
+      else if (access (skel_name, 4) == 0) /* Look in current dir. */
+        res = skel_name;
+      else
+       {
+         /* Look in program locations dir. */
+         extern char *program_name;
+         cp = strrchr(program_name, '\\');
+         if (!cp)
+           return skeleton_name;
+         else
+           ++cp;
+         res = XMALLOC (char, cp - program_name + strlen (skel_name) + 1);
+         strncpy (res, program_name, cp - program_name);
+         strcpy (res + (cp - program_name), skel_name);
+       }
     }
-#endif /* !MSDOS */
-
+#endif /* defined (MSDOS) || defined (_WIN32) */
   if (!res)
     res = skeleton_name;
 
index 19fcb01917b12f42a6f31a20d8faa254f24b3b2b..afccf805ab2614659c31879f72322d33e55efcd3 100644 (file)
@@ -1160,6 +1160,7 @@ output_parser (void)
       else
        skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
     }
+  assert (skeleton);
   fskel = xfopen (skeleton, "r");
 
   /* Set LINE to 2, not 1: `#line LINENUM' -- Here LINENUM is a