#include <string.h>

#include "stdio_impl.h"

#define MIN(a, b) ((a) < (b) ? (a) : (b))

size_t fread(void* restrict destv, size_t size, size_t nmemb, FILE* restrict f) {
  unsigned char* dest = destv;
  size_t len = size * nmemb, l = len, k;
  if (!size)
    nmemb = 0;

  FLOCK(f);

  f->mode |= f->mode - 1;

  if (f->rend - f->rpos > 0) {
    /* First exhaust the buffer. */
    k = MIN(f->rend - f->rpos, l);
    memcpy(dest, f->rpos, k);
    f->rpos += k;
    dest += k;
    l -= k;
  }

  /* Read the remainder directly */
  for (; l; l -= k, dest += k) {
    k = __toread(f) ? 0 : f->read(f, dest, l);
    if (k + 1 <= 1) {
      FUNLOCK(f);
      return (len - l) / size;
    }
  }

  FUNLOCK(f);
  return nmemb;
}

weak_alias(fread, fread_unlocked);
