Don't overwrite the input file.
authorDi-an Jan <dianj@freeshell.org>
Wed, 29 Oct 2008 01:38:32 +0000 (21:38 -0400)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 29 Oct 2008 01:45:43 +0000 (21:45 -0400)
* src/files.c (output_file_name_check): Fatal error if using input file
for output.
* tests/output.at: (AT_CHECK_CONFLICTING_OUTPUT): Add return status
argument.
(Conflicting output files): Add test.

ChangeLog
src/files.c
tests/output.at

index 4852ba01f708b6958acebaaaa15b93f83ecd82c3..6a2327e0868d9e1f7ffa71fced2555cc2dce8b0a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-10-28  Di-an Jan  <dianj@freeshell.org>  (tiny change)
+
+       Don't overwrite the input file.
+       * src/files.c (output_file_name_check): Fatal error if using input file
+       for output.
+       * tests/output.at: (AT_CHECK_CONFLICTING_OUTPUT): Add return status
+       argument.
+       (Conflicting output files): Add test.
+
 2008-10-28  Akim Demaille  <demaille@gostai.com>
 
        Space changes.
index 0499a35376f7535a91f1d92e78bb9410d75fec23..d995d1871dd0452dff47d6e256bb30d676ffbd14 100644 (file)
@@ -351,6 +351,8 @@ compute_output_file_names (void)
 void
 output_file_name_check (char const *file_name)
 {
+  if (0 == strcmp (file_name, grammar_file))
+    fatal (_("refusing to overwrite the input file %s"), quote (file_name));
   {
     int i;
     for (i = 0; i < file_names_count; i++)
index 6e21dc933b9df304a441edf14a200268dff1a151..3e815d70abc0571184c980d96aa15bb718c5fa8b 100644 (file)
@@ -117,8 +117,9 @@ AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose],
                [], [AT_CHECK_NO_SUBDIR_PART([subdir/foo])])
 
 
-# AT_CHECK_CONFLICTING_OUTPUT(INPUT-FILE, DIRECTIVES, FLAGS, STDERR)
-# -----------------------------------------------------------------------------
+# AT_CHECK_CONFLICTING_OUTPUT(INPUT-FILE, DIRECTIVES, FLAGS, STDERR,
+#                             [EXIT-STATUS])
+# ------------------------------------------------------------------
 m4_define([AT_CHECK_CONFLICTING_OUTPUT],
 [AT_SETUP([Conflicting output files: $2 $3])
 case "$1" in
@@ -130,7 +131,7 @@ AT_DATA([$1],
 foo: {};
 ]])
 
-AT_BISON_CHECK([$3 $1], 0, [], [$4])
+AT_BISON_CHECK([$3 $1], $5, [], [$4])
 AT_CLEANUP
 ])
 
@@ -149,6 +150,10 @@ AT_CHECK_CONFLICTING_OUTPUT([foo.y],
 [foo.y: warning: conflicting outputs to file `location.hh'
 ])
 
+AT_CHECK_CONFLICTING_OUTPUT([foo.y], [], [-o foo.y],
+[foo.y: fatal error: refusing to overwrite the input file `foo.y'
+], 1)
+
 
 # AT_CHECK_OUTPUT_FILE_NAME(FILE-NAME-PREFIX, [ADDITIONAL-TESTS])
 # -----------------------------------------------------------------------------