1# lseek.m4 serial 10 2dnl Copyright (C) 2007, 2009-2014 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_LSEEK], 8[ 9 AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) 10 11 AC_REQUIRE([AC_CANONICAL_HOST]) 12 AC_REQUIRE([AC_PROG_CC]) 13 AC_CHECK_HEADERS_ONCE([unistd.h]) 14 AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], 15 [case "$host_os" in 16 mingw*) 17 dnl Native Windows. 18 dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or 19 dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT) 20 dnl for a pipe depends on the environment: In a Cygwin 1.5 21 dnl environment it succeeds (wrong); in a Cygwin 1.7 environment 22 dnl it fails with a wrong errno value. 23 gl_cv_func_lseek_pipe=no 24 ;; 25 *) 26 if test $cross_compiling = no; then 27 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 28#include <sys/types.h> /* for off_t */ 29#include <stdio.h> /* for SEEK_CUR */ 30#if HAVE_UNISTD_H 31# include <unistd.h> 32#else /* on Windows with MSVC */ 33# include <io.h> 34#endif 35]], [[ 36 /* Exit with success only if stdin is seekable. */ 37 return lseek (0, (off_t)0, SEEK_CUR) < 0; 38]])], 39 [if test -s conftest$ac_exeext \ 40 && ./conftest$ac_exeext < conftest.$ac_ext \ 41 && test 1 = "`echo hi \ 42 | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then 43 gl_cv_func_lseek_pipe=yes 44 else 45 gl_cv_func_lseek_pipe=no 46 fi 47 ], 48 [gl_cv_func_lseek_pipe=no]) 49 else 50 AC_COMPILE_IFELSE( 51 [AC_LANG_SOURCE([[ 52#if defined __BEOS__ 53/* BeOS mistakenly return 0 when trying to seek on pipes. */ 54 Choke me. 55#endif]])], 56 [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) 57 fi 58 ;; 59 esac 60 ]) 61 if test $gl_cv_func_lseek_pipe = no; then 62 REPLACE_LSEEK=1 63 AC_DEFINE([LSEEK_PIPE_BROKEN], [1], 64 [Define to 1 if lseek does not detect pipes.]) 65 fi 66 67 AC_REQUIRE([gl_SYS_TYPES_H]) 68 if test $WINDOWS_64_BIT_OFF_T = 1; then 69 REPLACE_LSEEK=1 70 fi 71]) 72