From bd16142e55babe52d0d082174ca147f2e5bd056d Mon Sep 17 00:00:00 2001 From: KO Myung-Hun Date: Wed, 3 Sep 2014 20:47:02 +0900 Subject: [PATCH] freopen: workaround freopen() on OS/2 kLIBC On OS/2 kLIBC, freopen() returns NULL even if it is successful if filename is NULL. * lib/freopen.c (orig_freopen): Workaround. * m4/freopen.m4: Add os2* case. --- lib/freopen.c | 18 +++++++++++++++++- m4/freopen.m4 | 4 ++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/freopen.c b/lib/freopen.c index 384eba6..953fe1a 100644 --- a/lib/freopen.c +++ b/lib/freopen.c @@ -26,10 +26,26 @@ #include #undef __need_FILE +#include + static FILE * orig_freopen (const char *filename, const char *mode, FILE *stream) { - return freopen (filename, mode, stream); + FILE *result; + + /* Clear errno to check the success of freopen() with it */ + errno = 0; + + result = freopen (filename, mode, stream); + +#ifdef __KLIBC__ + /* On OS/2 kLIBC, freopen() returns NULL even if it is successful + if filename is NULL. */ + if (!filename && !result && !errno) + result = stream; +#endif + + return result; } /* Specification. */ diff --git a/m4/freopen.m4 b/m4/freopen.m4 index 69e4523..cc53f9c 100644 --- a/m4/freopen.m4 +++ b/m4/freopen.m4 @@ -1,4 +1,4 @@ -# freopen.m4 serial 4 +# freopen.m4 serial 5 dnl Copyright (C) 2007-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -9,7 +9,7 @@ AC_DEFUN([gl_FUNC_FREOPEN], AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in - mingw* | pw*) + mingw* | pw* | os2*) REPLACE_FREOPEN=1 ;; esac -- 1.8.5.2