Blame libio/libioP.h

Packit Service 82fcde
/* Copyright (C) 1993-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.
Packit Service 82fcde
Packit Service 82fcde
   As a special exception, if you link the code in this file with
Packit Service 82fcde
   files compiled with a GNU compiler to produce an executable,
Packit Service 82fcde
   that does not cause the resulting executable to be covered by
Packit Service 82fcde
   the GNU Lesser General Public License.  This exception does not
Packit Service 82fcde
   however invalidate any other reasons why the executable file
Packit Service 82fcde
   might be covered by the GNU Lesser General Public License.
Packit Service 82fcde
   This exception applies to code released by its copyright holders
Packit Service 82fcde
   in files containing the exception.  */
Packit Service 82fcde
Packit Service 82fcde
/* NOTE: libio is now exclusively used only by glibc since libstdc++ has its
Packit Service 82fcde
   own implementation.  As a result, functions that were implemented for C++
Packit Service 82fcde
   (like *sputn) may no longer have C++ semantics.  This is of course only
Packit Service 82fcde
   relevant for internal callers of these functions since these functions are
Packit Service 82fcde
   not intended for external use otherwise.
Packit Service 82fcde
Packit Service 82fcde
   FIXME: All of the C++ cruft eventually needs to go away.  */
Packit Service 82fcde
Packit Service 82fcde
#ifndef _LIBIOP_H
Packit Service 82fcde
#define _LIBIOP_H 1
Packit Service 82fcde
Packit Service 82fcde
#include <stddef.h>
Packit Service 82fcde
Packit Service 82fcde
#include <errno.h>
Packit Service 82fcde
#include <libc-lock.h>
Packit Service 82fcde
Packit Service 82fcde
#include <math_ldbl_opt.h>
Packit Service 82fcde
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <libio/libio.h>
Packit Service 82fcde
#include "iolibio.h"
Packit Service 82fcde
Packit Service 82fcde
#include <shlib-compat.h>
Packit Service 82fcde
Packit Service 82fcde
/* For historical reasons this is the name of the sysdeps header that
Packit Service 82fcde
   adjusts the libio configuration.  */
Packit Service 82fcde
#include <_G_config.h>
Packit Service 82fcde
Packit Service 82fcde
#define _IO_seek_set 0
Packit Service 82fcde
#define _IO_seek_cur 1
Packit Service 82fcde
#define _IO_seek_end 2
Packit Service 82fcde
Packit Service 82fcde
/* THE JUMPTABLE FUNCTIONS.
Packit Service 82fcde
Packit Service 82fcde
 * The _IO_FILE type is used to implement the FILE type in GNU libc,
Packit Service 82fcde
 * as well as the streambuf class in GNU iostreams for C++.
Packit Service 82fcde
 * These are all the same, just used differently.
Packit Service 82fcde
 * An _IO_FILE (or FILE) object is allows followed by a pointer to
Packit Service 82fcde
 * a jump table (of pointers to functions).  The pointer is accessed
Packit Service 82fcde
 * with the _IO_JUMPS macro.  The jump table has an eccentric format,
Packit Service 82fcde
 * so as to be compatible with the layout of a C++ virtual function table.
Packit Service 82fcde
 * (as implemented by g++).  When a pointer to a streambuf object is
Packit Service 82fcde
 * coerced to an (FILE*), then _IO_JUMPS on the result just
Packit Service 82fcde
 * happens to point to the virtual function table of the streambuf.
Packit Service 82fcde
 * Thus the _IO_JUMPS function table used for C stdio/libio does
Packit Service 82fcde
 * double duty as the virtual function table for C++ streambuf.
Packit Service 82fcde
 *
Packit Service 82fcde
 * The entries in the _IO_JUMPS function table (and hence also the
Packit Service 82fcde
 * virtual functions of a streambuf) are described below.
Packit Service 82fcde
 * The first parameter of each function entry is the _IO_FILE/streambuf
Packit Service 82fcde
 * object being acted on (i.e. the 'this' parameter).
Packit Service 82fcde
 */
Packit Service 82fcde
Packit Service 82fcde
/* Setting this macro to 1 enables the use of the _vtable_offset bias
Packit Service 82fcde
   in _IO_JUMPS_FUNCS, below.  This is only needed for new-format
Packit Service 82fcde
   _IO_FILE in libc that must support old binaries (see oldfileops.c).  */
Packit Service 82fcde
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) && !defined _IO_USE_OLD_IO_FILE
Packit Service 82fcde
# define _IO_JUMPS_OFFSET 1
Packit Service 82fcde
#else
Packit Service 82fcde
# define _IO_JUMPS_OFFSET 0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Type of MEMBER in struct type TYPE.  */
Packit Service 82fcde
#define _IO_MEMBER_TYPE(TYPE, MEMBER) __typeof__ (((TYPE){}).MEMBER)
Packit Service 82fcde
Packit Service 82fcde
/* Essentially ((TYPE *) THIS)->MEMBER, but avoiding the aliasing
Packit Service 82fcde
   violation in case THIS has a different pointer type.  */
Packit Service 82fcde
#define _IO_CAST_FIELD_ACCESS(THIS, TYPE, MEMBER) \
Packit Service 82fcde
  (*(_IO_MEMBER_TYPE (TYPE, MEMBER) *)(((char *) (THIS)) \
Packit Service 82fcde
				       + offsetof(TYPE, MEMBER)))
Packit Service 82fcde
Packit Service 82fcde
#define _IO_JUMPS(THIS) (THIS)->vtable
Packit Service 82fcde
#define _IO_JUMPS_FILE_plus(THIS) \
Packit Service 82fcde
  _IO_CAST_FIELD_ACCESS ((THIS), struct _IO_FILE_plus, vtable)
Packit Service 82fcde
#define _IO_WIDE_JUMPS(THIS) \
Packit Service 82fcde
  _IO_CAST_FIELD_ACCESS ((THIS), struct _IO_FILE, _wide_data)->_wide_vtable
Packit Service 82fcde
#define _IO_CHECK_WIDE(THIS) \
Packit Service 82fcde
  (_IO_CAST_FIELD_ACCESS ((THIS), struct _IO_FILE, _wide_data) != NULL)
Packit Service 82fcde
Packit Service 82fcde
#if _IO_JUMPS_OFFSET
Packit Service 82fcde
# define _IO_JUMPS_FUNC(THIS) \
Packit Service 82fcde
  (IO_validate_vtable                                                   \
Packit Service 82fcde
   (*(struct _IO_jump_t **) ((void *) &_IO_JUMPS_FILE_plus (THIS)	\
Packit Service 82fcde
			     + (THIS)->_vtable_offset)))
