#include "stdio_impl.h"

int __fseeko_unlocked(FILE* f, off_t off, int whence) {
  /* Adjust relative offset for unread data in buffer, if any. */
  if (whence == SEEK_CUR)
    off -= f->rend - f->rpos;

  /* Flush write buffer, and report error on failure. */
  if (f->wpos > f->wbase) {
    f->write(f, 0, 0);
    if (!f->wpos)
      return -1;
  }

  /* Leave writing mode */
  f->wpos = f->wbase = f->wend = 0;

  /* Perform the underlying seek. */
  if (f->seek(f, off, whence) < 0)
    return -1;

  /* If seek succeeded, file is seekable and we discard read buffer. */
  f->rpos = f->rend = 0;
  f->flags &= ~F_EOF;

  return 0;
}

int __fseeko(FILE* f, off_t off, int whence) {
  int result;
  FLOCK(f);
  result = __fseeko_unlocked(f, off, whence);
  FUNLOCK(f);
  return result;
}

int fseek(FILE* f, long off, int whence) {
  return __fseeko(f, off, whence);
}

weak_alias(__fseeko, fseeko);

weak_alias(__fseeko, fseeko64);
