From: KO Myung-Hun Date: Mon, 10 Feb 2025 11:35:00 +0000 (+0900) Subject: popen: Set gl_cv_func_popen_works to "guessing no" on OS/2. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=5edf567377fa04691d685a887f768d3f459546e8;p=gnulib.git 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. Copyright-paperwork-exempt: Yes --- diff --git a/ChangeLog b/ChangeLog index b846243703..0ded0017b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2025-02-10 KO Myung-Hun + + 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 gnulib-tool: Apply libgnu.{,l}a specific CFLAGS to all its object files. diff --git a/doc/posix-functions/popen.texi b/doc/posix-functions/popen.texi index 462e5e5c2b..e1cdac3396 100644 --- a/doc/posix-functions/popen.texi +++ b/doc/posix-functions/popen.texi @@ -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: diff --git a/m4/popen.m4 b/m4/popen.m4 index 61c7f4f700..5cb35e4097 100644 --- a/m4/popen.m4 +++ b/m4/popen.m4 @@ -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 ]], - [[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 ]], + [[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) ;;