1# open-slash.m4 serial 1 2dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. 3dnl This file is free software; the Free Software Foundation 4dnl gives unlimited permission to copy and/or distribute it, 5dnl with or without modifications, as long as this notice is preserved. 6 7dnl Tests whether open() and creat() recognize a trailing slash. 8dnl Sets gl_cv_func_open_slash. 9AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG], 10[ 11 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 12 dnl open("foo/") should not create a file when the file name has a 13 dnl trailing slash. FreeBSD only has the problem on symlinks. 14 AC_CHECK_FUNCS_ONCE([lstat]) 15 AC_CACHE_CHECK([whether open recognizes a trailing slash], 16 [gl_cv_func_open_slash], 17 [# Assume that if we have lstat, we can also check symlinks. 18 if test $ac_cv_func_lstat = yes; then 19 touch conftest.tmp 20 ln -s conftest.tmp conftest.lnk 21 fi 22 AC_RUN_IFELSE( 23 [AC_LANG_SOURCE([[ 24#include <fcntl.h> 25#if HAVE_UNISTD_H 26# include <unistd.h> 27#endif 28int main () 29{ 30 int result = 0; 31#if HAVE_LSTAT 32 if (open ("conftest.lnk/", O_RDONLY) != -1) 33 result |= 1; 34#endif 35 if (open ("conftest.sl/", O_CREAT, 0600) >= 0) 36 result |= 2; 37 return result; 38}]])], 39 [gl_cv_func_open_slash=yes], 40 [gl_cv_func_open_slash=no], 41 [ 42changequote(,)dnl 43 case "$host_os" in 44 freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) 45 gl_cv_func_open_slash="guessing no" ;; 46 *) 47 gl_cv_func_open_slash="guessing yes" ;; 48 esac 49changequote([,])dnl 50 ]) 51 rm -f conftest.sl conftest.tmp conftest.lnk 52 ]) 53 case "$gl_cv_func_open_slash" in 54 *no) 55 AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], 56 [Define to 1 if open() fails to recognize a trailing slash.]) 57 ;; 58 esac 59]) 60