]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR java/21245 (gcjh creates invalid/empty header files)
authorTom Tromey <tromey@redhat.com>
Tue, 3 May 2005 20:51:30 +0000 (20:51 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Tue, 3 May 2005 20:51:30 +0000 (20:51 +0000)
PR java/21245:
* gjavah.c (main): Unlink output file on error.

From-SVN: r99182

gcc/java/ChangeLog
gcc/java/gjavah.c

index 60e706b703a8ee6bef50f47aab20c04ba9b81a72..adb3b5a4cbe2655cadee5632e30beba843b48fa0 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-03  Tom Tromey  <tromey@redhat.com>
+
+       PR java/21245:
+       * gjavah.c (main): Unlink output file on error.
+
 2005-05-03  Kazu Hirata  <kazu@cs.umass.edu>
 
        * constants.c, jvgenmain.c, lang.opt, resource.c: Update
index f8ae732b2c05a0ba41138abc7cc1214a4145a466..5606f259b2f99ea9faba7eff7ac96121459f848b 100644 (file)
@@ -2387,6 +2387,7 @@ main (int argc, char** argv)
   char *output_file = NULL;
   int emit_dependencies = 0, suppress_output = 0;
   int opt;
+  int local_found_error;
 
   /* Unlock the stdio streams.  */
   unlock_std_streams ();
@@ -2521,12 +2522,18 @@ main (int argc, char** argv)
       exit (1);
     }
 
+  local_found_error = 0;
   for (argi = optind; argi < argc; argi++)
     {
       char *classname = argv[argi];
-      char *current_output_file;
+      char *current_output_file = NULL;
       const char *classfile_name;
 
+      /* We reset the error state here so that we can detect errors
+        that occur when processing this file, so the output can be
+        unlinked if need be.  */
+      found_error = 0;
+
       if (verbose)
        printf (_("Processing %s\n"), classname);
       if (! output_file)
@@ -2602,13 +2609,22 @@ main (int argc, char** argv)
       free_method_name_list ();
       process_file (&jcf, out);
       JCF_FINISH (&jcf);
+
+      /* If we found an error and we're writing to a real file,
+        delete it.  */
+      if (found_error && ! suppress_output && current_output_file != NULL
+         && strcmp (current_output_file, "-"))
+       unlink (current_output_file);
+
       if (current_output_file != output_file)
        free (current_output_file);
       jcf_dependency_write ();
+
+      local_found_error |= found_error;
     }
 
   if (out != NULL && out != stdout)
     fclose (out);
 
-  return found_error;
+  return local_found_error;
 }