xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/libio.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-1995,1997-2006,2007 Free Software Foundation, Inc.
2*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
3*53ee8cc1Swenshuai.xi    Written by Per Bothner <bothner@cygnus.com>.
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
6*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
7*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
8*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
9*53ee8cc1Swenshuai.xi 
10*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
11*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
16*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
17*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18*53ee8cc1Swenshuai.xi    02111-1307 USA.
19*53ee8cc1Swenshuai.xi 
20*53ee8cc1Swenshuai.xi    As a special exception, if you link the code in this file with
21*53ee8cc1Swenshuai.xi    files compiled with a GNU compiler to produce an executable,
22*53ee8cc1Swenshuai.xi    that does not cause the resulting executable to be covered by
23*53ee8cc1Swenshuai.xi    the GNU Lesser General Public License.  This exception does not
24*53ee8cc1Swenshuai.xi    however invalidate any other reasons why the executable file
25*53ee8cc1Swenshuai.xi    might be covered by the GNU Lesser General Public License.
26*53ee8cc1Swenshuai.xi    This exception applies to code released by its copyright holders
27*53ee8cc1Swenshuai.xi    in files containing the exception.  */
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi #ifndef _IO_STDIO_H
30*53ee8cc1Swenshuai.xi #define _IO_STDIO_H
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi #include <_G_config.h>
33*53ee8cc1Swenshuai.xi /* ALL of these should be defined in _G_config.h */
34*53ee8cc1Swenshuai.xi #define _IO_pos_t _G_fpos_t /* obsolete */
35*53ee8cc1Swenshuai.xi #define _IO_fpos_t _G_fpos_t
36*53ee8cc1Swenshuai.xi #define _IO_fpos64_t _G_fpos64_t
37*53ee8cc1Swenshuai.xi #define _IO_size_t _G_size_t
38*53ee8cc1Swenshuai.xi #define _IO_ssize_t _G_ssize_t
39*53ee8cc1Swenshuai.xi #define _IO_off_t _G_off_t
40*53ee8cc1Swenshuai.xi #define _IO_off64_t _G_off64_t
41*53ee8cc1Swenshuai.xi #define _IO_pid_t _G_pid_t
42*53ee8cc1Swenshuai.xi #define _IO_uid_t _G_uid_t
43*53ee8cc1Swenshuai.xi #define _IO_iconv_t _G_iconv_t
44*53ee8cc1Swenshuai.xi #define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
45*53ee8cc1Swenshuai.xi #define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
46*53ee8cc1Swenshuai.xi #define _IO_BUFSIZ _G_BUFSIZ
47*53ee8cc1Swenshuai.xi #define _IO_va_list _G_va_list
48*53ee8cc1Swenshuai.xi #define _IO_wint_t _G_wint_t
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi #ifdef _G_NEED_STDARG_H
51*53ee8cc1Swenshuai.xi /* This define avoids name pollution if we're using GNU stdarg.h */
52*53ee8cc1Swenshuai.xi # define __need___va_list
53*53ee8cc1Swenshuai.xi # include <stdarg.h>
54*53ee8cc1Swenshuai.xi # ifdef __GNUC_VA_LIST
55*53ee8cc1Swenshuai.xi #  undef _IO_va_list
56*53ee8cc1Swenshuai.xi #  define _IO_va_list __gnuc_va_list
57*53ee8cc1Swenshuai.xi # endif /* __GNUC_VA_LIST */
58*53ee8cc1Swenshuai.xi #endif
59*53ee8cc1Swenshuai.xi 
60*53ee8cc1Swenshuai.xi #ifndef __P
61*53ee8cc1Swenshuai.xi # if _G_HAVE_SYS_CDEFS
62*53ee8cc1Swenshuai.xi #  include <sys/cdefs.h>
63*53ee8cc1Swenshuai.xi # else
64*53ee8cc1Swenshuai.xi #  ifdef __STDC__
65*53ee8cc1Swenshuai.xi #   define __P(p) p
66*53ee8cc1Swenshuai.xi #   define __PMT(p) p
67*53ee8cc1Swenshuai.xi #  else
68*53ee8cc1Swenshuai.xi #   define __P(p) ()
69*53ee8cc1Swenshuai.xi #   define __PMT(p) ()
70*53ee8cc1Swenshuai.xi #  endif
71*53ee8cc1Swenshuai.xi # endif
72*53ee8cc1Swenshuai.xi #endif /*!__P*/
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi /* For backward compatibility */
75*53ee8cc1Swenshuai.xi #ifndef _PARAMS
76*53ee8cc1Swenshuai.xi # define _PARAMS(protos) __P(protos)
77*53ee8cc1Swenshuai.xi #endif /*!_PARAMS*/
78*53ee8cc1Swenshuai.xi 
79*53ee8cc1Swenshuai.xi #ifndef __STDC__
80*53ee8cc1Swenshuai.xi # ifndef const
81*53ee8cc1Swenshuai.xi #  define const
82*53ee8cc1Swenshuai.xi # endif
83*53ee8cc1Swenshuai.xi #endif
84*53ee8cc1Swenshuai.xi #define _IO_UNIFIED_JUMPTABLES 1
85*53ee8cc1Swenshuai.xi #ifndef _G_HAVE_PRINTF_FP
86*53ee8cc1Swenshuai.xi # define _IO_USE_DTOA 1
87*53ee8cc1Swenshuai.xi #endif
88*53ee8cc1Swenshuai.xi 
89*53ee8cc1Swenshuai.xi #ifndef EOF
90*53ee8cc1Swenshuai.xi # define EOF (-1)
91*53ee8cc1Swenshuai.xi #endif
92*53ee8cc1Swenshuai.xi #ifndef NULL
93*53ee8cc1Swenshuai.xi # if defined __GNUG__ && \
94*53ee8cc1Swenshuai.xi     (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
95*53ee8cc1Swenshuai.xi #  define NULL (__null)
96*53ee8cc1Swenshuai.xi # else
97*53ee8cc1Swenshuai.xi #  if !defined(__cplusplus)
98*53ee8cc1Swenshuai.xi #   define NULL ((void*)0)
99*53ee8cc1Swenshuai.xi #  else
100*53ee8cc1Swenshuai.xi #   define NULL (0)
101*53ee8cc1Swenshuai.xi #  endif
102*53ee8cc1Swenshuai.xi # endif
103*53ee8cc1Swenshuai.xi #endif
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #define _IOS_INPUT	1
106*53ee8cc1Swenshuai.xi #define _IOS_OUTPUT	2
107*53ee8cc1Swenshuai.xi #define _IOS_ATEND	4
108*53ee8cc1Swenshuai.xi #define _IOS_APPEND	8
109*53ee8cc1Swenshuai.xi #define _IOS_TRUNC	16
110*53ee8cc1Swenshuai.xi #define _IOS_NOCREATE	32
111*53ee8cc1Swenshuai.xi #define _IOS_NOREPLACE	64
112*53ee8cc1Swenshuai.xi #define _IOS_BIN	128
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi /* Magic numbers and bits for the _flags field.
115*53ee8cc1Swenshuai.xi    The magic numbers use the high-order bits of _flags;
116*53ee8cc1Swenshuai.xi    the remaining bits are available for variable flags.
117*53ee8cc1Swenshuai.xi    Note: The magic numbers must all be negative if stdio
118*53ee8cc1Swenshuai.xi    emulation is desired. */
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi #define _IO_MAGIC 0xFBAD0000 /* Magic number */
121*53ee8cc1Swenshuai.xi #define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
122*53ee8cc1Swenshuai.xi #define _IO_MAGIC_MASK 0xFFFF0000
123*53ee8cc1Swenshuai.xi #define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
124*53ee8cc1Swenshuai.xi #define _IO_UNBUFFERED 2
125*53ee8cc1Swenshuai.xi #define _IO_NO_READS 4 /* Reading not allowed */
126*53ee8cc1Swenshuai.xi #define _IO_NO_WRITES 8 /* Writing not allowd */
127*53ee8cc1Swenshuai.xi #define _IO_EOF_SEEN 0x10
128*53ee8cc1Swenshuai.xi #define _IO_ERR_SEEN 0x20
129*53ee8cc1Swenshuai.xi #define _IO_DELETE_DONT_CLOSE 0x40 /* Don't call close(_fileno) on cleanup. */
130*53ee8cc1Swenshuai.xi #define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
131*53ee8cc1Swenshuai.xi #define _IO_IN_BACKUP 0x100
132*53ee8cc1Swenshuai.xi #define _IO_LINE_BUF 0x200
133*53ee8cc1Swenshuai.xi #define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
134*53ee8cc1Swenshuai.xi #define _IO_CURRENTLY_PUTTING 0x800
135*53ee8cc1Swenshuai.xi #define _IO_IS_APPENDING 0x1000
136*53ee8cc1Swenshuai.xi #define _IO_IS_FILEBUF 0x2000
137*53ee8cc1Swenshuai.xi #define _IO_BAD_SEEN 0x4000
138*53ee8cc1Swenshuai.xi #define _IO_USER_LOCK 0x8000
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi #define _IO_FLAGS2_MMAP 1
141*53ee8cc1Swenshuai.xi #define _IO_FLAGS2_NOTCANCEL 2
142*53ee8cc1Swenshuai.xi #ifdef _LIBC
143*53ee8cc1Swenshuai.xi # define _IO_FLAGS2_FORTIFY 4
144*53ee8cc1Swenshuai.xi #endif
145*53ee8cc1Swenshuai.xi #define _IO_FLAGS2_USER_WBUF 8
146*53ee8cc1Swenshuai.xi #ifdef _LIBC
147*53ee8cc1Swenshuai.xi # define _IO_FLAGS2_SCANF_STD 16
148*53ee8cc1Swenshuai.xi #endif
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi /* These are "formatting flags" matching the iostream fmtflags enum values. */
151*53ee8cc1Swenshuai.xi #define _IO_SKIPWS 01
152*53ee8cc1Swenshuai.xi #define _IO_LEFT 02
153*53ee8cc1Swenshuai.xi #define _IO_RIGHT 04
154*53ee8cc1Swenshuai.xi #define _IO_INTERNAL 010
155*53ee8cc1Swenshuai.xi #define _IO_DEC 020
156*53ee8cc1Swenshuai.xi #define _IO_OCT 040
157*53ee8cc1Swenshuai.xi #define _IO_HEX 0100
158*53ee8cc1Swenshuai.xi #define _IO_SHOWBASE 0200
159*53ee8cc1Swenshuai.xi #define _IO_SHOWPOINT 0400
160*53ee8cc1Swenshuai.xi #define _IO_UPPERCASE 01000
161*53ee8cc1Swenshuai.xi #define _IO_SHOWPOS 02000
162*53ee8cc1Swenshuai.xi #define _IO_SCIENTIFIC 04000
163*53ee8cc1Swenshuai.xi #define _IO_FIXED 010000
164*53ee8cc1Swenshuai.xi #define _IO_UNITBUF 020000
165*53ee8cc1Swenshuai.xi #define _IO_STDIO 040000
166*53ee8cc1Swenshuai.xi #define _IO_DONT_CLOSE 0100000
167*53ee8cc1Swenshuai.xi #define _IO_BOOLALPHA 0200000
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi struct _IO_jump_t;  struct _IO_FILE;
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi /* Handle lock.  */
173*53ee8cc1Swenshuai.xi #ifdef _IO_MTSAFE_IO
174*53ee8cc1Swenshuai.xi # if defined __GLIBC__ && __GLIBC__ >= 2
175*53ee8cc1Swenshuai.xi #  include <bits/stdio-lock.h>
176*53ee8cc1Swenshuai.xi # else
177*53ee8cc1Swenshuai.xi /*# include <comthread.h>*/
178*53ee8cc1Swenshuai.xi # endif
179*53ee8cc1Swenshuai.xi #else
180*53ee8cc1Swenshuai.xi typedef void _IO_lock_t;
181*53ee8cc1Swenshuai.xi #endif
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi /* A streammarker remembers a position in a buffer. */
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi struct _IO_marker {
187*53ee8cc1Swenshuai.xi   struct _IO_marker *_next;
188*53ee8cc1Swenshuai.xi   struct _IO_FILE *_sbuf;
189*53ee8cc1Swenshuai.xi   /* If _pos >= 0
190*53ee8cc1Swenshuai.xi  it points to _buf->Gbase()+_pos. FIXME comment */
191*53ee8cc1Swenshuai.xi   /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
192*53ee8cc1Swenshuai.xi   int _pos;
193*53ee8cc1Swenshuai.xi #if 0
194*53ee8cc1Swenshuai.xi     void set_streampos(streampos sp) { _spos = sp; }
195*53ee8cc1Swenshuai.xi     void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
196*53ee8cc1Swenshuai.xi   public:
197*53ee8cc1Swenshuai.xi     streammarker(streambuf *sb);
198*53ee8cc1Swenshuai.xi     ~streammarker();
199*53ee8cc1Swenshuai.xi     int saving() { return  _spos == -2; }
200*53ee8cc1Swenshuai.xi     int delta(streammarker&);
201*53ee8cc1Swenshuai.xi     int delta();
202*53ee8cc1Swenshuai.xi #endif
203*53ee8cc1Swenshuai.xi };
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi /* This is the structure from the libstdc++ codecvt class.  */
206*53ee8cc1Swenshuai.xi enum __codecvt_result
207*53ee8cc1Swenshuai.xi {
208*53ee8cc1Swenshuai.xi   __codecvt_ok,
209*53ee8cc1Swenshuai.xi   __codecvt_partial,
210*53ee8cc1Swenshuai.xi   __codecvt_error,
211*53ee8cc1Swenshuai.xi   __codecvt_noconv
212*53ee8cc1Swenshuai.xi };
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
215*53ee8cc1Swenshuai.xi /* The order of the elements in the following struct must match the order
216*53ee8cc1Swenshuai.xi    of the virtual functions in the libstdc++ codecvt class.  */
217*53ee8cc1Swenshuai.xi struct _IO_codecvt
218*53ee8cc1Swenshuai.xi {
219*53ee8cc1Swenshuai.xi   void (*__codecvt_destr) (struct _IO_codecvt *);
220*53ee8cc1Swenshuai.xi   enum __codecvt_result (*__codecvt_do_out) (struct _IO_codecvt *,
221*53ee8cc1Swenshuai.xi 					     __mbstate_t *,
222*53ee8cc1Swenshuai.xi 					     const wchar_t *,
223*53ee8cc1Swenshuai.xi 					     const wchar_t *,
224*53ee8cc1Swenshuai.xi 					     const wchar_t **, char *,
225*53ee8cc1Swenshuai.xi 					     char *, char **);
226*53ee8cc1Swenshuai.xi   enum __codecvt_result (*__codecvt_do_unshift) (struct _IO_codecvt *,
227*53ee8cc1Swenshuai.xi 						 __mbstate_t *, char *,
228*53ee8cc1Swenshuai.xi 						 char *, char **);
229*53ee8cc1Swenshuai.xi   enum __codecvt_result (*__codecvt_do_in) (struct _IO_codecvt *,
230*53ee8cc1Swenshuai.xi 					    __mbstate_t *,
231*53ee8cc1Swenshuai.xi 					    const char *, const char *,
232*53ee8cc1Swenshuai.xi 					    const char **, wchar_t *,
233*53ee8cc1Swenshuai.xi 					    wchar_t *, wchar_t **);
234*53ee8cc1Swenshuai.xi   int (*__codecvt_do_encoding) (struct _IO_codecvt *);
235*53ee8cc1Swenshuai.xi   int (*__codecvt_do_always_noconv) (struct _IO_codecvt *);
236*53ee8cc1Swenshuai.xi   int (*__codecvt_do_length) (struct _IO_codecvt *, __mbstate_t *,
237*53ee8cc1Swenshuai.xi 			      const char *, const char *, _IO_size_t);
238*53ee8cc1Swenshuai.xi   int (*__codecvt_do_max_length) (struct _IO_codecvt *);
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi   _IO_iconv_t __cd_in;
241*53ee8cc1Swenshuai.xi   _IO_iconv_t __cd_out;
242*53ee8cc1Swenshuai.xi };
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi /* Extra data for wide character streams.  */
245*53ee8cc1Swenshuai.xi struct _IO_wide_data
246*53ee8cc1Swenshuai.xi {
247*53ee8cc1Swenshuai.xi   wchar_t *_IO_read_ptr;	/* Current read pointer */
248*53ee8cc1Swenshuai.xi   wchar_t *_IO_read_end;	/* End of get area. */
249*53ee8cc1Swenshuai.xi   wchar_t *_IO_read_base;	/* Start of putback+get area. */
250*53ee8cc1Swenshuai.xi   wchar_t *_IO_write_base;	/* Start of put area. */
251*53ee8cc1Swenshuai.xi   wchar_t *_IO_write_ptr;	/* Current put pointer. */
252*53ee8cc1Swenshuai.xi   wchar_t *_IO_write_end;	/* End of put area. */
253*53ee8cc1Swenshuai.xi   wchar_t *_IO_buf_base;	/* Start of reserve area. */
254*53ee8cc1Swenshuai.xi   wchar_t *_IO_buf_end;		/* End of reserve area. */
255*53ee8cc1Swenshuai.xi   /* The following fields are used to support backing up and undo. */
256*53ee8cc1Swenshuai.xi   wchar_t *_IO_save_base;	/* Pointer to start of non-current get area. */
257*53ee8cc1Swenshuai.xi   wchar_t *_IO_backup_base;	/* Pointer to first valid character of
258*53ee8cc1Swenshuai.xi 				   backup area */
259*53ee8cc1Swenshuai.xi   wchar_t *_IO_save_end;	/* Pointer to end of non-current get area. */
260*53ee8cc1Swenshuai.xi 
261*53ee8cc1Swenshuai.xi   __mbstate_t _IO_state;
262*53ee8cc1Swenshuai.xi   __mbstate_t _IO_last_state;
263*53ee8cc1Swenshuai.xi   struct _IO_codecvt _codecvt;
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi   wchar_t _shortbuf[1];
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi   const struct _IO_jump_t *_wide_vtable;
268*53ee8cc1Swenshuai.xi };
269*53ee8cc1Swenshuai.xi #endif
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi struct _IO_FILE {
272*53ee8cc1Swenshuai.xi   int _flags;		/* High-order word is _IO_MAGIC; rest is flags. */
273*53ee8cc1Swenshuai.xi #define _IO_file_flags _flags
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi   /* The following pointers correspond to the C++ streambuf protocol. */
276*53ee8cc1Swenshuai.xi   /* Note:  Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
277*53ee8cc1Swenshuai.xi   char* _IO_read_ptr;	/* Current read pointer */
278*53ee8cc1Swenshuai.xi   char* _IO_read_end;	/* End of get area. */
279*53ee8cc1Swenshuai.xi   char* _IO_read_base;	/* Start of putback+get area. */
280*53ee8cc1Swenshuai.xi   char* _IO_write_base;	/* Start of put area. */
281*53ee8cc1Swenshuai.xi   char* _IO_write_ptr;	/* Current put pointer. */
282*53ee8cc1Swenshuai.xi   char* _IO_write_end;	/* End of put area. */
283*53ee8cc1Swenshuai.xi   char* _IO_buf_base;	/* Start of reserve area. */
284*53ee8cc1Swenshuai.xi   char* _IO_buf_end;	/* End of reserve area. */
285*53ee8cc1Swenshuai.xi   /* The following fields are used to support backing up and undo. */
286*53ee8cc1Swenshuai.xi   char *_IO_save_base; /* Pointer to start of non-current get area. */
287*53ee8cc1Swenshuai.xi   char *_IO_backup_base;  /* Pointer to first valid character of backup area */
288*53ee8cc1Swenshuai.xi   char *_IO_save_end; /* Pointer to end of non-current get area. */
289*53ee8cc1Swenshuai.xi 
290*53ee8cc1Swenshuai.xi   struct _IO_marker *_markers;
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi   struct _IO_FILE *_chain;
293*53ee8cc1Swenshuai.xi 
294*53ee8cc1Swenshuai.xi   int _fileno;
295*53ee8cc1Swenshuai.xi #if 0
296*53ee8cc1Swenshuai.xi   int _blksize;
297*53ee8cc1Swenshuai.xi #else
298*53ee8cc1Swenshuai.xi   int _flags2;
299*53ee8cc1Swenshuai.xi #endif
300*53ee8cc1Swenshuai.xi   _IO_off_t _old_offset; /* This used to be _offset but it's too small.  */
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi #define __HAVE_COLUMN /* temporary */
303*53ee8cc1Swenshuai.xi   /* 1+column number of pbase(); 0 is unknown. */
304*53ee8cc1Swenshuai.xi   unsigned short _cur_column;
305*53ee8cc1Swenshuai.xi   signed char _vtable_offset;
306*53ee8cc1Swenshuai.xi   char _shortbuf[1];
307*53ee8cc1Swenshuai.xi 
308*53ee8cc1Swenshuai.xi   /*  char* _save_gptr;  char* _save_egptr; */
309*53ee8cc1Swenshuai.xi 
310*53ee8cc1Swenshuai.xi   _IO_lock_t *_lock;
311*53ee8cc1Swenshuai.xi #ifdef _IO_USE_OLD_IO_FILE
312*53ee8cc1Swenshuai.xi };
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi struct _IO_FILE_complete
315*53ee8cc1Swenshuai.xi {
316*53ee8cc1Swenshuai.xi   struct _IO_FILE _file;
317*53ee8cc1Swenshuai.xi #endif
318*53ee8cc1Swenshuai.xi #if defined _G_IO_IO_FILE_VERSION && _G_IO_IO_FILE_VERSION == 0x20001
319*53ee8cc1Swenshuai.xi   _IO_off64_t _offset;
320*53ee8cc1Swenshuai.xi # if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
321*53ee8cc1Swenshuai.xi   /* Wide character stream stuff.  */
322*53ee8cc1Swenshuai.xi   struct _IO_codecvt *_codecvt;
323*53ee8cc1Swenshuai.xi   struct _IO_wide_data *_wide_data;
324*53ee8cc1Swenshuai.xi   struct _IO_FILE *_freeres_list;
325*53ee8cc1Swenshuai.xi   void *_freeres_buf;
326*53ee8cc1Swenshuai.xi   size_t _freeres_size;
327*53ee8cc1Swenshuai.xi # else
328*53ee8cc1Swenshuai.xi   void *__pad1;
329*53ee8cc1Swenshuai.xi   void *__pad2;
330*53ee8cc1Swenshuai.xi   void *__pad3;
331*53ee8cc1Swenshuai.xi   void *__pad4;
332*53ee8cc1Swenshuai.xi   size_t __pad5;
333*53ee8cc1Swenshuai.xi # endif
334*53ee8cc1Swenshuai.xi   int _mode;
335*53ee8cc1Swenshuai.xi   /* Make sure we don't get into trouble again.  */
336*53ee8cc1Swenshuai.xi   char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
337*53ee8cc1Swenshuai.xi #endif
338*53ee8cc1Swenshuai.xi };
339*53ee8cc1Swenshuai.xi 
340*53ee8cc1Swenshuai.xi #ifndef __cplusplus
341*53ee8cc1Swenshuai.xi typedef struct _IO_FILE _IO_FILE;
342*53ee8cc1Swenshuai.xi #endif
343*53ee8cc1Swenshuai.xi 
344*53ee8cc1Swenshuai.xi struct _IO_FILE_plus;
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi extern struct _IO_FILE_plus _IO_2_1_stdin_;
347*53ee8cc1Swenshuai.xi extern struct _IO_FILE_plus _IO_2_1_stdout_;
348*53ee8cc1Swenshuai.xi extern struct _IO_FILE_plus _IO_2_1_stderr_;
349*53ee8cc1Swenshuai.xi #ifndef _LIBC
350*53ee8cc1Swenshuai.xi #define _IO_stdin ((_IO_FILE*)(&_IO_2_1_stdin_))
351*53ee8cc1Swenshuai.xi #define _IO_stdout ((_IO_FILE*)(&_IO_2_1_stdout_))
352*53ee8cc1Swenshuai.xi #define _IO_stderr ((_IO_FILE*)(&_IO_2_1_stderr_))
353*53ee8cc1Swenshuai.xi #else
354*53ee8cc1Swenshuai.xi extern _IO_FILE *_IO_stdin attribute_hidden;
355*53ee8cc1Swenshuai.xi extern _IO_FILE *_IO_stdout attribute_hidden;
356*53ee8cc1Swenshuai.xi extern _IO_FILE *_IO_stderr attribute_hidden;
357*53ee8cc1Swenshuai.xi #endif
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi 
360*53ee8cc1Swenshuai.xi /* Functions to do I/O and file management for a stream.  */
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi /* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF.
363*53ee8cc1Swenshuai.xi    Return number of bytes read.  */
364*53ee8cc1Swenshuai.xi typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
365*53ee8cc1Swenshuai.xi 
366*53ee8cc1Swenshuai.xi /* Write N bytes pointed to by BUF to COOKIE.  Write all N bytes
367*53ee8cc1Swenshuai.xi    unless there is an error.  Return number of bytes written, or -1 if
368*53ee8cc1Swenshuai.xi    there is an error without writing anything.  If the file has been
369*53ee8cc1Swenshuai.xi    opened for append (__mode.__append set), then set the file pointer
370*53ee8cc1Swenshuai.xi    to the end of the file and then do the write; if not, just write at
371*53ee8cc1Swenshuai.xi    the current file pointer.  */
372*53ee8cc1Swenshuai.xi typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
373*53ee8cc1Swenshuai.xi 				 size_t __n);
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi /* Move COOKIE's file position to *POS bytes from the
376*53ee8cc1Swenshuai.xi    beginning of the file (if W is SEEK_SET),
377*53ee8cc1Swenshuai.xi    the current position (if W is SEEK_CUR),
378*53ee8cc1Swenshuai.xi    or the end of the file (if W is SEEK_END).
379*53ee8cc1Swenshuai.xi    Set *POS to the new file position.
380*53ee8cc1Swenshuai.xi    Returns zero if successful, nonzero if not.  */
381*53ee8cc1Swenshuai.xi typedef int __io_seek_fn (void *__cookie, _IO_off64_t *__pos, int __w);
382*53ee8cc1Swenshuai.xi 
383*53ee8cc1Swenshuai.xi /* Close COOKIE.  */
384*53ee8cc1Swenshuai.xi typedef int __io_close_fn (void *__cookie);
385*53ee8cc1Swenshuai.xi 
386*53ee8cc1Swenshuai.xi 
387*53ee8cc1Swenshuai.xi #ifdef _GNU_SOURCE
388*53ee8cc1Swenshuai.xi /* User-visible names for the above.  */
389*53ee8cc1Swenshuai.xi typedef __io_read_fn cookie_read_function_t;
390*53ee8cc1Swenshuai.xi typedef __io_write_fn cookie_write_function_t;
391*53ee8cc1Swenshuai.xi typedef __io_seek_fn cookie_seek_function_t;
392*53ee8cc1Swenshuai.xi typedef __io_close_fn cookie_close_function_t;
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi /* The structure with the cookie function pointers.  */
395*53ee8cc1Swenshuai.xi typedef struct
396*53ee8cc1Swenshuai.xi {
397*53ee8cc1Swenshuai.xi   __io_read_fn *read;		/* Read bytes.  */
398*53ee8cc1Swenshuai.xi   __io_write_fn *write;		/* Write bytes.  */
399*53ee8cc1Swenshuai.xi   __io_seek_fn *seek;		/* Seek/tell file position.  */
400*53ee8cc1Swenshuai.xi   __io_close_fn *close;		/* Close file.  */
401*53ee8cc1Swenshuai.xi } _IO_cookie_io_functions_t;
402*53ee8cc1Swenshuai.xi typedef _IO_cookie_io_functions_t cookie_io_functions_t;
403*53ee8cc1Swenshuai.xi 
404*53ee8cc1Swenshuai.xi struct _IO_cookie_file;
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi /* Initialize one of those.  */
407*53ee8cc1Swenshuai.xi extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
408*53ee8cc1Swenshuai.xi 			     void *__cookie, _IO_cookie_io_functions_t __fns);
409*53ee8cc1Swenshuai.xi #endif
410*53ee8cc1Swenshuai.xi 
411*53ee8cc1Swenshuai.xi 
412*53ee8cc1Swenshuai.xi #ifdef __cplusplus
413*53ee8cc1Swenshuai.xi extern "C" {
414*53ee8cc1Swenshuai.xi #endif
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi extern int __underflow (_IO_FILE *);
417*53ee8cc1Swenshuai.xi extern int __uflow (_IO_FILE *);
418*53ee8cc1Swenshuai.xi extern int __overflow (_IO_FILE *, int);
419*53ee8cc1Swenshuai.xi #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
420*53ee8cc1Swenshuai.xi extern _IO_wint_t __wunderflow (_IO_FILE *);
421*53ee8cc1Swenshuai.xi extern _IO_wint_t __wuflow (_IO_FILE *);
422*53ee8cc1Swenshuai.xi extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
423*53ee8cc1Swenshuai.xi #endif
424*53ee8cc1Swenshuai.xi 
425*53ee8cc1Swenshuai.xi #if  __GNUC__ >= 3
426*53ee8cc1Swenshuai.xi # define _IO_BE(expr, res) __builtin_expect ((expr), res)
427*53ee8cc1Swenshuai.xi #else
428*53ee8cc1Swenshuai.xi # define _IO_BE(expr, res) (expr)
429*53ee8cc1Swenshuai.xi #endif
430*53ee8cc1Swenshuai.xi 
431*53ee8cc1Swenshuai.xi #define _IO_getc_unlocked(_fp) \
432*53ee8cc1Swenshuai.xi        (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
433*53ee8cc1Swenshuai.xi 	? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++)
434*53ee8cc1Swenshuai.xi #define _IO_peekc_unlocked(_fp) \
435*53ee8cc1Swenshuai.xi        (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \
436*53ee8cc1Swenshuai.xi 	  && __underflow (_fp) == EOF ? EOF \
437*53ee8cc1Swenshuai.xi 	: *(unsigned char *) (_fp)->_IO_read_ptr)
438*53ee8cc1Swenshuai.xi #define _IO_putc_unlocked(_ch, _fp) \
439*53ee8cc1Swenshuai.xi    (_IO_BE ((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end, 0) \
440*53ee8cc1Swenshuai.xi     ? __overflow (_fp, (unsigned char) (_ch)) \
441*53ee8cc1Swenshuai.xi     : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
444*53ee8cc1Swenshuai.xi # define _IO_getwc_unlocked(_fp) \
445*53ee8cc1Swenshuai.xi   (_IO_BE ((_fp)->_wide_data->_IO_read_ptr >= (_fp)->_wide_data->_IO_read_end,\
446*53ee8cc1Swenshuai.xi 	   0) \
447*53ee8cc1Swenshuai.xi    ? __wuflow (_fp) : (_IO_wint_t) *(_fp)->_wide_data->_IO_read_ptr++)
448*53ee8cc1Swenshuai.xi # define _IO_putwc_unlocked(_wch, _fp) \
449*53ee8cc1Swenshuai.xi   (_IO_BE ((_fp)->_wide_data->_IO_write_ptr \
450*53ee8cc1Swenshuai.xi 	   >= (_fp)->_wide_data->_IO_write_end, 0) \
451*53ee8cc1Swenshuai.xi    ? __woverflow (_fp, _wch) \
452*53ee8cc1Swenshuai.xi    : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch)))
453*53ee8cc1Swenshuai.xi #endif
454*53ee8cc1Swenshuai.xi 
455*53ee8cc1Swenshuai.xi #define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
456*53ee8cc1Swenshuai.xi #define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
457*53ee8cc1Swenshuai.xi 
458*53ee8cc1Swenshuai.xi extern int _IO_getc (_IO_FILE *__fp);
459*53ee8cc1Swenshuai.xi extern int _IO_putc (int __c, _IO_FILE *__fp);
460*53ee8cc1Swenshuai.xi extern int _IO_feof (_IO_FILE *__fp) __THROW;
461*53ee8cc1Swenshuai.xi extern int _IO_ferror (_IO_FILE *__fp) __THROW;
462*53ee8cc1Swenshuai.xi 
463*53ee8cc1Swenshuai.xi extern int _IO_peekc_locked (_IO_FILE *__fp);
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi /* This one is for Emacs. */
466*53ee8cc1Swenshuai.xi #define _IO_PENDING_OUTPUT_COUNT(_fp)	\
467*53ee8cc1Swenshuai.xi 	((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi extern void _IO_flockfile (_IO_FILE *) __THROW;
470*53ee8cc1Swenshuai.xi extern void _IO_funlockfile (_IO_FILE *) __THROW;
471*53ee8cc1Swenshuai.xi extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
472*53ee8cc1Swenshuai.xi 
473*53ee8cc1Swenshuai.xi #ifdef _IO_MTSAFE_IO
474*53ee8cc1Swenshuai.xi # define _IO_peekc(_fp) _IO_peekc_locked (_fp)
475*53ee8cc1Swenshuai.xi # define _IO_flockfile(_fp) \
476*53ee8cc1Swenshuai.xi   if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_flockfile (_fp)
477*53ee8cc1Swenshuai.xi # define _IO_funlockfile(_fp) \
478*53ee8cc1Swenshuai.xi   if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (_fp)
479*53ee8cc1Swenshuai.xi #else
480*53ee8cc1Swenshuai.xi # define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
481*53ee8cc1Swenshuai.xi # define _IO_flockfile(_fp) /**/
482*53ee8cc1Swenshuai.xi # define _IO_funlockfile(_fp) /**/
483*53ee8cc1Swenshuai.xi # define _IO_ftrylockfile(_fp) /**/
484*53ee8cc1Swenshuai.xi # define _IO_cleanup_region_start(_fct, _fp) /**/
485*53ee8cc1Swenshuai.xi # define _IO_cleanup_region_end(_Doit) /**/
486*53ee8cc1Swenshuai.xi #endif /* !_IO_MTSAFE_IO */
487*53ee8cc1Swenshuai.xi 
488*53ee8cc1Swenshuai.xi extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
489*53ee8cc1Swenshuai.xi 			_IO_va_list, int *__restrict);
490*53ee8cc1Swenshuai.xi extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
491*53ee8cc1Swenshuai.xi 			 _IO_va_list);
492*53ee8cc1Swenshuai.xi extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
493*53ee8cc1Swenshuai.xi extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
494*53ee8cc1Swenshuai.xi 
495*53ee8cc1Swenshuai.xi extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
496*53ee8cc1Swenshuai.xi extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
497*53ee8cc1Swenshuai.xi 
498*53ee8cc1Swenshuai.xi extern void _IO_free_backup_area (_IO_FILE *) __THROW;
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
501*53ee8cc1Swenshuai.xi extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
502*53ee8cc1Swenshuai.xi extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
503*53ee8cc1Swenshuai.xi extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
504*53ee8cc1Swenshuai.xi # if __GNUC__ >= 2
505*53ee8cc1Swenshuai.xi /* While compiling glibc we have to handle compatibility with very old
506*53ee8cc1Swenshuai.xi    versions.  */
507*53ee8cc1Swenshuai.xi #  if defined _LIBC && defined SHARED
508*53ee8cc1Swenshuai.xi #   include <shlib-compat.h>
509*53ee8cc1Swenshuai.xi #   if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
510*53ee8cc1Swenshuai.xi #    define _IO_fwide_maybe_incompatible \
511*53ee8cc1Swenshuai.xi   (__builtin_expect (&_IO_stdin_used == NULL, 0))
512*53ee8cc1Swenshuai.xi extern const int _IO_stdin_used;
513*53ee8cc1Swenshuai.xi weak_extern (_IO_stdin_used);
514*53ee8cc1Swenshuai.xi #   endif
515*53ee8cc1Swenshuai.xi #  endif
516*53ee8cc1Swenshuai.xi #  ifndef _IO_fwide_maybe_incompatible
517*53ee8cc1Swenshuai.xi #   define _IO_fwide_maybe_incompatible (0)
518*53ee8cc1Swenshuai.xi #  endif
519*53ee8cc1Swenshuai.xi /* A special optimized version of the function above.  It optimizes the
520*53ee8cc1Swenshuai.xi    case of initializing an unoriented byte stream.  */
521*53ee8cc1Swenshuai.xi #  define _IO_fwide(__fp, __mode) \
522*53ee8cc1Swenshuai.xi   ({ int __result = (__mode);						      \
523*53ee8cc1Swenshuai.xi      if (__result < 0 && ! _IO_fwide_maybe_incompatible)		      \
524*53ee8cc1Swenshuai.xi        {								      \
525*53ee8cc1Swenshuai.xi 	 if ((__fp)->_mode == 0)					      \
526*53ee8cc1Swenshuai.xi 	   /* We know that all we have to do is to set the flag.  */	      \
527*53ee8cc1Swenshuai.xi 	   (__fp)->_mode = -1;						      \
528*53ee8cc1Swenshuai.xi 	 __result = (__fp)->_mode;					      \
529*53ee8cc1Swenshuai.xi        }								      \
530*53ee8cc1Swenshuai.xi      else if (__builtin_constant_p (__mode) && (__mode) == 0)		      \
531*53ee8cc1Swenshuai.xi        __result = _IO_fwide_maybe_incompatible ? -1 : (__fp)->_mode;	      \
532*53ee8cc1Swenshuai.xi      else								      \
533*53ee8cc1Swenshuai.xi        __result = _IO_fwide (__fp, __result);				      \
534*53ee8cc1Swenshuai.xi      __result; })
535*53ee8cc1Swenshuai.xi # endif
536*53ee8cc1Swenshuai.xi 
537*53ee8cc1Swenshuai.xi extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
538*53ee8cc1Swenshuai.xi 			 _IO_va_list, int *__restrict);
539*53ee8cc1Swenshuai.xi extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
540*53ee8cc1Swenshuai.xi 			  _IO_va_list);
541*53ee8cc1Swenshuai.xi extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
542*53ee8cc1Swenshuai.xi extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
543*53ee8cc1Swenshuai.xi #endif
544*53ee8cc1Swenshuai.xi 
545*53ee8cc1Swenshuai.xi #ifdef __LDBL_COMPAT
546*53ee8cc1Swenshuai.xi # include <bits/libio-ldbl.h>
547*53ee8cc1Swenshuai.xi #endif
548*53ee8cc1Swenshuai.xi 
549*53ee8cc1Swenshuai.xi #ifdef __cplusplus
550*53ee8cc1Swenshuai.xi }
551*53ee8cc1Swenshuai.xi #endif
552*53ee8cc1Swenshuai.xi 
553*53ee8cc1Swenshuai.xi #endif /* _IO_STDIO_H */
554