#include "stdio_impl.h"
#include "locale_impl.h"
#include <wchar.h>
#include <limits.h>
#include <ctype.h>

wint_t __fputwc_unlocked(wchar_t c, FILE* f) {
  char mbc[MB_LEN_MAX];
  int l;
  locale_t *ploc = &CURRENT_LOCALE, loc = *ploc;

  if (f->mode <= 0)
    fwide(f, 1);
  *ploc = f->locale;

  if (isascii(c)) {
    c = putc_unlocked(c, f);
  } else if (f->wpos + MB_LEN_MAX < f->wend) {
    l = wctomb((void*)f->wpos, c);
    if (l < 0)
      c = WEOF;
    else
      f->wpos += l;
  } else {
    l = wctomb(mbc, c);
    if (l < 0 || __fwritex((void*)mbc, l, f) < l)
      c = WEOF;
  }
  if (c == WEOF)
    f->flags |= F_ERR;
  *ploc = loc;
  return c;
}

wint_t fputwc(wchar_t c, FILE* f) {
  FLOCK(f);
  c = __fputwc_unlocked(c, f);
  FUNLOCK(f);
  return c;
}

weak_alias(__fputwc_unlocked, fputwc_unlocked);
weak_alias(__fputwc_unlocked, putwc_unlocked);
