1
0

fwrite.c 659 B

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