X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/ea5607fd01a420fe362d6dfc6f9b75d568f2694b..b99357cde6568644e1b562965cf9fb3ba65af3a6:/src/files.c diff --git a/src/files.c b/src/files.c index b2f84a2a..eefa188d 100644 --- a/src/files.c +++ b/src/files.c @@ -27,13 +27,13 @@ #include "complain.h" FILE *finput = NULL; -FILE *foutput = NULL; struct obstack action_obstack; struct obstack attrs_obstack; struct obstack table_obstack; struct obstack defines_obstack; struct obstack guard_obstack; +struct obstack output_obstack; char *spec_outfile; /* for -o. */ char *spec_file_prefix; /* for -b. */ @@ -185,11 +185,11 @@ compute_base_names (void) base_length = strlen (spec_outfile); if (strsuffix (spec_outfile, ".c")) base_length -= 2; + base_name = strndup (spec_outfile, base_length); /* SHORT_BASE_LENGTH includes neither ".tab" nor ".c". */ short_base_length = base_length; - if (strsuffix (spec_outfile, ".tab") || strsuffix (spec_outfile, "_tab")) + if (strsuffix (base_name, ".tab") || strsuffix (base_name, "_tab")) short_base_length -= 4; - base_name = strndup (spec_outfile, base_length); short_base_name = strndup (spec_outfile, short_base_length); return; @@ -245,23 +245,15 @@ compute_base_names (void) void open_files (void) { - compute_base_names (); - finput = xfopen (infile, "r"); - if (verbose_flag) - /* We used to use just .out if spec_name_prefix (-p) was used, but - that conflicts with Posix. */ - foutput = xfopen (stringappend (base_name, EXT_OUTPUT), "w"); - - attrsfile = stringappend (short_base_name, EXT_STYPE_H); - /* Initialize the obstacks. */ obstack_init (&action_obstack); obstack_init (&attrs_obstack); obstack_init (&table_obstack); obstack_init (&defines_obstack); obstack_init (&guard_obstack); + obstack_init (&output_obstack); } @@ -274,7 +266,9 @@ void output_files (void) { xfclose (finput); - xfclose (foutput); + + compute_base_names (); + attrsfile = stringappend (short_base_name, EXT_STYPE_H); /* Output the main file. */ if (spec_outfile) @@ -298,4 +292,9 @@ output_files (void) obstack_save (&guard_obstack, stringappend (short_base_name, EXT_GUARD_C)); } + + if (verbose_flag) + /* We used to use just .out if spec_name_prefix (-p) was used, but + that conflicts with Posix. */ + obstack_save (&output_obstack, stringappend (short_base_name, EXT_OUTPUT)); }