aboutsummaryrefslogtreecommitdiff
path: root/libio
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-08-10 04:38:50 +0000
committerUlrich Drepper <drepper@redhat.com>2004-08-10 04:38:50 +0000
commit8799d9356a093d545ab635acb8780e5aae59802d (patch)
tree1954e80bec9ea5bffa8f48e4882809aa3d788515 /libio
parent19c589d904cab62cafcc7d7392462721d690c8cd (diff)
downloadglibc-8799d9356a093d545ab635acb8780e5aae59802d.tar
glibc-8799d9356a093d545ab635acb8780e5aae59802d.tar.gz
glibc-8799d9356a093d545ab635acb8780e5aae59802d.tar.bz2
glibc-8799d9356a093d545ab635acb8780e5aae59802d.zip
[BZ #309]
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]
Diffstat (limited to 'libio')
-rw-r--r--libio/bits/stdio.h30
1 files changed, 18 insertions, 12 deletions
diff --git a/libio/bits/stdio.h b/libio/bits/stdio.h
index 14ebd7e276..e602dbd826 100644
--- a/libio/bits/stdio.h
+++ b/libio/bits/stdio.h
@@ -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