2014-12-08 KO Myung-Hun <komh78@gmail.com>
+ freopen: workaround freopen() on OS/2 kLIBC
+ * lib/freopen.c (rpl_freopen): Workaround.
+ * m4/freopen.m4: Add os2* case.
+
get_shared_library_fullname: port to EMX
* lib/relocatable.c: Define strcmp and strncmp to stricmp and strnicmp
on EMX, respectively.
#include <stdio.h>
#undef __need_FILE
+#include <errno.h>
+
static FILE *
orig_freopen (const char *filename, const char *mode, FILE *stream)
{
FILE *
rpl_freopen (const char *filename, const char *mode, FILE *stream)
{
+ FILE *result;
+
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
if (filename != NULL && strcmp (filename, "/dev/null") == 0)
filename = "NUL";
#endif
- return orig_freopen (filename, mode, stream);
+ /* Clear errno to check the success of freopen() with it */
+ errno = 0;
+
+ result = orig_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;
}
-# 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,
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
case "$host_os" in
- mingw* | pw*)
+ mingw* | pw* | os2*)
REPLACE_FREOPEN=1
;;
esac