projects
/
bison.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tests: skip C++ tests that are too demanding for some compilers
[bison.git]
/
src
/
files.c
diff --git
a/src/files.c
b/src/files.c
index 49e8379effa641ef2cbf313d0895f353de7da794..76aa7fe3dfbe0a42de961cc179d2115f5a1e7177 100644
(file)
--- a/
src/files.c
+++ b/
src/files.c
@@
-1,7
+1,7
@@
/* Open and close files for Bison.
/* Open and close files for Bison.
- Copyright (C) 1984, 1986, 1989, 1992, 2000
, 2001, 2002, 2003, 2004,
-
2005, 2006, 2007, 2008, 2009, 2010 Free Software
Foundation, Inc.
+ Copyright (C) 1984, 1986, 1989, 1992, 2000
-2013 Free Software
+ Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
This file is part of Bison, the GNU Compiler Compiler.
@@
-25,6
+25,7
@@
#include <dirname.h>
#include <get-errno.h>
#include <quote.h>
#include <dirname.h>
#include <get-errno.h>
#include <quote.h>
+#include <quotearg.h>
#include <stdio-safer.h>
#include <xstrndup.h>
#include <stdio-safer.h>
#include <xstrndup.h>
@@
-33,7
+34,7
@@
#include "getargs.h"
#include "gram.h"
#include "getargs.h"
#include "gram.h"
-/* Initializing some values below (such SPEC_NAME_PREFIX to
`
yy') is
+/* Initializing some values below (such SPEC_NAME_PREFIX to
'
yy') is
tempting, but don't do that: for the time being our handling of the
%directive vs --option leaves precedence to the options by deciding
that if a %directive sets a variable which is really set (i.e., not
tempting, but don't do that: for the time being our handling of the
%directive vs --option leaves precedence to the options by deciding
that if a %directive sets a variable which is really set (i.e., not
@@
-57,20
+58,20
@@
uniqstr grammar_file = NULL;
uniqstr current_file = NULL;
/* If --output=dir/foo.c was specified,
uniqstr current_file = NULL;
/* If --output=dir/foo.c was specified,
- DIR_PREFIX is
`dir/' and ALL_BUT_EXT and ALL_BUT_TAB_EXT are `
dir/foo'.
+ DIR_PREFIX is
'dir/' and ALL_BUT_EXT and ALL_BUT_TAB_EXT are '
dir/foo'.
- If --output=dir/foo.tab.c was specified, DIR_PREFIX is
`
dir/',
- ALL_BUT_EXT is
`dir/foo.tab', and ALL_BUT_TAB_EXT is `
dir/foo'.
+ If --output=dir/foo.tab.c was specified, DIR_PREFIX is
'
dir/',
+ ALL_BUT_EXT is
'dir/foo.tab', and ALL_BUT_TAB_EXT is '
dir/foo'.
If --output was not specified but --file-prefix=dir/foo was specified,
If --output was not specified but --file-prefix=dir/foo was specified,
- ALL_BUT_EXT =
`foo.tab' and ALL_BUT_TAB_EXT = `
foo'.
+ ALL_BUT_EXT =
'foo.tab' and ALL_BUT_TAB_EXT = '
foo'.
If neither --output nor --file was specified but the input grammar
If neither --output nor --file was specified but the input grammar
- is name dir/foo.y, ALL_BUT_EXT and ALL_BUT_TAB_EXT are
`
foo'.
+ is name dir/foo.y, ALL_BUT_EXT and ALL_BUT_TAB_EXT are
'
foo'.
If neither --output nor --file was specified, DIR_PREFIX is the
empty string (meaning the current directory); otherwise it is
If neither --output nor --file was specified, DIR_PREFIX is the
empty string (meaning the current directory); otherwise it is
-
`
dir/'. */
+
'
dir/'. */
char *all_but_ext;
static char *all_but_tab_ext;
char *all_but_ext;
static char *all_but_tab_ext;
@@
-78,7
+79,7
@@
char *dir_prefix;
/* C source file extension (the parser source). */
static char *src_extension = NULL;
/* C source file extension (the parser source). */
static char *src_extension = NULL;
-/* Header file extension (if option
`
`-d'' is specified). */
+/* Header file extension (if option
'
`-d'' is specified). */
static char *header_extension = NULL;
\f
/*-----------------------------------------------------------------.
static char *header_extension = NULL;
\f
/*-----------------------------------------------------------------.
@@
-109,7
+110,8
@@
xfopen (const char *name, const char *mode)
ptr = fopen_safer (name, mode);
if (!ptr)
ptr = fopen_safer (name, mode);
if (!ptr)
- error (EXIT_FAILURE, get_errno (), _("cannot open file `%s'"), name);
+ error (EXIT_FAILURE, get_errno (),
+ _("%s: cannot open"), quotearg_colon (name));
return ptr;
}
return ptr;
}
@@
-125,13
+127,25
@@
xfclose (FILE *ptr)
return;
if (ferror (ptr))
return;
if (ferror (ptr))
- error (EXIT_FAILURE, 0, _("
I/O
error"));
+ error (EXIT_FAILURE, 0, _("
input/output
error"));
if (fclose (ptr) != 0)
error (EXIT_FAILURE, get_errno (), _("cannot close file"));
}
\f
if (fclose (ptr) != 0)
error (EXIT_FAILURE, get_errno (), _("cannot close file"));
}
\f
+FILE *
+xfdopen (int fd, char const *mode)
+{
+ FILE *res = fdopen (fd, mode);
+ if (! res)
+ error (EXIT_FAILURE, get_errno (),
+ /* On a separate line to please the "unmarked_diagnostics"
+ syntax-check. */
+ "fdopen");
+ return res;
+}
+
/*------------------------------------------------------------------.
| Compute ALL_BUT_EXT, ALL_BUT_TAB_EXT and output files extensions. |
`------------------------------------------------------------------*/
/*------------------------------------------------------------------.
| Compute ALL_BUT_EXT, ALL_BUT_TAB_EXT and output files extensions. |
`------------------------------------------------------------------*/
@@
-140,7
+154,7
@@
xfclose (FILE *ptr)
static void
compute_exts_from_gf (const char *ext)
{
static void
compute_exts_from_gf (const char *ext)
{
- if (
strcmp (ext, ".y") == 0
)
+ if (
STREQ (ext, ".y")
)
{
src_extension = xstrdup (language->src_extension);
header_extension = xstrdup (language->header_extension);
{
src_extension = xstrdup (language->src_extension);
header_extension = xstrdup (language->header_extension);
@@
-177,7
+191,7
@@
compute_exts_from_src (const char *ext)
*EXT points to the last period in the basename, or NULL if none.
If there is no *EXT, *TAB is NULL. Otherwise, *TAB points to
*EXT points to the last period in the basename, or NULL if none.
If there is no *EXT, *TAB is NULL. Otherwise, *TAB points to
-
`.tab' or `
_tab' if present right before *EXT, or is NULL. *TAB
+
'.tab' or '
_tab' if present right before *EXT, or is NULL. *TAB
cannot be equal to *BASE.
None are allocated, they are simply pointers to parts of FILE_NAME.
cannot be equal to *BASE.
None are allocated, they are simply pointers to parts of FILE_NAME.
@@
-200,7
+214,7
@@
compute_exts_from_src (const char *ext)
static void
file_name_split (const char *file_name,
static void
file_name_split (const char *file_name,
- const char **base, const char **tab, const char **ext)
+
const char **base, const char **tab, const char **ext)
{
*base = last_component (file_name);
{
*base = last_component (file_name);
@@
-208,16
+222,15
@@
file_name_split (const char *file_name,
*ext = strrchr (*base, '.');
*tab = NULL;
*ext = strrchr (*base, '.');
*tab = NULL;
- /* If there is an extension, check if there is a
`
.tab' part right
+ /* If there is an extension, check if there is a
'
.tab' part right
before. */
if (*ext)
{
size_t baselen = *ext - *base;
before. */
if (*ext)
{
size_t baselen = *ext - *base;
- size_t dottablen =
4
;
+ size_t dottablen =
sizeof (TAB_EXT) - 1
;
if (dottablen < baselen
if (dottablen < baselen
- && (strncmp (*ext - dottablen, ".tab", dottablen) == 0
- || strncmp (*ext - dottablen, "_tab", dottablen) == 0))
- *tab = *ext - dottablen;
+ && STRPREFIX_LIT (TAB_EXT, *ext - dottablen))
+ *tab = *ext - dottablen;
}
}
}
}
@@
-239,44
+252,44
@@
compute_file_name_parts (void)
/* ALL_BUT_EXT goes up the EXT, excluding it. */
all_but_ext =
/* ALL_BUT_EXT goes up the EXT, excluding it. */
all_but_ext =
- xstrndup (spec_outfile,
- (strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
+
xstrndup (spec_outfile,
+
(strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
/* ALL_BUT_TAB_EXT goes up to TAB, excluding it. */
all_but_tab_ext =
/* ALL_BUT_TAB_EXT goes up to TAB, excluding it. */
all_but_tab_ext =
- xstrndup (spec_outfile,
- (strlen (spec_outfile)
- - (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
+
xstrndup (spec_outfile,
+
(strlen (spec_outfile)
+
- (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
if (ext)
if (ext)
- compute_exts_from_src (ext);
+
compute_exts_from_src (ext);
}
else
{
file_name_split (grammar_file, &base, &tab, &ext);
if (spec_file_prefix)
}
else
{
file_name_split (grammar_file, &base, &tab, &ext);
if (spec_file_prefix)
- {
-
/* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT = `
foo'. */
- dir_prefix =
+
{
+
/* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT = '
foo'. */
+
dir_prefix =
xstrndup (spec_file_prefix,
last_component (spec_file_prefix) - spec_file_prefix);
xstrndup (spec_file_prefix,
last_component (spec_file_prefix) - spec_file_prefix);
- all_but_tab_ext = xstrdup (spec_file_prefix);
- }
+
all_but_tab_ext = xstrdup (spec_file_prefix);
+
}
else if (yacc_flag)
else if (yacc_flag)
- {
-
/* If --yacc, then the output is `
y.tab.c'. */
- dir_prefix = xstrdup ("");
- all_but_tab_ext = xstrdup ("y");
- }
+
{
+
/* If --yacc, then the output is '
y.tab.c'. */
+
dir_prefix = xstrdup ("");
+
all_but_tab_ext = xstrdup ("y");
+
}
else
else
- {
- /* Otherwise, ALL_BUT_TAB_EXT is computed from the input
-
grammar: `foo/bar.yy' => `
bar'. */
- dir_prefix = xstrdup ("");
- all_but_tab_ext =
- xstrndup (base, (strlen (base) - (ext ? strlen (ext) : 0)));
- }
+
{
+
/* Otherwise, ALL_BUT_TAB_EXT is computed from the input
+
grammar: 'foo/bar.yy' => '
bar'. */
+
dir_prefix = xstrdup ("");
+
all_but_tab_ext =
+
xstrndup (base, (strlen (base) - (ext ? strlen (ext) : 0)));
+
}
if (language->add_tab)
all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
if (language->add_tab)
all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
@@
-285,7
+298,7
@@
compute_file_name_parts (void)
/* Compute the extensions from the grammar file name. */
if (ext && !yacc_flag)
/* Compute the extensions from the grammar file name. */
if (ext && !yacc_flag)
- compute_exts_from_gf (ext);
+
compute_exts_from_gf (ext);
}
}
}
}
@@
-312,20
+325,20
@@
compute_output_file_names (void)
if (defines_flag)
{
if (! spec_defines_file)
if (defines_flag)
{
if (! spec_defines_file)
- spec_defines_file = concat2 (all_but_ext, header_extension);
+
spec_defines_file = concat2 (all_but_ext, header_extension);
}
if (graph_flag)
{
if (! spec_graph_file)
}
if (graph_flag)
{
if (! spec_graph_file)
- spec_graph_file = concat2 (all_but_tab_ext, ".dot");
+
spec_graph_file = concat2 (all_but_tab_ext, ".dot");
output_file_name_check (&spec_graph_file);
}
if (xml_flag)
{
if (! spec_xml_file)
output_file_name_check (&spec_graph_file);
}
if (xml_flag)
{
if (! spec_xml_file)
- spec_xml_file = concat2 (all_but_tab_ext, ".xml");
+
spec_xml_file = concat2 (all_but_tab_ext, ".xml");
output_file_name_check (&spec_xml_file);
}
output_file_name_check (&spec_xml_file);
}
@@
-345,9
+358,9
@@
void
output_file_name_check (char **file_name)
{
bool conflict = false;
output_file_name_check (char **file_name)
{
bool conflict = false;
- if (
0 == strcmp
(*file_name, grammar_file))
+ if (
STREQ
(*file_name, grammar_file))
{
{
- complain (_("refusing to overwrite the input file %s"),
+ complain (
NULL, complaint,
_("refusing to overwrite the input file %s"),
quote (*file_name));
conflict = true;
}
quote (*file_name));
conflict = true;
}
@@
-355,10
+368,10
@@
output_file_name_check (char **file_name)
{
int i;
for (i = 0; i < file_names_count; i++)
{
int i;
for (i = 0; i < file_names_count; i++)
- if (
0 == strcmp
(file_names[i], *file_name))
+ if (
STREQ
(file_names[i], *file_name))
{
{
-
warn (
_("conflicting outputs to file %s"),
- quote (*file_name));
+
complain (NULL, Wother,
_("conflicting outputs to file %s"),
+
quote (*file_name));
conflict = true;
}
}
conflict = true;
}
}