diff options
author | Francois-Xavier Coudert <coudert@clipper.ens.fr> | 2005-08-27 18:01:54 +0200 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-08-27 16:01:54 +0000 |
commit | 10c682a0cb57e9ed0d5bb47a20af7932486b56a5 (patch) | |
tree | 3714317919d36904c407fd6ec57fe25087da4709 /libgfortran/io/close.c | |
parent | ec53fc93d0fbfac2037da571ce5e637ef0c437ee (diff) | |
download | gcc-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.c | 24 |
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 (); |