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