Packit Service 82fcde
# define _IO_vtable_offset(THIS) (THIS)->_vtable_offset
Packit Service 82fcde
#else
Packit Service 82fcde
# define _IO_JUMPS_FUNC(THIS) (IO_validate_vtable (_IO_JUMPS_FILE_plus (THIS)))
Packit Service 82fcde
# define _IO_vtable_offset(THIS) 0
Packit Service 82fcde
#endif
Packit Service 82fcde
#define _IO_WIDE_JUMPS_FUNC(THIS) _IO_WIDE_JUMPS(THIS)
Packit Service 82fcde
#define JUMP_FIELD(TYPE, NAME) TYPE NAME
Packit Service 82fcde
#define JUMP0(FUNC, THIS) (_IO_JUMPS_FUNC(THIS)->FUNC) (THIS)
Packit Service 82fcde
#define JUMP1(FUNC, THIS, X1) (_IO_JUMPS_FUNC(THIS)->FUNC) (THIS, X1)
Packit Service 82fcde
#define JUMP2(FUNC, THIS, X1, X2) (_IO_JUMPS_FUNC(THIS)->FUNC) (THIS, X1, X2)
Packit Service 82fcde
#define JUMP3(FUNC, THIS, X1,X2,X3) (_IO_JUMPS_FUNC(THIS)->FUNC) (THIS, X1,X2, X3)
Packit Service 82fcde
#define JUMP_INIT(NAME, VALUE) VALUE
Packit Service 82fcde
#define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0), JUMP_INIT (dummy2, 0)
Packit Service 82fcde
Packit Service 82fcde
#define WJUMP0(FUNC, THIS) (_IO_WIDE_JUMPS_FUNC(THIS)->FUNC) (THIS)
Packit Service 82fcde
#define WJUMP1(FUNC, THIS, X1) (_IO_WIDE_JUMPS_FUNC(THIS)->FUNC) (THIS, X1)
Packit Service 82fcde
#define WJUMP2(FUNC, THIS, X1, X2) (_IO_WIDE_JUMPS_FUNC(THIS)->FUNC) (THIS, X1, X2)
Packit Service 82fcde
#define WJUMP3(FUNC, THIS, X1,X2,X3) (_IO_WIDE_JUMPS_FUNC(THIS)->FUNC) (THIS, X1,X2, X3)
Packit Service 82fcde
Packit Service 82fcde
/* The 'finish' function does any final cleaning up of an _IO_FILE object.
Packit Service 82fcde
   It does not delete (free) it, but does everything else to finalize it.
Packit Service 82fcde
   It matches the streambuf::~streambuf virtual destructor.  */
Packit Service 82fcde
typedef void (*_IO_finish_t) (FILE *, int); /* finalize */
Packit Service 82fcde
#define _IO_FINISH(FP) JUMP1 (__finish, FP, 0)
Packit Service 82fcde
#define _IO_WFINISH(FP) WJUMP1 (__finish, FP, 0)
Packit Service 82fcde
Packit Service 82fcde
/* The 'overflow' hook flushes the buffer.
Packit Service 82fcde
   The second argument is a character, or EOF.
Packit Service 82fcde
   It matches the streambuf::overflow virtual function. */
Packit Service 82fcde
typedef int (*_IO_overflow_t) (FILE *, int);
Packit Service 82fcde
#define _IO_OVERFLOW(FP, CH) JUMP1 (__overflow, FP, CH)
Packit Service 82fcde
#define _IO_WOVERFLOW(FP, CH) WJUMP1 (__overflow, FP, CH)
Packit Service 82fcde
Packit Service 82fcde
/* The 'underflow' hook tries to fills the get buffer.
Packit Service 82fcde
   It returns the next character (as an unsigned char) or EOF.  The next
Packit Service 82fcde
   character remains in the get buffer, and the get position is not changed.
Packit Service 82fcde
   It matches the streambuf::underflow virtual function. */
Packit Service 82fcde
typedef int (*_IO_underflow_t) (FILE *);
Packit Service 82fcde
#define _IO_UNDERFLOW(FP) JUMP0 (__underflow, FP)
Packit Service 82fcde
#define _IO_WUNDERFLOW(FP) WJUMP0 (__underflow, FP)
Packit Service 82fcde
Packit Service 82fcde
/* The 'uflow' hook returns the next character in the input stream
Packit Service 82fcde
   (cast to unsigned char), and increments the read position;
Packit Service 82fcde
   EOF is returned on failure.
Packit Service 82fcde
   It matches the streambuf::uflow virtual function, which is not in the
Packit Service 82fcde
   cfront implementation, but was added to C++ by the ANSI/ISO committee. */
Packit Service 82fcde
#define _IO_UFLOW(FP) JUMP0 (__uflow, FP)
Packit Service 82fcde
#define _IO_WUFLOW(FP) WJUMP0 (__uflow, FP)
Packit Service 82fcde
Packit Service 82fcde
/* The 'pbackfail' hook handles backing up.
Packit Service 82fcde
   It matches the streambuf::pbackfail virtual function. */
Packit Service 82fcde
typedef int (*_IO_pbackfail_t) (FILE *, int);
Packit Service 82fcde
#define _IO_PBACKFAIL(FP, CH) JUMP1 (__pbackfail, FP, CH)
Packit Service 82fcde
#define _IO_WPBACKFAIL(FP, CH) WJUMP1 (__pbackfail, FP, CH)
Packit Service 82fcde
Packit Service 82fcde
/* The 'xsputn' hook writes upto N characters from buffer DATA.
Packit Service 82fcde
   Returns EOF or the number of character actually written.
Packit Service 82fcde
   It matches the streambuf::xsputn virtual function. */
Packit Service 82fcde
typedef size_t (*_IO_xsputn_t) (FILE *FP, const void *DATA,
Packit Service 82fcde
				    size_t N);
Packit Service 82fcde
#define _IO_XSPUTN(FP, DATA, N) JUMP2 (__xsputn, FP, DATA, N)
Packit Service 82fcde
#define _IO_WXSPUTN(FP, DATA, N) WJUMP2 (__xsputn, FP, DATA, N)
Packit Service 82fcde
Packit Service 82fcde
/* The 'xsgetn' hook reads upto N characters into buffer DATA.
Packit Service 82fcde
   Returns the number of character actually read.
Packit Service 82fcde
   It matches the streambuf::xsgetn virtual function. */
Packit Service 82fcde
typedef size_t (*_IO_xsgetn_t) (FILE *FP, void *DATA, size_t N);
Packit Service 82fcde
#define _IO_XSGETN(FP, DATA, N) JUMP2 (__xsgetn, FP, DATA, N)
Packit Service 82fcde
#define _IO_WXSGETN(FP, DATA, N) WJUMP2 (__xsgetn, FP, DATA, N)
Packit Service 82fcde
Packit Service 82fcde
/* The 'seekoff' hook moves the stream position to a new position
Packit Service 82fcde
   relative to the start of the file (if DIR==0), the current position
Packit Service 82fcde
   (MODE==1), or the end of the file (MODE==2).
Packit Service 82fcde
   It matches the streambuf::seekoff virtual function.
Packit Service 82fcde
   It is also used for the ANSI fseek function. */
Packit Service 82fcde
typedef off64_t (*_IO_seekoff_t) (FILE *FP, off64_t OFF, int DIR,
Packit Service 82fcde
				      int MODE);
Packit Service 82fcde
#define _IO_SEEKOFF(FP, OFF, DIR, MODE) JUMP3 (__seekoff, FP, OFF, DIR, MODE)
Packit Service 82fcde
#define _IO_WSEEKOFF(FP, OFF, DIR, MODE) WJUMP3 (__seekoff, FP, OFF, DIR, MODE)
Packit Service 82fcde
Packit Service 82fcde
/* The 'seekpos' hook also moves the stream position,
Packit Service 82fcde
   but to an absolute position given by a fpos64_t (seekpos).
Packit Service 82fcde
   It matches the streambuf::seekpos virtual function.
Packit Service 82fcde
   It is also used for the ANSI fgetpos and fsetpos functions.  */
