2 dnl Copyright (C) 2007-2020 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
7 AC_DEFUN([gl_FUNC_FOPEN],
9 AC_REQUIRE([gl_STDIO_H_DEFAULTS])
10 AC_REQUIRE([AC_CANONICAL_HOST])
13 dnl Replace fopen, for handling of "/dev/null".
15 dnl fopen on mingw also has the trailing slash bug.
16 gl_cv_func_fopen_slash="guessing no"
19 dnl fopen("foo/", "w") should not create a file when the file name has a
21 AC_CACHE_CHECK([whether fopen recognizes a trailing slash],
22 [gl_cv_func_fopen_slash],
30 FILE *fp = fopen ("conftest.sl/", "w");
31 int result = (fp != NULL);
36 [gl_cv_func_fopen_slash=yes],
37 [gl_cv_func_fopen_slash=no],
41 aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
42 gl_cv_func_fopen_slash="guessing no" ;;
44 gl_cv_func_fopen_slash="guessing yes" ;;
52 case "$gl_cv_func_fopen_slash" in
54 AC_DEFINE([FOPEN_TRAILING_SLASH_BUG], [1],
55 [Define to 1 if fopen() fails to recognize a trailing slash.])
61 AC_DEFUN([gl_FUNC_FOPEN_GNU],
63 AC_REQUIRE([gl_FUNC_FOPEN])
64 AC_CACHE_CHECK([whether fopen supports the mode character 'x'],
65 [gl_cv_func_fopen_mode_x],
74 fp = fopen ("conftest.x", "w");
76 fp = fopen ("conftest.x", "wx");
80 else if (errno == EEXIST)
86 [gl_cv_func_fopen_mode_x=yes],
87 [gl_cv_func_fopen_mode_x=no],
89 # Guess yes on glibc and musl systems.
90 linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*)
91 gl_cv_func_fopen_mode_x="guessing yes" ;;
92 # If we don't know, obey --enable-cross-guesses.
94 gl_cv_func_fopen_mode_x="$gl_cross_guess_normal" ;;
99 AC_CACHE_CHECK([whether fopen supports the mode character 'e'],
100 [gl_cv_func_fopen_mode_e],
101 [echo foo > conftest.x
110 FILE *fp = fopen ("conftest.x", "re");
113 if (fcntl (fileno (fp), F_GETFD) & FD_CLOEXEC)
123 [gl_cv_func_fopen_mode_e=yes],
124 [gl_cv_func_fopen_mode_e=no],
126 # Guess yes on glibc and musl systems.
127 linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*)
128 gl_cv_func_fopen_mode_e="guessing yes" ;;
129 # Guess no on native Windows.
131 gl_cv_func_fopen_mode_e="guessing no" ;;
132 # If we don't know, obey --enable-cross-guesses.
134 gl_cv_func_fopen_mode_e="$gl_cross_guess_normal" ;;
139 case "$gl_cv_func_fopen_mode_x" in
140 *no) REPLACE_FOPEN=1 ;;
142 case "$gl_cv_func_fopen_mode_e" in
143 *no) REPLACE_FOPEN=1 ;;
147 # Prerequisites of lib/fopen.c.
148 AC_DEFUN([gl_PREREQ_FOPEN], [:])