(linenum→info "unix/slp.c:2238")

glibc/2.7/libio/freopen64.c

    1: /* Copyright (C) 1993,1995,1996,1997,1998,2000,2001,2002, 2003
    2:    Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4: 
    5:    The GNU C Library is free software; you can redistribute it and/or
    6:    modify it under the terms of the GNU Lesser General Public
    7:    License as published by the Free Software Foundation; either
    8:    version 2.1 of the License, or (at your option) any later version.
    9: 
   10:    The GNU C Library is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13:    Lesser General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU Lesser General Public
   16:    License along with the GNU C Library; if not, write to the Free
   17:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   18:    02111-1307 USA.
   19: 
   20:    As a special exception, if you link the code in this file with
   21:    files compiled with a GNU compiler to produce an executable,
   22:    that does not cause the resulting executable to be covered by
   23:    the GNU Lesser General Public License.  This exception does not
   24:    however invalidate any other reasons why the executable file
   25:    might be covered by the GNU Lesser General Public License.
   26:    This exception applies to code released by its copyright holders
   27:    in files containing the exception.  */
   28: 
   29: #include "libioP.h"
   30: #include "stdio.h"
   31: #include <stdlib.h>
   32: 
   33: #include <fd_to_filename.h>
   34: 
   35: FILE *
   36: freopen64 (filename, mode, fp)
   37:      const char* filename;
   38:      const char* mode;
   39:      FILE *fp;
   40: {
   41: #ifdef _G_OPEN64
   42:   FILE *result;
   43:   int fd = -1;
   44:   CHECK_FILE (fp, NULL);
   45:   if (!(fp->_flags & _IO_IS_FILEBUF))
   46:     return NULL;
   47:   _IO_acquire_lock (fp);
   48:   if (filename == NULL && _IO_fileno (fp) >= 0)
   49:     {
   50:       fd = __dup (_IO_fileno (fp));
   51:       if (fd != -1)
   52:         filename = fd_to_filename (fd);
   53:     }
   54:   INTUSE(_IO_file_close_it) (fp);
   55:   _IO_JUMPS ((struct _IO_FILE_plus *) fp) = &_IO_file_jumps;
   56:   if (_IO_vtable_offset (fp) == 0 && fp->_wide_data != NULL)
   57:     fp->_wide_data->_wide_vtable = &_IO_wfile_jumps;
   58:   result = INTUSE(_IO_file_fopen) (fp, filename, mode, 0);
   59:   if (result != NULL)
   60:     result = __fopen_maybe_mmap (result);
   61:   if (result != NULL)
   62:     /* unbound stream orientation */
   63:     result->_mode = 0;
   64:   if (fd != -1)
   65:     {
   66:       __close (fd);
   67:       if (filename != NULL)
   68:         free ((char *) filename);
   69:     }
   70:   _IO_release_lock (fp);
   71:   return result;
   72: #else
   73:   __set_errno (ENOSYS);
   74:   return NULL;
   75: #endif
   76: }
Syntax (Markdown)