Packit Service 82fcde
/* The _IO_seek_cur and _IO_seek_end options are not allowed. */
Packit Service 82fcde
typedef off64_t (*_IO_seekpos_t) (FILE *, off64_t, int);
Packit Service 82fcde
#define _IO_SEEKPOS(FP, POS, FLAGS) JUMP2 (__seekpos, FP, POS, FLAGS)
Packit Service 82fcde
#define _IO_WSEEKPOS(FP, POS, FLAGS) WJUMP2 (__seekpos, FP, POS, FLAGS)
Packit Service 82fcde
Packit Service 82fcde
/* The 'setbuf' hook gives a buffer to the file.
Packit Service 82fcde
   It matches the streambuf::setbuf virtual function. */
Packit Service 82fcde
typedef FILE* (*_IO_setbuf_t) (FILE *, char *, ssize_t);
Packit Service 82fcde
#define _IO_SETBUF(FP, BUFFER, LENGTH) JUMP2 (__setbuf, FP, BUFFER, LENGTH)
Packit Service 82fcde
#define _IO_WSETBUF(FP, BUFFER, LENGTH) WJUMP2 (__setbuf, FP, BUFFER, LENGTH)
Packit Service 82fcde
Packit Service 82fcde
/* The 'sync' hook attempts to synchronize the internal data structures
Packit Service 82fcde
   of the file with the external state.
Packit Service 82fcde
   It matches the streambuf::sync virtual function. */
Packit Service 82fcde
typedef int (*_IO_sync_t) (FILE *);
Packit Service 82fcde
#define _IO_SYNC(FP) JUMP0 (__sync, FP)
Packit Service 82fcde
#define _IO_WSYNC(FP) WJUMP0 (__sync, FP)
Packit Service 82fcde
Packit Service 82fcde
/* The 'doallocate' hook is used to tell the file to allocate a buffer.
Packit Service 82fcde
   It matches the streambuf::doallocate virtual function, which is not
Packit Service 82fcde
   in the ANSI/ISO C++ standard, but is part traditional implementations. */
Packit Service 82fcde
typedef int (*_IO_doallocate_t) (FILE *);
Packit Service 82fcde
#define _IO_DOALLOCATE(FP) JUMP0 (__doallocate, FP)
Packit Service 82fcde
#define _IO_WDOALLOCATE(FP) WJUMP0 (__doallocate, FP)
Packit Service 82fcde
Packit Service 82fcde
/* The following four hooks (sysread, syswrite, sysclose, sysseek, and
Packit Service 82fcde
   sysstat) are low-level hooks specific to this implementation.
Packit Service 82fcde
   There is no correspondence in the ANSI/ISO C++ standard library.
Packit Service 82fcde
   The hooks basically correspond to the Unix system functions
Packit Service 82fcde
   (read, write, close, lseek, and stat) except that a FILE*
Packit Service 82fcde
   parameter is used instead of an integer file descriptor;  the default
Packit Service 82fcde
   implementation used for normal files just calls those functions.
Packit Service 82fcde
   The advantage of overriding these functions instead of the higher-level
Packit Service 82fcde
   ones (underflow, overflow etc) is that you can leave all the buffering
Packit Service 82fcde
   higher-level functions.  */
Packit Service 82fcde
Packit Service 82fcde
/* The 'sysread' hook is used to read data from the external file into
Packit Service 82fcde
   an existing buffer.  It generalizes the Unix read(2) function.
Packit Service 82fcde
   It matches the streambuf::sys_read virtual function, which is
Packit Service 82fcde
   specific to this implementation. */
Packit Service 82fcde
typedef ssize_t (*_IO_read_t) (FILE *, void *, ssize_t);
Packit Service 82fcde
#define _IO_SYSREAD(FP, DATA, LEN) JUMP2 (__read, FP, DATA, LEN)
Packit Service 82fcde
#define _IO_WSYSREAD(FP, DATA, LEN) WJUMP2 (__read, FP, DATA, LEN)
Packit Service 82fcde
Packit Service 82fcde
/* The 'syswrite' hook is used to write data from an existing buffer
Packit Service 82fcde
   to an external file.  It generalizes the Unix write(2) function.
Packit Service 82fcde
   It matches the streambuf::sys_write virtual function, which is
Packit Service 82fcde
   specific to this implementation. */
Packit Service 82fcde
typedef ssize_t (*_IO_write_t) (FILE *, const void *, ssize_t);
Packit Service 82fcde
#define _IO_SYSWRITE(FP, DATA, LEN) JUMP2 (__write, FP, DATA, LEN)
Packit Service 82fcde
#define _IO_WSYSWRITE(FP, DATA, LEN) WJUMP2 (__write, FP, DATA, LEN)
Packit Service 82fcde
Packit Service 82fcde
/* The 'sysseek' hook is used to re-position an external file.
Packit Service 82fcde
   It generalizes the Unix lseek(2) function.
Packit Service 82fcde
   It matches the streambuf::sys_seek virtual function, which is
Packit Service 82fcde
   specific to this implementation. */
Packit Service 82fcde
typedef off64_t (*_IO_seek_t) (FILE *, off64_t, int);
Packit Service 82fcde
#define _IO_SYSSEEK(FP, OFFSET, MODE) JUMP2 (__seek, FP, OFFSET, MODE)
Packit Service 82fcde
#define _IO_WSYSSEEK(FP, OFFSET, MODE) WJUMP2 (__seek, FP, OFFSET, MODE)
Packit Service 82fcde
Packit Service 82fcde
/* The 'sysclose' hook is used to finalize (close, finish up) an
Packit Service 82fcde
   external file.  It generalizes the Unix close(2) function.
Packit Service 82fcde
   It matches the streambuf::sys_close virtual function, which is
Packit Service 82fcde
   specific to this implementation. */
Packit Service 82fcde
typedef int (*_IO_close_t) (FILE *); /* finalize */
Packit Service 82fcde
#define _IO_SYSCLOSE(FP) JUMP0 (__close, FP)
Packit Service 82fcde
#define _IO_WSYSCLOSE(FP) WJUMP0 (__close, FP)
Packit Service 82fcde
Packit Service 82fcde
/* The 'sysstat' hook is used to get information about an external file
Packit Service 82fcde
   into a struct stat buffer.  It generalizes the Unix fstat(2) call.
Packit Service 82fcde
   It matches the streambuf::sys_stat virtual function, which is
Packit Service 82fcde
   specific to this implementation. */
Packit Service 82fcde
typedef int (*_IO_stat_t) (FILE *, void *);
Packit Service 82fcde
#define _IO_SYSSTAT(FP, BUF) JUMP1 (__stat, FP, BUF)
Packit Service 82fcde
#define _IO_WSYSSTAT(FP, BUF) WJUMP1 (__stat, FP, BUF)
Packit Service 82fcde
Packit Service 82fcde
/* The 'showmany' hook can be used to get an image how much input is
Packit Service 82fcde
   available.  In many cases the answer will be 0 which means unknown
Packit Service 82fcde
   but some cases one can provide real information.  */
