Correct and improve fread_unlocked and fwrite_unlocked optimizations.
This commit is contained in:
parent
2dc9c8cd69
commit
7f2a1e3cf8
|
@ -127,32 +127,47 @@ ferror_unlocked (FILE *__stream) __THROW
|
|||
#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) \
|
||||
(__extension__ ((((__builtin_constant_p (size) \
|
||||
&& ((size) == 0 || __builtin_constant_p (n))) \
|
||||
|| (__builtin_constant_p (n) && (n) == 0)) \
|
||||
&& (size_t) ((size) * (n)) <= 8) \
|
||||
? ({ char *__ptr = (char *) (ptr); \
|
||||
FILE *__stream = (stream); \
|
||||
int __c; \
|
||||
size_t __cnt = (size) * (n); \
|
||||
while (__cnt-- > 0) \
|
||||
size_t __size = (size); \
|
||||
size_t __n = (n); \
|
||||
size_t __readres = __n; \
|
||||
size_t __cnt = __size * __n + 1; \
|
||||
while (--__cnt > 0) \
|
||||
{ \
|
||||
__c = _IO_getc_unlocked (__stream); \
|
||||
int __c = _IO_getc_unlocked (__stream); \
|
||||
if (__c == EOF) \
|
||||
break; \
|
||||
{ \
|
||||
__readres = (__size * __n - __cnt) / __size; \
|
||||
break; \
|
||||
} \
|
||||
*__ptr++ = __c; \
|
||||
} \
|
||||
((size_t) ((size) * (n)) - __cnt) / (size); }) \
|
||||
__readres; }) \
|
||||
: fread_unlocked (ptr, size, n, stream)))
|
||||
|
||||
# define fwrite_unlocked(ptr, size, n, stream) \
|
||||
(__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) \
|
||||
(__extension__ ((((__builtin_constant_p (size) \
|
||||
&& ((size) == 0 || __builtin_constant_p (n))) \
|
||||
|| (__builtin_constant_p (n) && (n) == 0)) \
|
||||
&& (size_t) ((size) * (n)) <= 8) \
|
||||
? ({ const char *__ptr = (const char *) (ptr); \
|
||||
FILE *__stream = (stream); \
|
||||
size_t __cnt = (size) * (n); \
|
||||
while (__cnt-- > 0) \
|
||||
size_t __size = (size); \
|
||||
size_t __n = (n); \
|
||||
size_t __writeres = __n; \
|
||||
size_t __cnt = __size * __n + 1; \
|
||||
while (--__cnt > 0) \
|
||||
if (_IO_putc_unlocked (*__ptr++, __stream) == EOF) \
|
||||
break; \
|
||||
((size_t) ((size) * (n)) - __cnt) / (size); }) \
|
||||
{ \
|
||||
__writeres = (__size * __n - __cnt) / __size; \
|
||||
break; \
|
||||
} \
|
||||
__writeres; }) \
|
||||
: fwrite_unlocked (ptr, size, n, stream)))
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue