aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/jcf-write.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-05-14 00:04:54 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-05-14 00:04:54 +0000
commit2f9a2cd769e940b7d6e7d256c6b24f314d6d00ae (patch)
tree432c8db6c62c88d67202af21b4700a36047ce858 /gcc/java/jcf-write.c
parent546c093ec5f84f1659723329061c47070a9956ef (diff)
downloadgcc-2f9a2cd769e940b7d6e7d256c6b24f314d6d00ae.zip
gcc-2f9a2cd769e940b7d6e7d256c6b24f314d6d00ae.tar.gz
gcc-2f9a2cd769e940b7d6e7d256c6b24f314d6d00ae.tar.bz2
jcf-write.c (write_classfile): Unlink the temporary file if it cannot be renamed.
* jcf-write.c (write_classfile): Unlink the temporary file if it cannot be renamed. Use concat to build up the name of the temporary file From-SVN: r53439
Diffstat (limited to 'gcc/java/jcf-write.c')
-rw-r--r--gcc/java/jcf-write.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c
index 62e3e09..491b561 100644
--- a/gcc/java/jcf-write.c
+++ b/gcc/java/jcf-write.c
@@ -3380,9 +3380,7 @@ write_classfile (clas)
/* The .class file is initially written to a ".tmp" file so that
if multiple instances of the compiler are running at once
they do not see partially formed class files. */
- temporary_file_name = xmalloc (strlen (class_file_name)
- + strlen (".tmp") + 1);
- sprintf (temporary_file_name, "%s.tmp", class_file_name);
+ temporary_file_name = concat (class_file_name, ".tmp", NULL);
stream = fopen (temporary_file_name, "wb");
if (stream == NULL)
fatal_io_error ("can't open %s for writing", temporary_file_name);
@@ -3394,7 +3392,10 @@ write_classfile (clas)
if (fclose (stream))
fatal_io_error ("error closing %s", temporary_file_name);
if (rename (temporary_file_name, class_file_name) == -1)
- fatal_io_error ("can't create %s", class_file_name);
+ {
+ remove (temporary_file_name);
+ fatal_io_error ("can't create %s", class_file_name);
+ }
free (temporary_file_name);
free (class_file_name);
}