]> 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/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-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'.
 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
 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.
 
 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);
 
 {
   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;
 
   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);
     }
       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
   fskel = xfopen (skeleton, "r");
 
   /* Set LINE to 2, not 1: `#line LINENUM' -- Here LINENUM is a