mirror of
https://github.com/fluencelabs/musl
synced 2025-05-22 04:01:34 +00:00
this header evolved to facilitate the extremely lazy practice of omitting explicit includes of the necessary headers in individual stdio source files; not only was this sloppy, but it also increased build time. now, stdio_impl.h is only including the headers it needs for its own use; any further headers needed by source files are included directly where needed.
39 lines
715 B
C
39 lines
715 B
C
#include "stdio_impl.h"
|
|
#include <string.h>
|
|
|
|
size_t __fwritex(const unsigned char *restrict s, size_t l, FILE *restrict f)
|
|
{
|
|
size_t i=0;
|
|
|
|
if (!f->wend && __towrite(f)) return 0;
|
|
|
|
if (l > f->wend - f->wpos) return f->write(f, s, l);
|
|
|
|
if (f->lbf >= 0) {
|
|
/* Match /^(.*\n|)/ */
|
|
for (i=l; i && s[i-1] != '\n'; i--);
|
|
if (i) {
|
|
if (f->write(f, s, i) < i)
|
|
return i;
|
|
s += i;
|
|
l -= i;
|
|
}
|
|
}
|
|
|
|
memcpy(f->wpos, s, l);
|
|
f->wpos += l;
|
|
return l+i;
|
|
}
|
|
|
|
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;
|
|
FLOCK(f);
|
|
k = __fwritex(src, l, f);
|
|
FUNLOCK(f);
|
|
return k==l ? nmemb : k/size;
|
|
}
|
|
|
|
weak_alias(fwrite, fwrite_unlocked);
|