xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/bits/stdio.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Optimizing macros and inline functions for stdio functions.
2*53ee8cc1Swenshuai.xi    Copyright (C) 1998, 2000, 2001, 2004, 2007 Free Software Foundation, Inc.
3*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
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 #ifndef _STDIO_H
21*53ee8cc1Swenshuai.xi # error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
22*53ee8cc1Swenshuai.xi #endif
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi #ifndef __extern_inline
25*53ee8cc1Swenshuai.xi # define __STDIO_INLINE inline
26*53ee8cc1Swenshuai.xi #else
27*53ee8cc1Swenshuai.xi # define __STDIO_INLINE __extern_inline
28*53ee8cc1Swenshuai.xi #endif
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi #ifdef __USE_EXTERN_INLINES
32*53ee8cc1Swenshuai.xi /* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
33*53ee8cc1Swenshuai.xi    inline.  */
34*53ee8cc1Swenshuai.xi # if !(__USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline)
35*53ee8cc1Swenshuai.xi /* Write formatted output to stdout from argument list ARG.  */
36*53ee8cc1Swenshuai.xi __STDIO_INLINE int
vprintf(__const char * __restrict __fmt,_G_va_list __arg)37*53ee8cc1Swenshuai.xi vprintf (__const char *__restrict __fmt, _G_va_list __arg)
38*53ee8cc1Swenshuai.xi {
39*53ee8cc1Swenshuai.xi   return vfprintf (stdout, __fmt, __arg);
40*53ee8cc1Swenshuai.xi }
41*53ee8cc1Swenshuai.xi # endif
42*53ee8cc1Swenshuai.xi 
43*53ee8cc1Swenshuai.xi /* Read a character from stdin.  */
44*53ee8cc1Swenshuai.xi __STDIO_INLINE int
getchar(void)45*53ee8cc1Swenshuai.xi getchar (void)
46*53ee8cc1Swenshuai.xi {
47*53ee8cc1Swenshuai.xi   return _IO_getc (stdin);
48*53ee8cc1Swenshuai.xi }
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi 
51*53ee8cc1Swenshuai.xi # ifdef __USE_MISC
52*53ee8cc1Swenshuai.xi /* Faster version when locking is not necessary.  */
53*53ee8cc1Swenshuai.xi __STDIO_INLINE int
fgetc_unlocked(FILE * __fp)54*53ee8cc1Swenshuai.xi fgetc_unlocked (FILE *__fp)
55*53ee8cc1Swenshuai.xi {
56*53ee8cc1Swenshuai.xi   return _IO_getc_unlocked (__fp);
57*53ee8cc1Swenshuai.xi }
58*53ee8cc1Swenshuai.xi # endif /* misc */
59*53ee8cc1Swenshuai.xi 
60*53ee8cc1Swenshuai.xi 
61*53ee8cc1Swenshuai.xi # if defined __USE_POSIX || defined __USE_MISC
62*53ee8cc1Swenshuai.xi /* This is defined in POSIX.1:1996.  */
63*53ee8cc1Swenshuai.xi __STDIO_INLINE int
getc_unlocked(FILE * __fp)64*53ee8cc1Swenshuai.xi getc_unlocked (FILE *__fp)
65*53ee8cc1Swenshuai.xi {
66*53ee8cc1Swenshuai.xi   return _IO_getc_unlocked (__fp);
67*53ee8cc1Swenshuai.xi }
68*53ee8cc1Swenshuai.xi 
69*53ee8cc1Swenshuai.xi /* This is defined in POSIX.1:1996.  */
70*53ee8cc1Swenshuai.xi __STDIO_INLINE int
getchar_unlocked(void)71*53ee8cc1Swenshuai.xi getchar_unlocked (void)
72*53ee8cc1Swenshuai.xi {
73*53ee8cc1Swenshuai.xi   return _IO_getc_unlocked (stdin);
74*53ee8cc1Swenshuai.xi }
75*53ee8cc1Swenshuai.xi # endif	/* POSIX || misc */
76*53ee8cc1Swenshuai.xi 
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi /* Write a character to stdout.  */
79*53ee8cc1Swenshuai.xi __STDIO_INLINE int
putchar(int __c)80*53ee8cc1Swenshuai.xi putchar (int __c)
81*53ee8cc1Swenshuai.xi {
82*53ee8cc1Swenshuai.xi   return _IO_putc (__c, stdout);
83*53ee8cc1Swenshuai.xi }
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi 
86*53ee8cc1Swenshuai.xi # ifdef __USE_MISC
87*53ee8cc1Swenshuai.xi /* Faster version when locking is not necessary.  */
88*53ee8cc1Swenshuai.xi __STDIO_INLINE int
fputc_unlocked(int __c,FILE * __stream)89*53ee8cc1Swenshuai.xi fputc_unlocked (int __c, FILE *__stream)
90*53ee8cc1Swenshuai.xi {
91*53ee8cc1Swenshuai.xi   return _IO_putc_unlocked (__c, __stream);
92*53ee8cc1Swenshuai.xi }
93*53ee8cc1Swenshuai.xi # endif /* misc */
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi # if defined __USE_POSIX || defined __USE_MISC
97*53ee8cc1Swenshuai.xi /* This is defined in POSIX.1:1996.  */
98*53ee8cc1Swenshuai.xi __STDIO_INLINE int
putc_unlocked(int __c,FILE * __stream)99*53ee8cc1Swenshuai.xi putc_unlocked (int __c, FILE *__stream)
100*53ee8cc1Swenshuai.xi {
101*53ee8cc1Swenshuai.xi   return _IO_putc_unlocked (__c, __stream);
102*53ee8cc1Swenshuai.xi }
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi /* This is defined in POSIX.1:1996.  */
105*53ee8cc1Swenshuai.xi __STDIO_INLINE int
putchar_unlocked(int __c)106*53ee8cc1Swenshuai.xi putchar_unlocked (int __c)
107*53ee8cc1Swenshuai.xi {
108*53ee8cc1Swenshuai.xi   return _IO_putc_unlocked (__c, stdout);
109*53ee8cc1Swenshuai.xi }
110*53ee8cc1Swenshuai.xi # endif	/* POSIX || misc */
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi # ifdef	__USE_GNU
114*53ee8cc1Swenshuai.xi /* Like `getdelim', but reads up to a newline.  */
115*53ee8cc1Swenshuai.xi __STDIO_INLINE _IO_ssize_t
getline(char ** __lineptr,size_t * __n,FILE * __stream)116*53ee8cc1Swenshuai.xi getline (char **__lineptr, size_t *__n, FILE *__stream)
117*53ee8cc1Swenshuai.xi {
118*53ee8cc1Swenshuai.xi   return __getdelim (__lineptr, __n, '\n', __stream);
119*53ee8cc1Swenshuai.xi }
120*53ee8cc1Swenshuai.xi # endif /* GNU */
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi # ifdef __USE_MISC
124*53ee8cc1Swenshuai.xi /* Faster versions when locking is not required.  */
125*53ee8cc1Swenshuai.xi __STDIO_INLINE int
__NTH(feof_unlocked (FILE * __stream))126*53ee8cc1Swenshuai.xi __NTH (feof_unlocked (FILE *__stream))
127*53ee8cc1Swenshuai.xi {
128*53ee8cc1Swenshuai.xi   return _IO_feof_unlocked (__stream);
129*53ee8cc1Swenshuai.xi }
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi /* Faster versions when locking is not required.  */
132*53ee8cc1Swenshuai.xi __STDIO_INLINE int
__NTH(ferror_unlocked (FILE * __stream))133*53ee8cc1Swenshuai.xi __NTH (ferror_unlocked (FILE *__stream))
134*53ee8cc1Swenshuai.xi {
135*53ee8cc1Swenshuai.xi   return _IO_ferror_unlocked (__stream);
136*53ee8cc1Swenshuai.xi }
137*53ee8cc1Swenshuai.xi # endif /* misc */
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi #endif /* Use extern inlines.  */
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi #if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
143*53ee8cc1Swenshuai.xi     && !defined __cplusplus
144*53ee8cc1Swenshuai.xi /* Perform some simple optimizations.  */
145*53ee8cc1Swenshuai.xi # define fread_unlocked(ptr, size, n, stream) \
146*53ee8cc1Swenshuai.xi   (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
147*53ee8cc1Swenshuai.xi 		   && (size_t) (size) * (size_t) (n) <= 8		      \
148*53ee8cc1Swenshuai.xi 		   && (size_t) (size) != 0)				      \
149*53ee8cc1Swenshuai.xi 		  ? ({ char *__ptr = (char *) (ptr);			      \
150*53ee8cc1Swenshuai.xi 		       FILE *__stream = (stream);			      \
151*53ee8cc1Swenshuai.xi 		       size_t __cnt;					      \
152*53ee8cc1Swenshuai.xi 		       for (__cnt = (size_t) (size) * (size_t) (n);	      \
153*53ee8cc1Swenshuai.xi 			    __cnt > 0; --__cnt)				      \
154*53ee8cc1Swenshuai.xi 			 {						      \
155*53ee8cc1Swenshuai.xi 			   int __c = _IO_getc_unlocked (__stream);	      \
156*53ee8cc1Swenshuai.xi 			   if (__c == EOF)				      \
157*53ee8cc1Swenshuai.xi 			     break;					      \
158*53ee8cc1Swenshuai.xi 			   *__ptr++ = __c;				      \
159*53ee8cc1Swenshuai.xi 			 }						      \
160*53ee8cc1Swenshuai.xi 		       ((size_t) (size) * (size_t) (n) - __cnt)		      \
161*53ee8cc1Swenshuai.xi 			/ (size_t) (size); })				      \
162*53ee8cc1Swenshuai.xi 		  : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
163*53ee8cc1Swenshuai.xi 		      || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
164*53ee8cc1Swenshuai.xi 			/* Evaluate all parameters once.  */		      \
165*53ee8cc1Swenshuai.xi 		     ? ((void) (ptr), (void) (stream), (void) (size),	      \
166*53ee8cc1Swenshuai.xi 			(void) (n), (size_t) 0)				      \
167*53ee8cc1Swenshuai.xi 		     : fread_unlocked (ptr, size, n, stream))))
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi # define fwrite_unlocked(ptr, size, n, stream) \
170*53ee8cc1Swenshuai.xi   (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
171*53ee8cc1Swenshuai.xi 		   && (size_t) (size) * (size_t) (n) <= 8		      \
172*53ee8cc1Swenshuai.xi 		   && (size_t) (size) != 0)				      \
173*53ee8cc1Swenshuai.xi 		  ? ({ const char *__ptr = (const char *) (ptr);	      \
174*53ee8cc1Swenshuai.xi 		       FILE *__stream = (stream);			      \
175*53ee8cc1Swenshuai.xi 		       size_t __cnt;					      \
176*53ee8cc1Swenshuai.xi 		       for (__cnt = (size_t) (size) * (size_t) (n);	      \
177*53ee8cc1Swenshuai.xi 			    __cnt > 0; --__cnt)				      \
178*53ee8cc1Swenshuai.xi 			 if (_IO_putc_unlocked (*__ptr++, __stream) == EOF)   \
179*53ee8cc1Swenshuai.xi 			   break;					      \
180*53ee8cc1Swenshuai.xi 		       ((size_t) (size) * (size_t) (n) - __cnt)		      \
181*53ee8cc1Swenshuai.xi 			/ (size_t) (size); })				      \
182*53ee8cc1Swenshuai.xi 		  : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
183*53ee8cc1Swenshuai.xi 		      || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
184*53ee8cc1Swenshuai.xi 			/* Evaluate all parameters once.  */		      \
185*53ee8cc1Swenshuai.xi 		     ? ((void) (ptr), (void) (stream), (void) (size),	      \
186*53ee8cc1Swenshuai.xi 			(void) (n), (size_t) 0)				      \
187*53ee8cc1Swenshuai.xi 		     : fwrite_unlocked (ptr, size, n, stream))))
188*53ee8cc1Swenshuai.xi #endif
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi /* Define helper macro.  */
191*53ee8cc1Swenshuai.xi #undef __STDIO_INLINE
192