Esempio n. 1
0
FILE *
rpl_freopen (const char *filename, const char *mode, FILE *stream)
{
  FILE *result;
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
  char const *null_device = "NUL";
  if (filename && strcmp (filename, "/dev/null") == 0)
    filename = null_device;
#else
  char const *null_device = "/dev/null";
#endif

#ifdef __KLIBC__
  errno = 0;
#endif

  result = orig_freopen (filename, mode, stream);

  if (!result)
    {
#ifdef __KLIBC__
      /* On OS/2 kLIBC, freopen returns NULL even if it is successful
         if filename is NULL. */
      if (!filename && !errno)
        result = stream;
#endif
    }
  else if (filename)
    {
      int fd = fileno (result);
      if (dup2 (fd, fd) < 0 && errno == EBADF)
        {
          int nullfd = open (null_device, O_RDONLY | O_CLOEXEC);
          int err = 0;
          if (nullfd != fd)
            {
              if (dup2 (nullfd, fd) < 0)
                err = 1;
              close (nullfd);
            }
          if (!err)
            result = orig_freopen (filename, mode, result);
        }
    }

  return result;
}
Esempio n. 2
0
FILE *
rpl_freopen (const char *filename, const char *mode, FILE *stream)
{
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
  if (filename != NULL && strcmp (filename, "/dev/null") == 0)
    filename = "NUL";
#endif

  return orig_freopen (filename, mode, stream);
}
Esempio n. 3
0
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

  /* 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;
}
Esempio n. 4
0
FILE * freopen ( const char *path, const char *mode, FILE * stream ) {
    enforcer(path);

    return orig_freopen(path, mode, stream);
}