]> Savannah Git Hosting - gnulib.git/commitdiff
popen: Set gl_cv_func_popen_works to "guessing no" on OS/2.
authorKO Myung-Hun <komh78@gmail.com>
Mon, 10 Feb 2025 11:35:00 +0000 (20:35 +0900)
committerBruno Haible <bruno@clisp.org>
Fri, 7 Mar 2025 20:15:13 +0000 (21:15 +0100)
* doc/posix-functions/popen.texi: List OS/2 kLIBC case.
* m4/popen.m4 (gl_FUNC_POPEN): Set gl_cv_func_popen_works to
"guessing no" on OS/2.

Copyright-paperwork-exempt: Yes

ChangeLog
doc/posix-functions/popen.texi
m4/popen.m4

index b84624370350a9755e228dfb8a935e5282096796..0ded0017b173c8f0ea43eb146f3cf0e760006c38 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2025-02-10  KO Myung-Hun  <komh78@gmail.com>
+
+       popen: Set gl_cv_func_popen_works to "guessing no" on OS/2.
+       * doc/posix-functions/popen.texi: List OS/2 kLIBC case.
+       * m4/popen.m4 (gl_FUNC_POPEN): Set gl_cv_func_popen_works to
+       "guessing no" on OS/2.
+
 2025-02-03  Bruno Haible  <bruno@clisp.org>
 
        gnulib-tool: Apply libgnu.{,l}a specific CFLAGS to all its object files.
index 462e5e5c2b846cc619efa603e23855e417b9684f..e1cdac33961a16598b86c672514e4f3f18b17301 100644 (file)
@@ -15,6 +15,9 @@ MSVC 14.
 Some platforms start the child with closed stdin or stdout if the
 standard descriptors were closed in the parent:
 Cygwin 1.5.x.
+@item
+This function hangs if called with closed stdin or stdout on some platforms:
+OS/2 kLIBC.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index 61c7f4f700e94da57b5a40b4cc25eb4365c2f55b..5cb35e4097f6acb93fffe9fb475c15fa20137f23 100644 (file)
@@ -1,6 +1,6 @@
 # popen.m4
-# serial 7
-dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
+# serial 8
+dnl Copyright (C) 2009-2025 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.
@@ -16,30 +16,38 @@ AC_DEFUN([gl_FUNC_POPEN],
     AC_CACHE_CHECK([whether popen works with closed stdin],
       [gl_cv_func_popen_works],
       [
-        AC_RUN_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[#include <stdio.h>]],
-             [[int result = 0;
-               FILE *child;
-               fclose (stdin);
-               fclose (stdout);
-               child = popen ("echo a", "r");
-               if (fgetc (child) != 'a')
-                 result |= 1;
-               if (pclose (child) != 0)
-                 result |= 2;
-               return result;
-             ]])],
-          [gl_cv_func_popen_works=yes],
-          [gl_cv_func_popen_works=no],
-          [case "$host_os" in
-                                # For now, only cygwin 1.5 or older is known to be broken.
-             cygwin*)           gl_cv_func_popen_works="guessing no" ;;
-                                # Guess yes on native Windows.
-             mingw* | windows*) gl_cv_func_popen_works="guessing yes" ;;
-             *)                 gl_cv_func_popen_works="guessing yes" ;;
-           esac
-          ])
+        case "$host_os" in
+          os2*)
+            # On OS/2 kLIBC, popen() with closed stdios hangs on.
+            gl_cv_func_popen_works="guessing no"
+            ;;
+          *)
+            AC_RUN_IFELSE(
+              [AC_LANG_PROGRAM(
+                 [[#include <stdio.h>]],
+                 [[int result = 0;
+                   FILE *child;
+                   fclose (stdin);
+                   fclose (stdout);
+                   child = popen ("echo a", "r");
+                   if (fgetc (child) != 'a')
+                     result |= 1;
+                   if (pclose (child) != 0)
+                     result |= 2;
+                   return result;
+                 ]])],
+              [gl_cv_func_popen_works=yes],
+              [gl_cv_func_popen_works=no],
+              [case "$host_os" in
+                                    # For now, only cygwin 1.5 or older is known to be broken.
+                 cygwin*)           gl_cv_func_popen_works="guessing no" ;;
+                                    # Guess yes on native Windows.
+                 mingw* | windows*) gl_cv_func_popen_works="guessing yes" ;;
+                 *)                 gl_cv_func_popen_works="guessing yes" ;;
+               esac
+              ])
+            ;;
+        esac
       ])
     case "$gl_cv_func_popen_works" in
       *yes) ;;