Packit Service 82fcde
typedef int (*_IO_showmanyc_t) (FILE *);
Packit Service 82fcde
#define _IO_SHOWMANYC(FP) JUMP0 (__showmanyc, FP)
Packit Service 82fcde
#define _IO_WSHOWMANYC(FP) WJUMP0 (__showmanyc, FP)
Packit Service 82fcde
Packit Service 82fcde
/* The 'imbue' hook is used to get information about the currently
Packit Service 82fcde
   installed locales.  */
Packit Service 82fcde
typedef void (*_IO_imbue_t) (FILE *, void *);
Packit Service 82fcde
#define _IO_IMBUE(FP, LOCALE) JUMP1 (__imbue, FP, LOCALE)
Packit Service 82fcde
#define _IO_WIMBUE(FP, LOCALE) WJUMP1 (__imbue, FP, LOCALE)
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#define _IO_CHAR_TYPE char /* unsigned char ? */
Packit Service 82fcde
#define _IO_INT_TYPE int
Packit Service 82fcde
Packit Service 82fcde
struct _IO_jump_t
Packit Service 82fcde
{
Packit Service 82fcde
    JUMP_FIELD(size_t, __dummy);
Packit Service 82fcde
    JUMP_FIELD(size_t, __dummy2);
Packit Service 82fcde
    JUMP_FIELD(_IO_finish_t, __finish);
Packit Service 82fcde
    JUMP_FIELD(_IO_overflow_t, __overflow);
Packit Service 82fcde
    JUMP_FIELD(_IO_underflow_t, __underflow);
Packit Service 82fcde
    JUMP_FIELD(_IO_underflow_t, __uflow);
Packit Service 82fcde
    JUMP_FIELD(_IO_pbackfail_t, __pbackfail);
Packit Service 82fcde
    /* showmany */
Packit Service 82fcde
    JUMP_FIELD(_IO_xsputn_t, __xsputn);
Packit Service 82fcde
    JUMP_FIELD(_IO_xsgetn_t, __xsgetn);
Packit Service 82fcde
    JUMP_FIELD(_IO_seekoff_t, __seekoff);
Packit Service 82fcde
    JUMP_FIELD(_IO_seekpos_t, __seekpos);
Packit Service 82fcde
    JUMP_FIELD(_IO_setbuf_t, __setbuf);
Packit Service 82fcde
    JUMP_FIELD(_IO_sync_t, __sync);
Packit Service 82fcde
    JUMP_FIELD(_IO_doallocate_t, __doallocate);
Packit Service 82fcde
    JUMP_FIELD(_IO_read_t, __read);
Packit Service 82fcde
    JUMP_FIELD(_IO_write_t, __write);
Packit Service 82fcde
    JUMP_FIELD(_IO_seek_t, __seek);
Packit Service 82fcde
    JUMP_FIELD(_IO_close_t, __close);
Packit Service 82fcde
    JUMP_FIELD(_IO_stat_t, __stat);
Packit Service 82fcde
    JUMP_FIELD(_IO_showmanyc_t, __showmanyc);
Packit Service 82fcde
    JUMP_FIELD(_IO_imbue_t, __imbue);
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
/* We always allocate an extra word following an _IO_FILE.
Packit Service 82fcde
   This contains a pointer to the function jump table used.
Packit Service 82fcde
   This is for compatibility with C++ streambuf; the word can
Packit Service 82fcde
   be used to smash to a pointer to a virtual function table. */
Packit Service 82fcde
Packit Service 82fcde
struct _IO_FILE_plus
Packit Service 82fcde
{
Packit Service 82fcde
  FILE file;
Packit Service 82fcde
  const struct _IO_jump_t *vtable;
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
#ifdef _IO_USE_OLD_IO_FILE
Packit Service 82fcde
/* This structure is used by the compatibility code as if it were an
Packit Service 82fcde
   _IO_FILE_plus, but has enough space to initialize the _mode argument
Packit Service 82fcde
   of an _IO_FILE_complete.  */
Packit Service 82fcde
struct _IO_FILE_complete_plus
Packit Service 82fcde
{
Packit Service 82fcde
  struct _IO_FILE_complete file;
Packit Service 82fcde
  const struct _IO_jump_t *vtable;
Packit Service 82fcde
};
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Special file type for fopencookie function.  */
Packit Service 82fcde
struct _IO_cookie_file
Packit Service 82fcde
{
Packit Service 82fcde
  struct _IO_FILE_plus __fp;
Packit Service 82fcde
  void *__cookie;
Packit Service 82fcde
  cookie_io_functions_t __io_functions;
Packit Service 82fcde
};
Packit Service 82fcde
Packit Service 82fcde
FILE *_IO_fopencookie (void *cookie, const char *mode,
Packit Service 82fcde
                       cookie_io_functions_t io_functions);
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
/* Iterator type for walking global linked list of _IO_FILE objects. */
Packit Service 82fcde
Packit Service 82fcde
typedef FILE *_IO_ITER;
Packit Service 82fcde
Packit Service 82fcde
/* Generic functions */
Packit Service 82fcde
Packit Service 82fcde
extern void _IO_switch_to_main_get_area (FILE *) __THROW;
Packit Service 82fcde
extern void _IO_switch_to_backup_area (FILE *) __THROW;
Packit Service 82fcde
extern int _IO_switch_to_get_mode (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_switch_to_get_mode)
Packit Service 82fcde
extern void _IO_init_internal (FILE *, int) attribute_hidden;
Packit Service 82fcde
extern int _IO_sputbackc (FILE *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_sputbackc)
Packit Service 82fcde
extern int _IO_sungetc (FILE *) __THROW;
Packit Service 82fcde
extern void _IO_un_link (struct _IO_FILE_plus *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_un_link)
Packit Service 82fcde
extern void _IO_link_in (struct _IO_FILE_plus *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_link_in)
Packit Service 82fcde
extern void _IO_doallocbuf (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_doallocbuf)
Packit Service 82fcde
extern void _IO_unsave_markers (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_unsave_markers)
Packit Service 82fcde
extern void _IO_setb (FILE *, char *, char *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_setb)
Packit Service 82fcde
extern unsigned _IO_adjust_column (unsigned, const char *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_adjust_column)
Packit Service 82fcde
#define _IO_sputn(__fp, __s, __n) _IO_XSPUTN (__fp, __s, __n)
Packit Service 82fcde
Packit Service 82fcde
ssize_t _IO_least_wmarker (FILE *, wchar_t *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_least_wmarker)
Packit Service 82fcde
extern void _IO_switch_to_main_wget_area (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_switch_to_main_wget_area)
Packit Service 82fcde
extern void _IO_switch_to_wbackup_area (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_switch_to_wbackup_area)
Packit Service 82fcde
extern int _IO_switch_to_wget_mode (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_switch_to_wget_mode)
Packit Service 82fcde
extern void _IO_wsetb (FILE *, wchar_t *, wchar_t *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_wsetb)
Packit Service 82fcde
extern wint_t _IO_sputbackwc (FILE *, wint_t) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_sputbackwc)
Packit Service 82fcde
extern wint_t _IO_sungetwc (FILE *) __THROW;
Packit Service 82fcde
extern void _IO_wdoallocbuf (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_wdoallocbuf)
Packit Service 82fcde
extern void _IO_unsave_wmarkers (FILE *) __THROW;
Packit Service 82fcde
extern unsigned _IO_adjust_wcolumn (unsigned, const wchar_t *, int) __THROW;
Packit Service 82fcde
extern off64_t get_file_offset (FILE *fp);
Packit Service 82fcde
Packit Service 82fcde
/* Marker-related function. */
Packit Service 82fcde
Packit Service 82fcde
extern void _IO_init_marker (struct _IO_marker *, FILE *);
Packit Service 82fcde
extern void _IO_init_wmarker (struct _IO_marker *, FILE *);
Packit Service 82fcde
extern void _IO_remove_marker (struct _IO_marker *) __THROW;
Packit Service 82fcde
extern int _IO_marker_difference (struct _IO_marker *, struct _IO_marker *)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern int _IO_marker_delta (struct _IO_marker *) __THROW;
Packit Service 82fcde
extern int _IO_wmarker_delta (struct _IO_marker *) __THROW;
Packit Service 82fcde
extern int _IO_seekmark (FILE *, struct _IO_marker *, int) __THROW;
Packit Service 82fcde
extern int _IO_seekwmark (FILE *, struct _IO_marker *, int) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* Functions for iterating global list and dealing with its lock */
Packit Service 82fcde
Packit Service 82fcde
extern _IO_ITER _IO_iter_begin (void) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_iter_begin)
Packit Service 82fcde
extern _IO_ITER _IO_iter_end (void) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_iter_end)
Packit Service 82fcde
extern _IO_ITER _IO_iter_next (_IO_ITER) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_iter_next)
Packit Service 82fcde
extern FILE *_IO_iter_file (_IO_ITER) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_iter_file)
Packit Service 82fcde
extern void _IO_list_lock (void) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_list_lock)
Packit Service 82fcde
extern void _IO_list_unlock (void) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_list_unlock)
Packit Service 82fcde
extern void _IO_list_resetlock (void) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_list_resetlock)
Packit Service 82fcde
extern void _IO_enable_locks (void) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_enable_locks)
Packit Service 82fcde
Packit Service 82fcde
/* Default jumptable functions. */
Packit Service 82fcde
Packit Service 82fcde
extern int _IO_default_underflow (FILE *) __THROW;
Packit Service 82fcde
extern int _IO_default_uflow (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_default_uflow)
Packit Service 82fcde
extern wint_t _IO_wdefault_uflow (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_wdefault_uflow)
Packit Service 82fcde
extern int _IO_default_doallocate (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_default_doallocate)
Packit Service 82fcde
extern int _IO_wdefault_doallocate (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_wdefault_doallocate)
Packit Service 82fcde
extern void _IO_default_finish (FILE *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_default_finish)
Packit Service 82fcde
extern void _IO_wdefault_finish (FILE *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_wdefault_finish)
Packit Service 82fcde
extern int _IO_default_pbackfail (FILE *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_default_pbackfail)
Packit Service 82fcde
extern wint_t _IO_wdefault_pbackfail (FILE *, wint_t) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_wdefault_pbackfail)
Packit Service 82fcde
extern FILE* _IO_default_setbuf (FILE *, char *, ssize_t);
Packit Service 82fcde
extern size_t _IO_default_xsputn (FILE *, const void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_default_xsputn)
Packit Service 82fcde
extern size_t _IO_wdefault_xsputn (FILE *, const void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_wdefault_xsputn)
Packit Service 82fcde
extern size_t _IO_default_xsgetn (FILE *, void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_default_xsgetn)
Packit Service 82fcde
extern size_t _IO_wdefault_xsgetn (FILE *, void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_wdefault_xsgetn)
Packit Service 82fcde
extern off64_t _IO_default_seekoff (FILE *, off64_t, int, int)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern off64_t _IO_default_seekpos (FILE *, off64_t, int);
Packit Service 82fcde
extern ssize_t _IO_default_write (FILE *, const void *, ssize_t);
Packit Service 82fcde
extern ssize_t _IO_default_read (FILE *, void *, ssize_t);
Packit Service 82fcde
extern int _IO_default_stat (FILE *, void *) __THROW;
Packit Service 82fcde
extern off64_t _IO_default_seek (FILE *, off64_t, int) __THROW;
Packit Service 82fcde
extern int _IO_default_sync (FILE *) __THROW;
Packit Service 82fcde
#define _IO_default_close ((_IO_close_t) _IO_default_sync)
Packit Service 82fcde
extern int _IO_default_showmanyc (FILE *) __THROW;
Packit Service 82fcde
extern void _IO_default_imbue (FILE *, void *) __THROW;
Packit Service 82fcde
Packit Service 82fcde
extern const struct _IO_jump_t _IO_file_jumps;
Packit Service 82fcde
libc_hidden_proto (_IO_file_jumps)
Packit Service 82fcde
extern const struct _IO_jump_t _IO_file_jumps_mmap attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_file_jumps_maybe_mmap attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_wfile_jumps;
Packit Service 82fcde
libc_hidden_proto (_IO_wfile_jumps)
Packit Service 82fcde
extern const struct _IO_jump_t _IO_wfile_jumps_mmap attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_wfile_jumps_maybe_mmap attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_old_file_jumps attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_streambuf_jumps;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_old_proc_jumps attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_str_jumps attribute_hidden;
Packit Service 82fcde
extern const struct _IO_jump_t _IO_wstr_jumps attribute_hidden;
Packit Service 1c5418
extern const struct _IO_codecvt __libio_codecvt attribute_hidden;
Packit Service 82fcde
extern int _IO_do_write (FILE *, const char *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_do_write)
Packit Service 82fcde
extern int _IO_new_do_write (FILE *, const char *, size_t);
Packit Service 82fcde
extern int _IO_old_do_write (FILE *, const char *, size_t);
Packit Service 82fcde
extern int _IO_wdo_write (FILE *, const wchar_t *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_wdo_write)
Packit Service 82fcde
extern int _IO_flush_all_lockp (int);
Packit Service 82fcde
extern int _IO_flush_all (void);
Packit Service 82fcde
libc_hidden_proto (_IO_flush_all)
Packit Service 82fcde
extern int _IO_cleanup (void);
Packit Service 82fcde
extern void _IO_flush_all_linebuffered (void);
Packit Service 82fcde
libc_hidden_proto (_IO_flush_all_linebuffered)
Packit Service 82fcde
extern int _IO_new_fgetpos (FILE *, __fpos_t *);
Packit Service 82fcde
extern int _IO_old_fgetpos (FILE *, __fpos_t *);
Packit Service 82fcde
extern int _IO_new_fsetpos (FILE *, const __fpos_t *);
Packit Service 82fcde
extern int _IO_old_fsetpos (FILE *, const __fpos_t *);
Packit Service 82fcde
extern int _IO_new_fgetpos64 (FILE *, __fpos64_t *);
Packit Service 82fcde
extern int _IO_old_fgetpos64 (FILE *, __fpos64_t *);
Packit Service 82fcde
extern int _IO_new_fsetpos64 (FILE *, const __fpos64_t *);
Packit Service 82fcde
extern int _IO_old_fsetpos64 (FILE *, const __fpos64_t *);
Packit Service 82fcde
extern void _IO_old_init (FILE *fp, int flags) __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
#define _IO_do_flush(_f) \
Packit Service 82fcde
  ((_f)->_mode <= 0							      \
Packit Service 82fcde
   ? _IO_do_write(_f, (_f)->_IO_write_base,				      \
Packit Service 82fcde
		  (_f)->_IO_write_ptr-(_f)->_IO_write_base)		      \
Packit Service 82fcde
   : _IO_wdo_write(_f, (_f)->_wide_data->_IO_write_base,		      \
Packit Service 82fcde
		   ((_f)->_wide_data->_IO_write_ptr			      \
Packit Service 82fcde
		    - (_f)->_wide_data->_IO_write_base)))
