summaryrefslogtreecommitdiff
path: root/libgfortran/acinclude.m4
diff options
context:
space:
mode:
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-27 16:01:54 +0000
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-27 16:01:54 +0000
commit1dc95e51b6a997cb9ed237f0ee1df56782c8a00e (patch)
tree3714317919d36904c407fd6ec57fe25087da4709 /libgfortran/acinclude.m4
parent4f330f9b87ea73a85ab24f4815149c00da3bcfaf (diff)
downloadgcc-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.m435
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])