diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-08-10 04:38:50 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-08-10 04:38:50 +0000 |
commit | 8799d9356a093d545ab635acb8780e5aae59802d (patch) | |
tree | 1954e80bec9ea5bffa8f48e4882809aa3d788515 /libio/bits | |
parent | 19c589d904cab62cafcc7d7392462721d690c8cd (diff) | |
download | glibc-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/bits')
-rw-r--r-- | libio/bits/stdio.h | 30 |
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 |