1
0
mirror of https://git.savannah.gnu.org/git/gperf.git synced 2025-12-02 21:19:24 +00:00

Open the input file in main.cc, not in class Options.

This commit is contained in:
Bruno Haible
2003-01-21 12:00:44 +00:00
parent 0a3597e6c2
commit d3a9c2f7ad
5 changed files with 41 additions and 9 deletions

View File

@@ -1,5 +1,14 @@
2002-11-10 Bruno Haible <bruno@clisp.org> 2002-11-10 Bruno Haible <bruno@clisp.org>
* src/options.h (Options::get_input_file_name): New declaration.
(Options::_input_file_name): New field.
* src/options.icc (Options::get_input_file_name): New method.
* src/options.cc (Options::Options): Initialize _input_file_name.
(Options::parse_options): Don't open input file, only store it in
_input_file_name.
* src/main.cc (main): Open input file here.
Print an error message upon write error on the output file.
Upgrade to autoconf-2.52. Upgrade to autoconf-2.52.
* configure.in: Use AC_CONFIG_SUBDIRS instead of AC_OUTPUT_SUBDIRS. * configure.in: Use AC_CONFIG_SUBDIRS instead of AC_OUTPUT_SUBDIRS.
* Makefile.devel (configure, lib/configure, src/configure, * Makefile.devel (configure, lib/configure, src/configure,

View File

@@ -21,6 +21,7 @@
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include "options.h" #include "options.h"
#include "input.h" #include "input.h"
#include "search.h" #include "search.h"
@@ -51,6 +52,15 @@ main (int argc, char *argv[])
/* Set the Options. Open the input file and assign stdin to it. */ /* Set the Options. Open the input file and assign stdin to it. */
option.parse_options (argc, argv); option.parse_options (argc, argv);
/* Open the input file. */
if (option.get_input_file_name ())
if (!freopen (option.get_input_file_name (), "r", stdin))
{
fprintf (stderr, "Cannot open input file '%s'\n",
option.get_input_file_name ());
exit (1);
}
/* Initialize the keyword list. */ /* Initialize the keyword list. */
KeywordExt_Factory factory; KeywordExt_Factory factory;
Input inputter (stdin, &factory); Input inputter (stdin, &factory);
@@ -82,7 +92,10 @@ main (int argc, char *argv[])
/* Check for write error on stdout. */ /* Check for write error on stdout. */
int status = 0; int status = 0;
if (fflush (stdout) || ferror (stdout)) if (fflush (stdout) || ferror (stdout))
status = 1; {
fprintf (stderr, "error while writing output file\n");
status = 1;
}
/* Don't use exit() here, it skips the destructors. */ /* Don't use exit() here, it skips the destructors. */
return status; return status;

View File

@@ -416,6 +416,7 @@ PositionStringParser::nextPosition ()
Options::Options () Options::Options ()
: _option_word (C), : _option_word (C),
_input_file_name (NULL),
_iterations (0), _iterations (0),
_jump (DEFAULT_JUMP_VALUE), _jump (DEFAULT_JUMP_VALUE),
_initial_asso_value (0), _initial_asso_value (0),
@@ -832,19 +833,15 @@ Options::parse_options (int argc, char *argv[])
} }
if (/*getopt*/optind + 1 < argc) if (/*getopt*/optind < argc)
_input_file_name = argv[/*getopt*/optind++];
if (/*getopt*/optind < argc)
{ {
fprintf (stderr, "Extra trailing arguments to %s.\n", program_name); fprintf (stderr, "Extra trailing arguments to %s.\n", program_name);
short_usage (stderr); short_usage (stderr);
exit (1); exit (1);
} }
if (argv[/*getopt*/optind] && ! freopen (argv[/*getopt*/optind], "r", stdin))
{
fprintf (stderr, "Cannot open keyword file `%s'\n", argv[/*getopt*/optind]);
short_usage (stderr);
exit (1);
}
} }
#ifndef __OPTIMIZE__ #ifndef __OPTIMIZE__

View File

@@ -181,6 +181,9 @@ public:
/* Tests a given boolean option. Returns true if set, false otherwise. */ /* Tests a given boolean option. Returns true if set, false otherwise. */
bool operator[] (Option_Type option) const; bool operator[] (Option_Type option) const;
/* Returns the input file name. */
const char * get_input_file_name () const;
/* Returns the iterations value. */ /* Returns the iterations value. */
int get_iterations () const; int get_iterations () const;
@@ -244,6 +247,9 @@ private:
/* Holds the boolean options. */ /* Holds the boolean options. */
int _option_word; int _option_word;
/* Name of input file. */
char * _input_file_name;
/* Amount to iterate when a collision occurs. */ /* Amount to iterate when a collision occurs. */
int _iterations; int _iterations;

View File

@@ -125,6 +125,13 @@ Options::operator[] (Option_Type option) const
return _option_word & option; return _option_word & option;
} }
/* Returns the input file name. */
INLINE const char *
Options::get_input_file_name () const
{
return _input_file_name;
}
/* Returns the iterations value. */ /* Returns the iterations value. */
INLINE int INLINE int
Options::get_iterations () const Options::get_iterations () const