Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


stdio.h
001: /* Optimizing macros and inline functions for stdio functions.
002:    Copyright (C) 1998, 2000, 2001, 2004, 2007 Free Software Foundation, Inc.
003:    This file is part of the GNU C Library.
004: 
005:    The GNU C Library is free software; you can redistribute it and/or
006:    modify it under the terms of the GNU Lesser General Public
007:    License as published by the Free Software Foundation; either
008:    version 2.1 of the License, or (at your option) any later version.
009: 
010:    The GNU C Library is distributed in the hope that it will be useful,
011:    but WITHOUT ANY WARRANTY; without even the implied warranty of
012:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013:    Lesser General Public License for more details.
014: 
015:    You should have received a copy of the GNU Lesser General Public
016:    License along with the GNU C Library; if not, write to the Free
017:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
018:    02111-1307 USA.  */
019: 
020: #ifndef _STDIO_H
021: # error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
022: #endif
023: 
024: #ifndef __extern_inline
025: # define __STDIO_INLINE inline
026: #else
027: # define __STDIO_INLINE __extern_inline
028: #endif
029: 
030: 
031: #ifdef __USE_EXTERN_INLINES
032: /* For -D_FORTIFY_SOURCE{,=2} bits/stdio2.h will define a different
033:    inline.  */
034: # if !(__USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline)
035: /* Write formatted output to stdout from argument list ARG.  */
036: __STDIO_INLINE int
037: vprintf (__const char *__restrict __fmt, _G_va_list __arg)
038: {
039:   return vfprintf (stdout, __fmt, __arg);
040: }
041: # endif
042: 
043: /* Read a character from stdin.  */
044: __STDIO_INLINE int
045: getchar (void)
046: {
047:   return _IO_getc (stdin);
048: }
049: 
050: 
051: # ifdef __USE_MISC
052: /* Faster version when locking is not necessary.  */
053: __STDIO_INLINE int
054: fgetc_unlocked (FILE *__fp)
055: {
056:   return _IO_getc_unlocked (__fp);
057: }
058: # endif /* misc */
059: 
060: 
061: # if defined __USE_POSIX || defined __USE_MISC
062: /* This is defined in POSIX.1:1996.  */
063: __STDIO_INLINE int
064: getc_unlocked (FILE *__fp)
065: {
066:   return _IO_getc_unlocked (__fp);
067: }
068: 
069: /* This is defined in POSIX.1:1996.  */
070: __STDIO_INLINE int
071: getchar_unlocked (void)
072: {
073:   return _IO_getc_unlocked (stdin);
074: }
075: # endif /* POSIX || misc */
076: 
077: 
078: /* Write a character to stdout.  */
079: __STDIO_INLINE int
080: putchar (int __c)
081: {
082:   return _IO_putc (__c, stdout);
083: }
084: 
085: 
086: # ifdef __USE_MISC
087: /* Faster version when locking is not necessary.  */
088: __STDIO_INLINE int
089: fputc_unlocked (int __c, FILE *__stream)
090: {
091:   return _IO_putc_unlocked (__c, __stream);
092: }
093: # endif /* misc */
094: 
095: 
096: # if defined __USE_POSIX || defined __USE_MISC
097: /* This is defined in POSIX.1:1996.  */
098: __STDIO_INLINE int
099: putc_unlocked (int __c, FILE *__stream)
100: {
101:   return _IO_putc_unlocked (__c, __stream);
102: }
103: 
104: /* This is defined in POSIX.1:1996.  */
105: __STDIO_INLINE int
106: putchar_unlocked (int __c)
107: {
108:   return _IO_putc_unlocked (__c, stdout);
109: }
110: # endif /* POSIX || misc */
111: 
112: 
113: # ifdef __USE_GNU
114: /* Like `getdelim', but reads up to a newline.  */
115: __STDIO_INLINE _IO_ssize_t
116: getline (char **__lineptr, size_t *__n, FILE *__stream)
117: {
118:   return __getdelim (__lineptr, __n, '\n', __stream);
119: }
120: # endif /* GNU */
121: 
122: 
123: # ifdef __USE_MISC
124: /* Faster versions when locking is not required.  */
125: __STDIO_INLINE int
126: __NTH (feof_unlocked (FILE *__stream))
127: {
128:   return _IO_feof_unlocked (__stream);
129: }
130: 
131: /* Faster versions when locking is not required.  */
132: __STDIO_INLINE int
133: __NTH (ferror_unlocked (FILE *__stream))
134: {
135:   return _IO_ferror_unlocked (__stream);
136: }
137: # endif /* misc */
138: 
139: #endif /* Use extern inlines.  */
140: 
141: 
142: #if defined __USE_MISC && defined __GNUC__ && defined __OPTIMIZE__ \
143:     && !defined __cplusplus
144: /* Perform some simple optimizations.  */
145: # define fread_unlocked(ptr, size, n, stream) \
146:   (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
147:                    && (size_t) (size) * (size_t) (n) <= 8                     \
148:                    && (size_t) (size) != 0)                                   \
149:                   ? ({ char *__ptr = (char *) (ptr);                          \
150:                        FILE *__stream = (stream);                             \
151:                        size_t __cnt;                                          \
152:                        for (__cnt = (size_t) (size) * (size_t) (n);           \
153:                             __cnt > 0; --__cnt)                               \
154:                          {                                                    \
155:                            int __c = _IO_getc_unlocked (__stream);            \
156:                            if (__c == EOF)                                    \
157:                              break;                                           \
158:                            *__ptr++ = __c;                                    \
159:                          }                                                    \
160:                        ((size_t) (size) * (size_t) (n) - __cnt)               \
161:                         / (size_t) (size); })                                 \
162:                   : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
163:                       || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
164:                         /* Evaluate all parameters once.  */                  \
165:                      ? ((void) (ptr), (void) (stream), (void) (size),         \
166:                         (void) (n), (size_t) 0)                               \
167:                      : fread_unlocked (ptr, size, n, stream))))
168: 
169: # define fwrite_unlocked(ptr, size, n, stream) \
170:   (__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n)    \
171:                    && (size_t) (size) * (size_t) (n) <= 8                     \
172:                    && (size_t) (size) != 0)                                   \
173:                   ? ({ const char *__ptr = (const char *) (ptr);              \
174:                        FILE *__stream = (stream);                             \
175:                        size_t __cnt;                                          \
176:                        for (__cnt = (size_t) (size) * (size_t) (n);           \
177:                             __cnt > 0; --__cnt)                               \
178:                          if (_IO_putc_unlocked (*__ptr++, __stream) == EOF)   \
179:                            break;                                             \
180:                        ((size_t) (size) * (size_t) (n) - __cnt)               \
181:                         / (size_t) (size); })                                 \
182:                   : (((__builtin_constant_p (size) && (size_t) (size) == 0)   \
183:                       || (__builtin_constant_p (n) && (size_t) (n) == 0))     \
184:                         /* Evaluate all parameters once.  */                  \
185:                      ? ((void) (ptr), (void) (stream), (void) (size),         \
186:                         (void) (n), (size_t) 0)                               \
187:                      : fwrite_unlocked (ptr, size, n, stream))))
188: #endif
189: 
190: /* Define helper macro.  */
191: #undef __STDIO_INLINE
192: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/