/*
 * This code was written by Rich Felker in 2010; no copyright is claimed.
 * This code is in the public domain. Attribution is appreciated but
 * unnecessary.
 */

#include <stdlib.h>
#include <wchar.h>
#include <errno.h>
#include "internal.h"

size_t wcrtomb(char* restrict s, wchar_t wc, mbstate_t* restrict st) {
  if (!s)
    return 1;
  if ((unsigned)wc < 0x80) {
    *s = wc;
    return 1;
  } else if (MB_CUR_MAX == 1) {
    if (!IS_CODEUNIT(wc)) {
      errno = EILSEQ;
      return -1;
    }
    *s = wc;
    return 1;
  } else if ((unsigned)wc < 0x800) {
    *s++ = 0xc0 | (wc >> 6);
    *s = 0x80 | (wc & 0x3f);
    return 2;
  } else if ((unsigned)wc < 0xd800 || (unsigned)wc - 0xe000 < 0x2000) {
    *s++ = 0xe0 | (wc >> 12);
    *s++ = 0x80 | ((wc >> 6) & 0x3f);
    *s = 0x80 | (wc & 0x3f);
    return 3;
  } else if ((unsigned)wc - 0x10000 < 0x100000) {
    *s++ = 0xf0 | (wc >> 18);
    *s++ = 0x80 | ((wc >> 12) & 0x3f);
    *s++ = 0x80 | ((wc >> 6) & 0x3f);
    *s = 0x80 | (wc & 0x3f);
    return 4;
  }
  errno = EILSEQ;
  return -1;
}
