* src/output.c (output_parser): Assert `skeleton'.

* src/files.c (skeleton_find): Look harder for skeletons on DOSish
systems.
From Shura.
This commit is contained in:
Akim Demaille
2001-10-02 14:48:53 +00:00
parent f40703a29a
commit 445cb4e989
4 changed files with 45 additions and 11 deletions

View 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);
}
#endif /* !MSDOS */
/* 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 /* defined (MSDOS) || defined (_WIN32) */
if (!res)
res = skeleton_name;

View 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