scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

 1#include <errno.h>
 2#include <wchar.h>
 3
 4#include "../libc.h"
 5
 6#undef wcrtomb
 7
 8size_t
 9wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps)
10{
11	int i, n;
12	unsigned long c = wc;
13
14	if (!s)
15		return 1;
16
17	if (c < 0x80) {
18		*s = wc;
19		return 1;
20	}
21
22	if (!_validutf8(wc, &n)) {
23		errno = EILSEQ;
24		return -1;
25	}
26	n--;
27
28	*s = 0x80;
29	for (i = 0; i < n; i++) {
30		*s >>= 1;
31		*s |= 0x80;
32
33		s[n-i] = 0x80 | (c & 0x3f);
34		c >>= 6;
35	}
36	*s |= c;
37
38	return n+1;
39}