From 445cb4e989351ad2eae5bd011843a1ad557f2663 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 2 Oct 2001 14:48:53 +0000 Subject: [PATCH] * src/output.c (output_parser): Assert `skeleton'. * src/files.c (skeleton_find): Look harder for skeletons on DOSish systems. From Shura. --- ChangeLog | 11 +++++++++-- THANKS | 1 + src/files.c | 43 ++++++++++++++++++++++++++++++++++--------- src/output.c | 1 + 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index df2b828c..900814f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,14 +1,21 @@ +2001-10-02 Akim Demaille + + * 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 * src/lex.h: Echo modifications. * src/lex.c (unlex): Parameter is now token_t. From Hans Aberg. - + 2001-10-01 Marc Autret * src/main.c: Include lex.h. From Hans Aberg. - + 2001-09-29 Akim Demaille * src/getargs.c (longopts): `--debug' is `-t', not `-d'. diff --git a/THANKS b/THANKS index 04d42d0e..527abd89 100644 --- 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. diff --git a/src/files.c b/src/files.c index 628ce8f2..aff55bbf 100644 --- a/src/files.c +++ b/src/files.c @@ -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; diff --git a/src/output.c b/src/output.c index 19fcb019..afccf805 100644 --- a/src/output.c +++ b/src/output.c @@ -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 -- 2.50.0