Back to index

glibc  2.9
freopen.c File Reference
#include "libioP.h"
#include "stdio.h"
#include <stdlib.h>
#include <shlib-compat.h>
#include <fd_to_filename.h>

Go to the source code of this file.


FILEfreopen (char *filename, const char *mode, FILE *fp) const

Function Documentation

FILE* freopen ( char*  filename,
const char*  mode,
FILE fp 
) const

Definition at line 37 of file freopen.c.

  FILE *result;
  int fd = -1;
  if (!(fp->_flags & _IO_IS_FILEBUF))
    return NULL;
  _IO_acquire_lock (fp);
  if (filename == NULL && _IO_fileno (fp) >= 0)
      fd = __dup (_IO_fileno (fp));
      if (fd != -1)
       filename = fd_to_filename (fd);
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
  if (&_IO_stdin_used == NULL)
      /* If the shared C library is used by the application binary which
        was linked against the older version of libio, we just use the
        older one even for internal use to avoid trouble since a pointer
        to the old libio may be passed into shared C library and wind
        up here. */
      _IO_old_file_close_it (fp);
      _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_old_file_jumps;
      result = _IO_old_file_fopen (fp, filename, mode);
      INTUSE(_IO_file_close_it) (fp);
      _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
      if (_IO_vtable_offset (fp) == 0 && fp->_wide_data != NULL)
       fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
      result = INTUSE(_IO_file_fopen) (fp, filename, mode, 1);
      if (result != NULL)
       result = __fopen_maybe_mmap (result);
  if (result != NULL)
    /* unbound stream orientation */
    result->_mode = 0;
  if (fd != -1)
      __close (fd);
      free ((char *) filename);
  _IO_release_lock (fp);
  return result;

Here is the call graph for this function:

Here is the caller graph for this function: