1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00
Update.
	* libio/bits/stdio.h (fread_unlocked): Add a couple of (size_t)
	casts to handle funny calls with floating point argument values
	and signed values correctly and without warning.
	(fwrite_unlocked): Likewise.  [BZ #309]
This commit is contained in:
Ulrich Drepper
2004-08-10 04:38:50 +00:00
parent 19c589d904
commit 8799d9356a
2 changed files with 23 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
/* Optimizing macros and inline functions for stdio functions.
Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
Copyright (C) 1998, 2000, 2001, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -129,20 +129,23 @@ ferror_unlocked (FILE *__stream) __THROW
/* 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) \
&& (size_t) (size) * (size_t) (n) <= 8 \
&& (size_t) (size) != 0) \
? ({ char *__ptr = (char *) (ptr); \
FILE *__stream = (stream); \
size_t __cnt; \
for (__cnt = (size) * (n); __cnt > 0; --__cnt) \
for (__cnt = (size_t) (size) * (size_t) (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)) \
((size_t) (size) * (size_t) (n) - __cnt) \
/ (size_t) (size); }) \
: (((__builtin_constant_p (size) && (size_t) (size) == 0) \
|| (__builtin_constant_p (n) && (size_t) (n) == 0)) \
/* Evaluate all parameters once. */ \
? ((void) (ptr), (void) (stream), (void) (size), \
(void) (n), 0) \
@@ -150,18 +153,21 @@ ferror_unlocked (FILE *__stream) __THROW
# define fwrite_unlocked(ptr, size, n, stream) \
(__extension__ ((__builtin_constant_p (size) && __builtin_constant_p (n) \
&& (size_t) ((size) * (n)) <= 8 && (size) != 0) \
&& (size_t) ((size) * (n)) <= 8 && (size_t) (size) != 0) \
? ({ const char *__ptr = (const char *) (ptr); \
FILE *__stream = (stream); \
size_t __cnt; \
for (__cnt = (size) * (n); __cnt > 0; --__cnt) \
for (__cnt = (size_t) (size) * (size_t) (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)) \
((size_t) (size) * (size_t) (n) - __cnt) \
/ (size_t) (size); }) \
: (((__builtin_constant_p (size) && (size_t) (size) == 0) \
|| (__builtin_constant_p (n) && (size_t) (n) == 0)) \
/* Evaluate all parameters once. */ \
? ((void) (ptr), (void) (stream), (void) (size), n) \
? ((void) (ptr), (void) (stream), (void) (size), \
(size_t) n) \
: fwrite_unlocked (ptr, size, n, stream))))
#endif