]> 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>
Mon, 10 Feb 2025 15:29:11 +0000 (16:29 +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 13b0383c40519557b201a914cabfc0a867d18a26..dabace1a4ba60c38bf425f20129df69c277a05bc 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-10  Bruno Haible  <bruno@clisp.org>
 
        mbsstr, unistr, unigbrk: Support library namespacing.
index c5e4067baa7c4d14ef8342b2f0b30ffec41e72c5..9e86542d91bf960f45b92050ec01ea5f4186fc16 100644 (file)
@@ -16,6 +16,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 a68c1e606f823930131adfde359479b9f7ca3427..a0f2ee7812955b6c998aaaf5a6633bbcb7f411f6 100644 (file)
@@ -1,5 +1,5 @@
 # popen.m4
-# serial 7
+# 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,
@@ -17,30 +17,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) ;;