]> Savannah Git Hosting - gnulib.git/commitdiff
ftell, ftello: Fix recognition of pipes on native Windows.
authorBruno Haible <bruno@clisp.org>
Mon, 24 Apr 2023 17:48:47 +0000 (19:48 +0200)
committerBruno Haible <bruno@clisp.org>
Thu, 27 Apr 2023 16:34:52 +0000 (18:34 +0200)
* m4/lseek.m4 (gl_FUNC_LSEEK): Update comment.
* m4/ftello.m4 (gl_FUNC_FTELLO): On native Windows, set REPLACE_FTELLO=1
always.

ChangeLog
m4/ftello.m4
m4/lseek.m4

index 70be85f6e5b82be1262cd2e95082089741efd83b..b71a7660756ab8845298998683fa9e592510916c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2023-04-24  Bruno Haible  <bruno@clisp.org>
+
+       ftell, ftello: Fix recognition of pipes on native Windows.
+       * m4/lseek.m4 (gl_FUNC_LSEEK): Update comment.
+       * m4/ftello.m4 (gl_FUNC_FTELLO): On native Windows, set REPLACE_FTELLO=1
+       always.
+
 2023-04-24  Bruno Haible  <bruno@clisp.org>
 
        lseek: Fix module dependencies (regression 2021-11-15).
index 919f39d8b8742a899a3660c2d2778bc614f9bbff..e13fcd93d23f4e157ab3fabf05af6657993bb428 100644 (file)
@@ -1,5 +1,5 @@
-# ftello.m4 serial 14
-dnl Copyright (C) 2007-2022 Free Software Foundation, Inc.
+# ftello.m4 serial 15
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -37,13 +37,24 @@ AC_DEFUN([gl_FUNC_FTELLO],
     if test $gl_cv_var_stdin_large_offset = no; then
       REPLACE_FTELLO=1
     fi
+    AC_REQUIRE([AC_CANONICAL_HOST])
+    if test $REPLACE_FTELLO = 0; then
+      dnl On native Windows, in some circumstances, ftell(), ftello(),
+      dnl fgetpos(), lseek(), _lseeki64() all succeed on devices of type
+      dnl FILE_TYPE_PIPE. However, to match POSIX behaviour, we want
+      dnl ftell(), ftello(), fgetpos(), lseek() to fail when the argument fd
+      dnl designates a pipe. See also
+      dnl https://github.com/python/cpython/issues/78961#issuecomment-1093800325
+      case "$host_os" in
+        mingw*) REPLACE_FTELLO=1 ;;
+      esac
+    fi
     if test $REPLACE_FTELLO = 0; then
       dnl Detect bug on Solaris.
       dnl ftell and ftello produce incorrect results after putc that followed a
       dnl getc call that reached EOF on Solaris. This is because the _IOREAD
       dnl flag does not get cleared in this case, even though _IOWRT gets set,
       dnl and ftell and ftello look whether the _IOREAD flag is set.
-      AC_REQUIRE([AC_CANONICAL_HOST])
       AC_CACHE_CHECK([whether ftello works],
         [gl_cv_func_ftello_works],
         [
index 6e1ab6ffaa0a676e73d69ca4924c6cb7cc286bdd..0da458804fb4cf618a80683c6c27bd2129beb4cc 100644 (file)
@@ -1,4 +1,4 @@
-# lseek.m4 serial 13
+# lseek.m4 serial 14
 dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -17,9 +17,11 @@ AC_DEFUN([gl_FUNC_LSEEK],
          dnl Native Windows.
          dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or
          dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT)
-         dnl for a pipe depends on the environment: In a Cygwin 1.5
-         dnl environment it succeeds (wrong); in a Cygwin 1.7 environment
-         dnl it fails with a wrong errno value.
+         dnl for a pipe depends on the environment:
+         dnl In a Cygwin 1.5 environment it succeeds (wrong);
+         dnl in a Cygwin 1.7 environment it fails with a wrong errno value;
+         dnl in a Cygwin 2.9.0 environment it fails correctly;
+         dnl in a Cygwin 3.4.6 environment it succeeds again (wrong).
          gl_cv_func_lseek_pipe=no
          ;;
        *)