| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | /* Optimizing macros and inline functions for stdio functions.   Copyright (C) 198 Free Software Foundation, Inc.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 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   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the GNU C Library; see the file COPYING.LIB.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */#ifndef _STDIO_H# error "Never include <bits/stdio.h> directly; use <stdio.h> instead."#endif#ifdef __cplusplus# define __STDIO_INLINE inline#else# define __STDIO_INLINE extern __inline#endif#ifdef __USE_EXTERN_INLINES/* Write formatted output to stdout from argument list ARG.  */__STDIO_INLINE intvprintf (__const char *__restrict __fmt, _G_va_list __arg){  return vfprintf (stdout, __fmt, __arg);}/* Read a character from stdin.  */__STDIO_INLINE intgetchar (void){  return _IO_getc (stdin);}# if defined __USE_POSIX || defined __USE_MISC/* This is defined in POSIX.1:1996.  */__STDIO_INLINE intgetc_unlocked (FILE *__fp){  return _IO_getc_unlocked (__fp);}/* This is defined in POSIX.1:1996.  */__STDIO_INLINE intgetchar_unlocked (void){  return _IO_getc_unlocked (stdin);}# endif	/* POSIX || misc *//* Write a character to stdout.  */__STDIO_INLINE intputchar (int __c){  return _IO_putc (__c, stdout);}# ifdef __USE_MISC/* Faster version when locking is not necessary.  */__STDIO_INLINE intfputc_unlocked (int __c, FILE *__stream){  return _IO_putc_unlocked (__c, __stream);}# endif /* misc */# if defined __USE_POSIX || defined __USE_MISC/* This is defined in POSIX.1:1996.  */__STDIO_INLINE intputc_unlocked (int __c, FILE *__stream){  return _IO_putc_unlocked (__c, __stream);}/* This is defined in POSIX.1:1996.  */__STDIO_INLINE intputchar_unlocked (int __c){  return _IO_putc_unlocked (__c, stdout);}# endif	/* POSIX || misc */# ifdef	__USE_GNU/* Like `getdelim', but reads up to a newline.  */__STDIO_INLINE _IO_ssize_tgetline (char **__lineptr, size_t *__n, FILE *__stream){  return __getdelim (__lineptr, __n, '\n', __stream);}# endif /* GNU */# ifdef __USE_MISC/* Faster versions when locking is not required.  */__STDIO_INLINE intfeof_unlocked (FILE *__stream){  return _IO_feof_unlocked (__stream);}/* Faster versions when locking is not required.  */__STDIO_INLINE intferror_unlocked (FILE *__stream){  return _IO_ferror_unlocked (__stream);}# endif /* misc */#endif /* Use extern inlines.  */#if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__/* Perform some simple optimizations.  */# define fread_unlocked(ptr, size, n, stream) \  (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \		   && (size_t) ((size) * (n)) <= 8 && (size) != 0)	      \		  ? ({ char *__ptr = (char *) (ptr);			      \		       FILE *__stream = (stream);			      \		       size_t __cnt;					      \		       for (__cnt = (size) * (n); __cnt > 0; --__cnt)	      \			 {						      \			   int __c = _IO_getc_unlocked (__stream);	      \			   if (__c == EOF)				      \			     break;					      \			   *__ptr++ = __c;				      \			 }						      \		       ((size_t) ((size) * (n)) - __cnt) / (size); })	      \		  : (((__builtin_constant_p (size) && (size) == 0)	      \		      || (__builtin_constant_p (n) && (n) == 0))	      \			/* Evaluate all parameters once.  */		      \		     ? ((void) (ptr), (void) (stream), (void) (size),	      \			(void) (n), 0)					      \		     : fread_unlocked (ptr, size, n, stream))))# define fwrite_unlocked(ptr, size, n, stream) \  (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \		   && (size_t) ((size) * (n)) <= 8 && (size) != 0)	      \		  ? ({ const char *__ptr = (const char *) (ptr);	      \		       FILE *__stream = (stream);			      \		       size_t __cnt;					      \		       for (__cnt = (size) * (n); __cnt > 0; --__cnt)	      \			 if (_IO_putc_unlocked (*__ptr++, __stream) == EOF)   \			   break;					      \		       ((size_t) ((size) * (n)) - __cnt) / (size); })	      \		  : (((__builtin_constant_p (size) && (size) == 0)	      \		      || (__builtin_constant_p (n) && (n) == 0))	      \			/* Evaluate all parameters once.  */		      \		     ? ((void) (ptr), (void) (stream), (void) (size), n)      \		     : fwrite_unlocked (ptr, size, n, stream))))#endif/* Define helper macro.  */#undef __STDIO_INLINE
 |