use restrict everywhere it's required by c99 and/or posix 2008
[musl] / src / stdio / fwrite.c
1 #include "stdio_impl.h"
2
3 size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f)
4 {
5         size_t i=0;
6
7         if (!f->wend && __towrite(f)) return 0;
8
9         if (l > f->wend - f->wpos) return f->write(f, s, l);
10
11         if (f->lbf >= 0) {
12                 /* Match /^(.*\n|)/ */
13                 for (i=l; i && s[i-1] != '\n'; i--);
14                 if (i) {
15                         if (f->write(f, s, i) < i)
16                                 return i;
17                         s += i;
18                         l -= i;
19                 }
20         }
21
22         memcpy(f->wpos, s, l);
23         f->wpos += l;
24         return l+i;
25 }
26
27 size_t fwrite(const void *restrict src, size_t size, size_t nmemb, FILE *restrict f)
28 {
29         size_t k, l = size*nmemb;
30         if (!l) return l;
31         FLOCK(f);
32         k = __fwritex(src, l, f);
33         FUNLOCK(f);
34         return k==l ? nmemb : k/size;
35 }
36
37 weak_alias(fwrite, fwrite_unlocked);