1
0
mirror of https://https.git.savannah.gnu.org/git/gnulib.git synced 2026-05-13 15:13:36 +00:00

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
This commit is contained in:
KO Myung-Hun
2025-02-10 20:35:00 +09:00
committed by Bruno Haible
parent 4d18fa815a
commit 39ed3d9cb6
3 changed files with 43 additions and 25 deletions

View File

@@ -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.

View 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:

View 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) ;;