|  | /* Copyright (C) 1993-2016 Free Software Foundation, Inc. | 
|  | This file is part of the GNU C Library. | 
|  |  | 
|  | The GNU C Library is free software; you can redistribute it and/or | 
|  | modify it under the terms of the GNU Lesser General Public | 
|  | License as published by the Free Software Foundation; either | 
|  | version 2.1 of the License, or (at your option) any later version. | 
|  |  | 
|  | The GNU C Library is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | Lesser General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU Lesser General Public | 
|  | License along with the GNU C Library; if not, see | 
|  | <http://www.gnu.org/licenses/>. | 
|  |  | 
|  | As a special exception, if you link the code in this file with | 
|  | files compiled with a GNU compiler to produce an executable, | 
|  | that does not cause the resulting executable to be covered by | 
|  | the GNU Lesser General Public License.  This exception does not | 
|  | however invalidate any other reasons why the executable file | 
|  | might be covered by the GNU Lesser General Public License. | 
|  | This exception applies to code released by its copyright holders | 
|  | in files containing the exception.  */ | 
|  |  | 
|  | #include <libio.h> | 
|  | #ifdef TODO | 
|  | Merge into  libio.h ? | 
|  | #endif | 
|  |  | 
|  | typedef void *(*_IO_alloc_type) (_IO_size_t); | 
|  | typedef void (*_IO_free_type) (void*); | 
|  |  | 
|  | struct _IO_str_fields | 
|  | { | 
|  | _IO_alloc_type _allocate_buffer; | 
|  | _IO_free_type _free_buffer; | 
|  | }; | 
|  |  | 
|  | /* This is needed for the Irix6 N32 ABI, which has a 64 bit off_t type, | 
|  | but a 32 bit pointer type.  In this case, we get 4 bytes of padding | 
|  | after the vtable pointer.  Putting them in a structure together solves | 
|  | this problem.  */ | 
|  |  | 
|  | struct _IO_streambuf | 
|  | { | 
|  | struct _IO_FILE _f; | 
|  | const struct _IO_jump_t *vtable; | 
|  | }; | 
|  |  | 
|  | typedef struct _IO_strfile_ | 
|  | { | 
|  | struct _IO_streambuf _sbf; | 
|  | struct _IO_str_fields _s; | 
|  | } _IO_strfile; | 
|  |  | 
|  | /* dynamic: set when the array object is allocated (or reallocated)  as | 
|  | necessary to hold a character sequence that can change in length. */ | 
|  | #define _IO_STR_DYNAMIC(FP) ((FP)->_s._allocate_buffer != (_IO_alloc_type)0) | 
|  |  | 
|  | /* frozen: set when the program has requested that the array object not | 
|  | be altered, reallocated, or freed. */ | 
|  | #define _IO_STR_FROZEN(FP) ((FP)->_f._IO_file_flags & _IO_USER_BUF) | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | _IO_strfile f; | 
|  | /* This is used for the characters which do not fit in the buffer | 
|  | provided by the user.  */ | 
|  | char overflow_buf[64]; | 
|  | } _IO_strnfile; | 
|  |  | 
|  | extern const struct _IO_jump_t _IO_strn_jumps attribute_hidden; | 
|  |  | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | _IO_strfile f; | 
|  | /* This is used for the characters which do not fit in the buffer | 
|  | provided by the user.  */ | 
|  | wchar_t overflow_buf[64]; | 
|  | } _IO_wstrnfile; | 
|  |  | 
|  | extern const struct _IO_jump_t _IO_wstrn_jumps attribute_hidden; |