aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/close.c
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>2005-08-27 18:01:54 +0200
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-08-27 16:01:54 +0000
commit10c682a0cb57e9ed0d5bb47a20af7932486b56a5 (patch)
tree3714317919d36904c407fd6ec57fe25087da4709 /libgfortran/io/close.c
parentec53fc93d0fbfac2037da571ce5e637ef0c437ee (diff)
downloadgcc-10c682a0cb57e9ed0d5bb47a20af7932486b56a5.zip
gcc-10c682a0cb57e9ed0d5bb47a20af7932486b56a5.tar.gz
gcc-10c682a0cb57e9ed0d5bb47a20af7932486b56a5.tar.bz2
acinclude.m4 (LIBGFOR_CHECK_UNLINK_OPEN_FILE): Add check to see if target can unlink open files.
* acinclude.m4 (LIBGFOR_CHECK_UNLINK_OPEN_FILE): Add check to see if target can unlink open files. * configure.ac: Use this new test. * config.h.in: Regenerate. * configure: Regenerate. * Makefile.in: Regenerate. * aclocal.ac: Regenerate. * io/io.h: Add prototype for unpack_filename. * io/close.c (st_close): Delete file after closing unit if HAVE_UNLINK_OPEN_FILE is not defined. * io/unix.c (unpack_filename): Unlink scratch file after opening it only if HAVE_UNLINK_OPEN_FILE is defined. From-SVN: r103566
Diffstat (limited to 'libgfortran/io/close.c')
-rw-r--r--libgfortran/io/close.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/libgfortran/io/close.c b/libgfortran/io/close.c
index f814bd5..6010e92 100644
--- a/libgfortran/io/close.c
+++ b/libgfortran/io/close.c
@@ -30,6 +30,7 @@ Boston, MA 02110-1301, USA. */
#include "config.h"
#include "libgfortran.h"
#include "io.h"
+#include <limits.h>
typedef enum
{ CLOSE_DELETE, CLOSE_KEEP, CLOSE_UNSPECIFIED }
@@ -50,6 +51,11 @@ st_close (void)
{
close_status status;
gfc_unit *u;
+#if !HAVE_UNLINK_OPEN_FILE
+ char * path;
+
+ path = NULL;
+#endif
library_start ();
@@ -68,14 +74,30 @@ st_close (void)
if (status == CLOSE_KEEP)
generate_error (ERROR_BAD_OPTION,
"Can't KEEP a scratch file on CLOSE");
+#if !HAVE_UNLINK_OPEN_FILE
+ path = (char *) gfc_alloca (u->file_len + 1);
+ unpack_filename (path, u->file, u->file_len);
+#endif
}
else
{
if (status == CLOSE_DELETE)
- delete_file (u);
+ {
+#if HAVE_UNLINK_OPEN_FILE
+ delete_file (u);
+#else
+ path = (char *) gfc_alloca (u->file_len + 1);
+ unpack_filename (path, u->file, u->file_len);
+#endif
+ }
}
close_unit (u);
+
+#if !HAVE_UNLINK_OPEN_FILE
+ if (path != NULL)
+ unlink (path);
+#endif
}
library_end ();