remove LFS64 symbol aliases; replace with dynamic linker remapping
[musl] / src / stdio / fwrite.c
index 02908c4..7a567b2 100644 (file)
@@ -1,6 +1,7 @@
 #include "stdio_impl.h"
+#include <string.h>
 
-size_t __fwritex(const unsigned char *s, size_t l, FILE *f)
+size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f)
 {
        size_t i=0;
 
@@ -12,8 +13,8 @@ size_t __fwritex(const unsigned char *s, size_t l, FILE *f)
                /* Match /^(.*\n|)/ */
                for (i=l; i && s[i-1] != '\n'; i--);
                if (i) {
-                       if (f->write(f, s, i) < i)
-                               return i;
+                       size_t n = f->write(f, s, i);
+                       if (n < i) return n;
                        s += i;
                        l -= i;
                }
@@ -24,14 +25,14 @@ size_t __fwritex(const unsigned char *s, size_t l, FILE *f)
        return l+i;
 }
 
-size_t fwrite(const void *src, size_t size, size_t nmemb, FILE *f)
+size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f)
 {
        size_t k, l = size*nmemb;
-       if (!l) return l;
+       if (!size) nmemb = 0;
        FLOCK(f);
        k = __fwritex(src, l, f);
        FUNLOCK(f);
-       return k==l ? nmemb : l/size;
+       return k==l ? nmemb : k/size;
 }
 
 weak_alias(fwrite, fwrite_unlocked);