1# dup.m4 serial 6 2dnl Copyright (C) 2011-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 7AC_DEFUN([gl_FUNC_DUP], 8[ 9 AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) 10 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 11 m4_ifdef([gl_MSVC_INVAL], [ 12 AC_REQUIRE([gl_MSVC_INVAL]) 13 if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then 14 REPLACE_DUP=1 15 fi 16 ]) 17 dnl Replace dup() for supporting the gnulib-defined fchdir() function, 18 dnl to keep fchdir's bookkeeping up-to-date. 19 m4_ifdef([gl_FUNC_FCHDIR], [ 20 gl_TEST_FCHDIR 21 if test $HAVE_FCHDIR = 0; then 22 REPLACE_DUP=1 23 fi 24 ]) 25 AC_CACHE_CHECK([whether dup works], [gl_cv_func_dup_works], 26 [AC_RUN_IFELSE( 27 [AC_LANG_PROGRAM([[#include <unistd.h> 28 #include <fcntl.h> 29 #include <errno.h>]], 30 [[/* On OS/2 kLIBC, dup does not work on a directory fd. */ 31 int fd = open (".", O_RDONLY); 32 return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; 33 ]]) 34 ], 35 [gl_cv_func_dup_works=yes], 36 [gl_cv_func_dup_works=no], 37 [case "$host_os" in 38 # Guess no on native Windows. 39 mingw*) gl_cv_func_dup_works="guessing no" ;; 40 *) gl_cv_func_dup_works="guessing yes" ;; 41 esac 42 ]) 43 ]) 44 case "$gl_cv_func_dup_works" in 45 *yes) ;; 46 *) 47 REPLACE_DUP=1 48 ;; 49 esac 50]) 51 52# Prerequisites of lib/dup.c. 53AC_DEFUN([gl_PREREQ_DUP], [:]) 54