KO Myung-Hun wrote:
> --- a/lib/freopen.c
> +++ b/lib/freopen.c
> @@ -26,10 +26,26 @@
>  #include <stdio.h>
>  #undef __need_FILE
>  
> +#include <errno.h>
> +
>  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.  */

Just a question of coding style: We have a chain of invocations
  rpl_freopen -> orig_freopen -> freopen
While, in theory, you can put workarounds in either rpl_freopen or orig_freopen,
the function name 'orig_freopen' and the comment
  /* Get the original definition of freopen.
indicate that 'orig_freopen' should remain a simple invocation of freopen,
and the workaround should go into rpl_freopen. This is the canonical way we've
been using in gnulib (see fopen.c, fstat.c, lstat.c, open.c, openat.c etc.).
I see no reason to abandon this convention.

Bruno


Reply via email to