fix return value for fread/fwrite when size argument is 0
authorRich Felker <dalias@aerifal.cx>
Thu, 11 Feb 2016 00:44:19 +0000 (19:44 -0500)
committerRich Felker <dalias@aerifal.cx>
Thu, 11 Feb 2016 00:44:19 +0000 (19:44 -0500)
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.

src/stdio/fread.c
src/stdio/fwrite.c

index 33a65f586ead4649ef537ce53780ea7e12fd0e8e..aef75f7376f700dd584bf346ab1b7b17717ab097 100644 (file)
@@ -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);
 
index fa30c0d384d3128dcc964d15d2bff1a0c5e5e30f..7a567b2c55a94b30288444bd93f6fc48fff7e433 100644 (file)
@@ -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);