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