Packit Service 82fcde
#define _IO_old_do_flush(_f) \
Packit Service 82fcde
  _IO_old_do_write(_f, (_f)->_IO_write_base, \
Packit Service 82fcde
		   (_f)->_IO_write_ptr-(_f)->_IO_write_base)
Packit Service 82fcde
#define _IO_in_put_mode(_fp) ((_fp)->_flags & _IO_CURRENTLY_PUTTING)
Packit Service 82fcde
#define _IO_mask_flags(fp, f, mask) \
Packit Service 82fcde
       ((fp)->_flags = ((fp)->_flags & ~(mask)) | ((f) & (mask)))
Packit Service 82fcde
#define _IO_setg(fp, eb, g, eg)  ((fp)->_IO_read_base = (eb),\
Packit Service 82fcde
	(fp)->_IO_read_ptr = (g), (fp)->_IO_read_end = (eg))
Packit Service 82fcde
#define _IO_wsetg(fp, eb, g, eg)  ((fp)->_wide_data->_IO_read_base = (eb),\
Packit Service 82fcde
	(fp)->_wide_data->_IO_read_ptr = (g), \
Packit Service 82fcde
	(fp)->_wide_data->_IO_read_end = (eg))
Packit Service 82fcde
#define _IO_setp(__fp, __p, __ep) \
Packit Service 82fcde
       ((__fp)->_IO_write_base = (__fp)->_IO_write_ptr \
Packit Service 82fcde
	= __p, (__fp)->_IO_write_end = (__ep))
