summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-08-12 11:17:06 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-08-12 11:17:06 -0700
commita68a68735a637206baf1f6f5cd221b5fb697e370 (patch)
tree9fb4828b70b4d2b088a40a7f4bfcf24e4f16a8cb
parenta19312bee0a7cef7cfa0fa109312600cc2da36f7 (diff)
downloadsyslinux-a68a68735a637206baf1f6f5cd221b5fb697e370.tar.gz
stdio.h: revamp fread/fwrite to make gcc less unhappy
Implement the special case size == 1 in terms of a macro; this makes gcc 4.3 less unhappy. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--com32/include/stdio.h23
1 files changed, 12 insertions, 11 deletions
diff --git a/com32/include/stdio.h b/com32/include/stdio.h
index bbb75529..0175654d 100644
--- a/com32/include/stdio.h
+++ b/com32/include/stdio.h
@@ -68,18 +68,19 @@ __extern char * fgets(char *, int, FILE *);
__extern size_t _fread(void *, size_t, FILE *);
__extern size_t _fwrite(const void *, size_t, FILE *);
-#ifndef __NO_FREAD_FWRITE_INLINES
-extern __inline__ size_t
-fread(void *__p, size_t __s, size_t __n, FILE *__f)
-{
- return _fread(__p, __s*__n, __f)/__s;
-}
+__extern size_t fread(void *, size_t, size_t, FILE *);
+__extern size_t fwrite(const void *, size_t, size_t, FILE *);
-extern __inline__ size_t
-fwrite(void *__p, size_t __s, size_t __n, FILE *__f)
-{
- return _fwrite(__p, __s*__n, __f)/__s;
-}
+#ifndef __NO_FREAD_FWRITE_INLINES
+#define fread(__p, __s, __n, __f) \
+ ( (__builtin_constant_p(__s) && __s == 1) \
+ ? _fread(__p, __n, __f) \
+ : fread(__p,__s,__n,__f) )
+
+#define fwrite(__p, __s, __n, __f) \
+ ( (__builtin_constant_p(__s) && __s == 1) \
+ ? _fwrite(__p, __n, __f) \
+ : fwrite(__p,__s,__n,__f) )
#endif
/* No seek, but we can tell */