Commit | Line | Data |
---|---|---|
7a6dbc2f SDJ |
1 | # open.m4 serial 15 |
2 | dnl Copyright (C) 2007-2018 Free Software Foundation, Inc. | |
6ec2e0f5 SDJ |
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. | |
6 | ||
7 | AC_DEFUN([gl_FUNC_OPEN], | |
8 | [ | |
9 | AC_REQUIRE([AC_CANONICAL_HOST]) | |
7a6dbc2f | 10 | AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) |
6ec2e0f5 SDJ |
11 | case "$host_os" in |
12 | mingw* | pw*) | |
13 | REPLACE_OPEN=1 | |
14 | ;; | |
15 | *) | |
16 | dnl open("foo/") should not create a file when the file name has a | |
17 | dnl trailing slash. FreeBSD only has the problem on symlinks. | |
18 | AC_CHECK_FUNCS_ONCE([lstat]) | |
7a6dbc2f SDJ |
19 | if test "$gl_cv_macro_O_CLOEXEC" != yes; then |
20 | REPLACE_OPEN=1 | |
21 | fi | |
6ec2e0f5 SDJ |
22 | AC_CACHE_CHECK([whether open recognizes a trailing slash], |
23 | [gl_cv_func_open_slash], | |
24 | [# Assume that if we have lstat, we can also check symlinks. | |
25 | if test $ac_cv_func_lstat = yes; then | |
26 | touch conftest.tmp | |
27 | ln -s conftest.tmp conftest.lnk | |
28 | fi | |
29 | AC_RUN_IFELSE( | |
30 | [AC_LANG_SOURCE([[ | |
31 | #include <fcntl.h> | |
32 | #if HAVE_UNISTD_H | |
33 | # include <unistd.h> | |
34 | #endif | |
35 | int main () | |
36 | { | |
37 | int result = 0; | |
38 | #if HAVE_LSTAT | |
39 | if (open ("conftest.lnk/", O_RDONLY) != -1) | |
40 | result |= 1; | |
41 | #endif | |
42 | if (open ("conftest.sl/", O_CREAT, 0600) >= 0) | |
43 | result |= 2; | |
44 | return result; | |
45 | }]])], | |
46 | [gl_cv_func_open_slash=yes], | |
47 | [gl_cv_func_open_slash=no], | |
48 | [ | |
49 | changequote(,)dnl | |
50 | case "$host_os" in | |
51 | freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) | |
52 | gl_cv_func_open_slash="guessing no" ;; | |
53 | *) | |
54 | gl_cv_func_open_slash="guessing yes" ;; | |
55 | esac | |
56 | changequote([,])dnl | |
57 | ]) | |
58 | rm -f conftest.sl conftest.tmp conftest.lnk | |
59 | ]) | |
60 | case "$gl_cv_func_open_slash" in | |
61 | *no) | |
62 | AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], | |
63 | [Define to 1 if open() fails to recognize a trailing slash.]) | |
64 | REPLACE_OPEN=1 | |
65 | ;; | |
66 | esac | |
67 | ;; | |
68 | esac | |
69 | dnl Replace open() for supporting the gnulib-defined fchdir() function, | |
70 | dnl to keep fchdir's bookkeeping up-to-date. | |
71 | m4_ifdef([gl_FUNC_FCHDIR], [ | |
72 | if test $REPLACE_OPEN = 0; then | |
73 | gl_TEST_FCHDIR | |
74 | if test $HAVE_FCHDIR = 0; then | |
75 | REPLACE_OPEN=1 | |
76 | fi | |
77 | fi | |
78 | ]) | |
79 | dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. | |
80 | m4_ifdef([gl_NONBLOCKING_IO], [ | |
81 | if test $REPLACE_OPEN = 0; then | |
82 | gl_NONBLOCKING_IO | |
83 | if test $gl_cv_have_open_O_NONBLOCK != yes; then | |
84 | REPLACE_OPEN=1 | |
85 | fi | |
86 | fi | |
87 | ]) | |
88 | ]) | |
89 | ||
90 | # Prerequisites of lib/open.c. | |
91 | AC_DEFUN([gl_PREREQ_OPEN], | |
92 | [ | |
93 | AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) | |
94 | : | |
95 | ]) |