diff options
author | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-27 16:01:54 +0000 |
---|---|---|
committer | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-27 16:01:54 +0000 |
commit | 1dc95e51b6a997cb9ed237f0ee1df56782c8a00e (patch) | |
tree | 3714317919d36904c407fd6ec57fe25087da4709 /libgfortran/acinclude.m4 | |
parent | 4f330f9b87ea73a85ab24f4815149c00da3bcfaf (diff) | |
download | gcc-1dc95e51b6a997cb9ed237f0ee1df56782c8a00e.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103566 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/acinclude.m4')
-rw-r--r-- | libgfortran/acinclude.m4 | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libgfortran/acinclude.m4 b/libgfortran/acinclude.m4 index 2dc8f85e16b..4355d3a12fc 100644 --- a/libgfortran/acinclude.m4 +++ b/libgfortran/acinclude.m4 @@ -148,3 +148,38 @@ extern void bar(void) __attribute__((alias(ULP "foo")));], AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1, [Define to 1 if the target supports __attribute__((alias(...))).]) fi]) + +dnl Check whether target can unlink a file still open. +AC_DEFUN([LIBGFOR_CHECK_UNLINK_OPEN_FILE], [ + AC_CACHE_CHECK([whether the target can unlink an open file], + have_unlink_open_file, [ + AC_TRY_RUN([ +#include <errno.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/stat.h> + +int main () +{ + int fd; + + fd = open ("testfile", O_RDWR | O_CREAT, S_IWRITE | S_IREAD); + if (fd <= 0) + return 0; + if (unlink ("testfile") == -1) + return 1; + write (fd, "This is a test\n", 15); + close (fd); + + if (open ("testfile", O_RDONLY, S_IWRITE | S_IREAD) == -1 && errno == ENOENT) + return 0; + else + return 1; +}], have_unlink_open_file=yes, have_unlink_open_file=no, [ +case "${target}" in + *mingw*) have_unlink_open_file=no ;; + *) have_unlink_open_file=yes;; +esac])]) +if test x"$have_unlink_open_file" = xyes; then + AC_DEFINE(HAVE_UNLINK_OPEN_FILE, 1, [Define if target can unlink open files.]) +fi]) |