| /* 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; |