#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) {
      size_t n = f->write(f, s, i);
      if (n < i)
        return n;
      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 (!size)
    nmemb = 0;
  FLOCK(f);
  k = __fwritex(src, l, f);
  FUNLOCK(f);
  return k == l ? nmemb : k / size;
}

weak_alias(fwrite, fwrite_unlocked);
