Browse Source

fix return value for fread/fwrite when size argument is 0

when the size argument was zero but nmemb was nonzero, these functions
were returning nmemb, despite no data having been written.
conceptually this is not wrong, but the standard requires a return
value of zero in this case.
Rich Felker 9 years ago
parent
commit
500c6886c6
2 changed files with 2 additions and 0 deletions
  1. 1 0
      src/stdio/fread.c
  2. 1 0
      src/stdio/fwrite.c

+ 1 - 0
src/stdio/fread.c

@@ -7,6 +7,7 @@ size_t fread(void *restrict destv, size_t size, size_t nmemb, FILE *restrict f)
 {
 	unsigned char *dest = destv;
 	size_t len = size*nmemb, l = len, k;
+	if (!size) nmemb = 0;
 
 	FLOCK(f);
 

+ 1 - 0
src/stdio/fwrite.c

@@ -28,6 +28,7 @@ size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f)
 size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f)
 {
 	size_t k, l = size*nmemb;
+	if (!size) nmemb = 0;
 	FLOCK(f);
 	k = __fwritex(src, l, f);
 	FUNLOCK(f);