Packit Service 82fcde
#define _IO_wsetp(__fp, __p, __ep) \
Packit Service 82fcde
       ((__fp)->_wide_data->_IO_write_base \
Packit Service 82fcde
	= (__fp)->_wide_data->_IO_write_ptr = __p, \
Packit Service 82fcde
	(__fp)->_wide_data->_IO_write_end = (__ep))
Packit Service 82fcde
#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL)
Packit Service 82fcde
#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_save_base != NULL)
Packit Service 82fcde
#define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP)
Packit Service 82fcde
#define _IO_have_markers(fp) ((fp)->_markers != NULL)
Packit Service 82fcde
#define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base)
Packit Service 82fcde
#define _IO_wblen(fp) ((fp)->_wide_data->_IO_buf_end \
Packit Service 82fcde
		       - (fp)->_wide_data->_IO_buf_base)
Packit Service 82fcde
Packit Service 82fcde
/* Jumptable functions for files. */
Packit Service 82fcde
Packit Service 82fcde
extern int _IO_file_doallocate (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_file_doallocate)
Packit Service 82fcde
extern FILE* _IO_file_setbuf (FILE *, char *, ssize_t);
Packit Service 82fcde
libc_hidden_proto (_IO_file_setbuf)
Packit Service 82fcde
extern off64_t _IO_file_seekoff (FILE *, off64_t, int, int);
Packit Service 82fcde
libc_hidden_proto (_IO_file_seekoff)
Packit Service 82fcde
extern off64_t _IO_file_seekoff_mmap (FILE *, off64_t, int, int)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern size_t _IO_file_xsputn (FILE *, const void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_file_xsputn)
Packit Service 82fcde
extern size_t _IO_file_xsgetn (FILE *, void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_file_xsgetn)
Packit Service 82fcde
extern int _IO_file_stat (FILE *, void *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_file_stat)
Packit Service 82fcde
extern int _IO_file_close (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_file_close)
Packit Service 82fcde
extern int _IO_file_close_mmap (FILE *) __THROW;
Packit Service 82fcde
extern int _IO_file_underflow (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_file_underflow)
Packit Service 82fcde
extern int _IO_file_underflow_mmap (FILE *);
Packit Service 82fcde
extern int _IO_file_underflow_maybe_mmap (FILE *);
Packit Service 82fcde
extern int _IO_file_overflow (FILE *, int);
Packit Service 82fcde
libc_hidden_proto (_IO_file_overflow)
Packit Service 82fcde
#define _IO_file_is_open(__fp) ((__fp)->_fileno != -1)
Packit Service 82fcde
extern FILE* _IO_file_attach (FILE *, int);
Packit Service 82fcde
libc_hidden_proto (_IO_file_attach)
Packit Service 82fcde
extern FILE* _IO_file_open (FILE *, const char *, int, int, int, int);
Packit Service 82fcde
libc_hidden_proto (_IO_file_open)
Packit Service 82fcde
extern FILE* _IO_file_fopen (FILE *, const char *, const char *, int);
Packit Service 82fcde
libc_hidden_proto (_IO_file_fopen)
Packit Service 82fcde
extern ssize_t _IO_file_write (FILE *, const void *, ssize_t);
Packit Service 82fcde
extern ssize_t _IO_file_read (FILE *, void *, ssize_t);
Packit Service 82fcde
libc_hidden_proto (_IO_file_read)
Packit Service 82fcde
extern int _IO_file_sync (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_file_sync)
Packit Service 82fcde
extern int _IO_file_close_it (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_file_close_it)
Packit Service 82fcde
extern off64_t _IO_file_seek (FILE *, off64_t, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_file_seek)
Packit Service 82fcde
extern void _IO_file_finish (FILE *, int);
Packit Service 82fcde
libc_hidden_proto (_IO_file_finish)
Packit Service 82fcde
Packit Service 82fcde
extern FILE* _IO_new_file_attach (FILE *, int);
Packit Service 82fcde
extern int _IO_new_file_close_it (FILE *);
Packit Service 82fcde
extern void _IO_new_file_finish (FILE *, int);
Packit Service 82fcde
extern FILE* _IO_new_file_fopen (FILE *, const char *, const char *,
Packit Service 82fcde
				     int);
Packit Service 82fcde
extern void _IO_no_init (FILE *, int, int, struct _IO_wide_data *,
Packit Service 82fcde
			 const struct _IO_jump_t *) __THROW;
Packit Service 82fcde
extern void _IO_new_file_init_internal (struct _IO_FILE_plus *)
Packit Service 82fcde
  __THROW attribute_hidden;
Packit Service 82fcde
extern FILE* _IO_new_file_setbuf (FILE *, char *, ssize_t);
Packit Service 82fcde
extern FILE* _IO_file_setbuf_mmap (FILE *, char *, ssize_t);
Packit Service 82fcde
extern int _IO_new_file_sync (FILE *);
Packit Service 82fcde
extern int _IO_new_file_underflow (FILE *);
Packit Service 82fcde
extern int _IO_new_file_overflow (FILE *, int);
Packit Service 82fcde
extern off64_t _IO_new_file_seekoff (FILE *, off64_t, int, int);
Packit Service 82fcde
extern ssize_t _IO_new_file_write (FILE *, const void *, ssize_t);
Packit Service 82fcde
extern size_t _IO_new_file_xsputn (FILE *, const void *, size_t);
Packit Service 82fcde
Packit Service 82fcde
extern FILE* _IO_old_file_setbuf (FILE *, char *, ssize_t);
Packit Service 82fcde
extern off64_t _IO_old_file_seekoff (FILE *, off64_t, int, int);
Packit Service 82fcde
extern size_t _IO_old_file_xsputn (FILE *, const void *, size_t);
Packit Service 82fcde
extern int _IO_old_file_underflow (FILE *);
Packit Service 82fcde
extern int _IO_old_file_overflow (FILE *, int);
Packit Service 82fcde
extern void _IO_old_file_init_internal (struct _IO_FILE_plus *)
Packit Service 82fcde
  __THROW attribute_hidden;
Packit Service 82fcde
extern FILE* _IO_old_file_attach (FILE *, int);
Packit Service 82fcde
extern FILE* _IO_old_file_fopen (FILE *, const char *, const char *);
Packit Service 82fcde
extern ssize_t _IO_old_file_write (FILE *, const void *, ssize_t);
Packit Service 82fcde
extern int _IO_old_file_sync (FILE *);
Packit Service 82fcde
extern int _IO_old_file_close_it (FILE *);
Packit Service 82fcde
extern void _IO_old_file_finish (FILE *, int);
Packit Service 82fcde
Packit Service 82fcde
extern int _IO_wfile_doallocate (FILE *) __THROW;
Packit Service 82fcde
extern size_t _IO_wfile_xsputn (FILE *, const void *, size_t);
Packit Service 82fcde
libc_hidden_proto (_IO_wfile_xsputn)
Packit Service 82fcde
extern FILE* _IO_wfile_setbuf (FILE *, wchar_t *, ssize_t);
Packit Service 82fcde
extern wint_t _IO_wfile_sync (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_wfile_sync)
Packit Service 82fcde
extern wint_t _IO_wfile_underflow (FILE *);
Packit Service 82fcde
libc_hidden_proto (_IO_wfile_underflow)
Packit Service 82fcde
extern wint_t _IO_wfile_overflow (FILE *, wint_t);
Packit Service 82fcde
libc_hidden_proto (_IO_wfile_overflow)
Packit Service 82fcde
extern off64_t _IO_wfile_seekoff (FILE *, off64_t, int, int);
Packit Service 82fcde
libc_hidden_proto (_IO_wfile_seekoff)
Packit Service 82fcde
Packit Service 82fcde
/* Jumptable functions for proc_files. */
Packit Service 82fcde
extern FILE* _IO_proc_open (FILE *, const char *, const char *)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern FILE* _IO_new_proc_open (FILE *, const char *, const char *)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern FILE* _IO_old_proc_open (FILE *, const char *, const char *);
Packit Service 82fcde
extern int _IO_proc_close (FILE *) __THROW;
Packit Service 82fcde
extern int _IO_new_proc_close (FILE *) __THROW;
Packit Service 82fcde
extern int _IO_old_proc_close (FILE *);
Packit Service 82fcde
Packit Service 82fcde
/* Jumptable functions for strfiles. */
Packit Service 82fcde
extern int _IO_str_underflow (FILE *) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_str_underflow)
Packit Service 82fcde
extern int _IO_str_overflow (FILE *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_str_overflow)
Packit Service 82fcde
extern int _IO_str_pbackfail (FILE *, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_str_pbackfail)
Packit Service 82fcde
extern off64_t _IO_str_seekoff (FILE *, off64_t, int, int) __THROW;
Packit Service 82fcde
libc_hidden_proto (_IO_str_seekoff)
Packit Service 82fcde
extern void _IO_str_finish (FILE *, int) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* Other strfile functions */
Packit Service 82fcde
struct _IO_strfile_;
Packit Service 82fcde
extern ssize_t _IO_str_count (FILE *) __THROW;
Packit Service 82fcde
Packit Service 82fcde
/* And the wide character versions.  */
Packit Service 82fcde
extern void _IO_wstr_init_static (FILE *, wchar_t *, size_t, wchar_t *)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern ssize_t _IO_wstr_count (FILE *) __THROW;
Packit Service 82fcde
extern wint_t _IO_wstr_overflow (FILE *, wint_t) __THROW;
Packit Service 82fcde
extern wint_t _IO_wstr_underflow (FILE *) __THROW;
Packit Service 82fcde
extern off64_t _IO_wstr_seekoff (FILE *, off64_t, int, int)
Packit Service 82fcde
     __THROW;
Packit Service 82fcde
extern wint_t _IO_wstr_pbackfail (FILE *, wint_t) __THROW;
Packit Service 82fcde
extern void _IO_wstr_finish (FILE *, int) __THROW;
Packit Service 82fcde
Packit Service 82fcde
extern int _IO_vasprintf (char **result_ptr, const char *format,
Packit Service 82fcde
			  va_list args) __THROW;
Packit Service 82fcde
extern int _IO_vdprintf (int d, const char *format, va_list arg);
Packit Service 82fcde
extern int _IO_vsnprintf (char *string, size_t maxlen,
Packit Service 82fcde
			  const char *format, va_list args) __THROW;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
extern size_t _IO_getline (FILE *,char *, size_t, int, int);
Packit Service 82fcde
libc_hidden_proto (_IO_getline)
Packit Service 82fcde
extern size_t _IO_getline_info (FILE *,char *, size_t,
Packit Service 82fcde
				    int, int, int *);
Packit Service 82fcde
libc_hidden_proto (_IO_getline_info)
Packit Service 82fcde
extern ssize_t _IO_getdelim (char **, size_t *, int, FILE *);
Packit Service 82fcde
extern size_t _IO_getwline (FILE *,wchar_t *, size_t, wint_t, int);
Packit Service 82fcde
extern size_t _IO_getwline_info (FILE *,wchar_t *, size_t,
Packit Service 82fcde
				     wint_t, int, wint_t *);
Packit Service 82fcde
Packit Service 82fcde
extern struct _IO_FILE_plus *_IO_list_all;
Packit Service 82fcde
libc_hidden_proto (_IO_list_all)
Packit Service 82fcde
extern void (*_IO_cleanup_registration_needed) (void);
Packit Service 82fcde
Packit Service 82fcde
extern void _IO_str_init_static_internal (struct _IO_strfile_ *, char *,
Packit Service 82fcde
					  size_t, char *) __THROW;
Packit Service 82fcde
extern off64_t _IO_seekoff_unlocked (FILE *, off64_t, int, int)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
extern off64_t _IO_seekpos_unlocked (FILE *, off64_t, int)
Packit Service 82fcde
     attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
#if _G_HAVE_MMAP
Packit Service 82fcde
Packit Service 82fcde
# include <unistd.h>
Packit Service 82fcde
# include <fcntl.h>
Packit Service 82fcde
# include <sys/mman.h>
Packit Service 82fcde
# include <sys/param.h>
Packit Service 82fcde
Packit Service 82fcde
# if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
Packit Service 82fcde
#  define MAP_ANONYMOUS MAP_ANON
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
# if !defined(MAP_ANONYMOUS) || !defined(EXEC_PAGESIZE)
Packit Service 82fcde
#  undef _G_HAVE_MMAP
Packit Service 82fcde
#  define _G_HAVE_MMAP 0
Packit Service 82fcde
# endif
Packit Service 82fcde
Packit Service 82fcde
#endif /* _G_HAVE_MMAP */
Packit Service 82fcde
Packit Service 82fcde
extern int _IO_vscanf (const char *, va_list) __THROW;
Packit Service 82fcde
Packit Service 82fcde
#ifdef _IO_MTSAFE_IO
Packit Service 82fcde
/* check following! */
Packit Service 82fcde
# ifdef _IO_USE_OLD_IO_FILE
Packit Service 82fcde
#  define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
Packit Service 82fcde
       { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
Packit Service 82fcde
	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \
Packit Service 82fcde
	 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock }
Packit Service 82fcde
# else
Packit Service 82fcde
#  define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
Packit Service 82fcde
       { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
Packit Service 82fcde
	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \
Packit Service 82fcde
	 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, _IO_pos_BAD,\
Packit Service 82fcde
	 NULL, WDP, 0 }
Packit Service 82fcde
# endif
Packit Service 82fcde
#else
Packit Service 82fcde
# ifdef _IO_USE_OLD_IO_FILE
Packit Service 82fcde
#  define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
Packit Service 82fcde
       { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
Packit Service 82fcde
	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \
Packit Service 82fcde
	 0, _IO_pos_BAD }
Packit Service 82fcde
# else
Packit Service 82fcde
#  define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
Packit Service 82fcde
       { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
Packit Service 82fcde
	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \
Packit Service 82fcde
	 0, _IO_pos_BAD, 0, 0, { 0 }, 0, _IO_pos_BAD, \
Packit Service 82fcde
	 NULL, WDP, 0 }
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
extern struct _IO_fake_stdiobuf _IO_stdin_buf, _IO_stdout_buf, _IO_stderr_buf;
Packit Service 82fcde
Packit Service 82fcde
#ifdef IO_DEBUG
Packit Service 82fcde
# define CHECK_FILE(FILE, RET) do {			\
Packit Service 82fcde
    if ((FILE) == NULL ||				\
Packit Service 82fcde
	((FILE)->_flags & _IO_MAGIC_MASK) != _IO_MAGIC) \
Packit Service 82fcde
      {							\
Packit Service 82fcde
	__set_errno (EINVAL);				\
Packit Service 82fcde
	return RET;					\
Packit Service 82fcde
      }							\
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
#else
Packit Service 82fcde
# define CHECK_FILE(FILE, RET) do { } while (0)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
static inline void
Packit Service 82fcde
__attribute__ ((__always_inline__))
Packit Service 82fcde
_IO_acquire_lock_fct (FILE **p)
Packit Service 82fcde
{
Packit Service 82fcde
  FILE *fp = *p;
Packit Service 82fcde
  if ((fp->_flags & _IO_USER_LOCK) == 0)
Packit Service 82fcde
    _IO_funlockfile (fp);
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
static inline void
Packit Service 82fcde
__attribute__ ((__always_inline__))
Packit Service 82fcde
_IO_acquire_lock_clear_flags2_fct (FILE **p)
Packit Service 82fcde
{
Packit Service 82fcde
  FILE *fp = *p;
Packit Service 82fcde
  fp->_flags2 &= ~(_IO_FLAGS2_FORTIFY | _IO_FLAGS2_SCANF_STD);
Packit Service 82fcde
  if ((fp->_flags & _IO_USER_LOCK) == 0)
Packit Service 82fcde
    _IO_funlockfile (fp);
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#if !defined _IO_MTSAFE_IO && IS_IN (libc)
Packit Service 82fcde
# define _IO_acquire_lock(_fp)						      \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    FILE *_IO_acquire_lock_file = NULL
Packit Service 82fcde
# define _IO_acquire_lock_clear_flags2(_fp)				      \
Packit Service 82fcde
  do {									      \
Packit Service 82fcde
    FILE *_IO_acquire_lock_file = (_fp)
Packit Service 82fcde
# define _IO_release_lock(_fp)						      \
Packit Service 82fcde
    if (_IO_acquire_lock_file != NULL)					      \
Packit Service 82fcde
      _IO_acquire_lock_file->_flags2 &= ~(_IO_FLAGS2_FORTIFY		      \
Packit Service 82fcde
                                          | _IO_FLAGS2_SCANF_STD);	      \
Packit Service 82fcde
  } while (0)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Collect all vtables in a special section for vtable verification.
Packit Service 82fcde
   These symbols cover the extent of this section.  */
Packit Service 82fcde
symbol_set_declare (__libc_IO_vtables)
Packit Service 82fcde
Packit Service 82fcde
/* libio vtables need to carry this attribute so that they pass
Packit Service 82fcde
   validation.  */
Packit Service 82fcde
#define libio_vtable __attribute__ ((section ("__libc_IO_vtables")))
Packit Service 82fcde
Packit Service 82fcde
#ifdef SHARED
Packit Service 82fcde
/* If equal to &_IO_vtable_check (with pointer guard protection),
Packit Service 82fcde
   unknown vtable pointers are valid.  This function pointer is solely
Packit Service 82fcde
   used as a flag.  */
Packit Service 82fcde
extern void (*IO_accept_foreign_vtables) (void) attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Assigns the passed function pointer (either NULL or
Packit Service 82fcde
   &_IO_vtable_check) to IO_accept_foreign_vtables.  */
Packit Service 82fcde
static inline void
Packit Service 82fcde
IO_set_accept_foreign_vtables (void (*flag) (void))
Packit Service 82fcde
{
Packit Service 82fcde
#ifdef PTR_MANGLE
Packit Service 82fcde
  PTR_MANGLE (flag);
Packit Service 82fcde
#endif
Packit Service 82fcde
  atomic_store_relaxed (&IO_accept_foreign_vtables, flag);
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#else  /* !SHARED */
Packit Service 82fcde
Packit Service 82fcde
/* The statically-linked version does nothing. */
Packit Service 82fcde
static inline void
Packit Service 82fcde
IO_set_accept_foreign_vtables (void (*flag) (void))
Packit Service 82fcde
{
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Check if unknown vtable pointers are permitted; otherwise,
Packit Service 82fcde
   terminate the process.  */
Packit Service 82fcde
void _IO_vtable_check (void) attribute_hidden;
Packit Service 82fcde
Packit Service 82fcde
/* Perform vtable pointer validation.  If validation fails, terminate
Packit Service 82fcde
   the process.  */
Packit Service 82fcde
static inline const struct _IO_jump_t *
Packit Service 82fcde
IO_validate_vtable (const struct _IO_jump_t *vtable)
Packit Service 82fcde
{
Packit Service 82fcde
  /* Fast path: The vtable pointer is within the __libc_IO_vtables
Packit Service 82fcde
     section.  */
Packit Service 82fcde
  uintptr_t section_length = __stop___libc_IO_vtables - __start___libc_IO_vtables;
Packit Service 82fcde
  uintptr_t ptr = (uintptr_t) vtable;
Packit Service 82fcde
  uintptr_t offset = ptr - (uintptr_t) __start___libc_IO_vtables;
Packit Service 82fcde
  if (__glibc_unlikely (offset >= section_length))
Packit Service 82fcde
    /* The vtable pointer is not in the expected section.  Use the
Packit Service 82fcde
       slow path, which will terminate the process if necessary.  */
Packit Service 82fcde
    _IO_vtable_check ();
Packit Service 82fcde
  return vtable;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
#endif /* libioP.h.  */