scc

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

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

 1#include <limits.h>
 2#include <string.h>
 3#include <wchar.h>
 4
 5#undef mbsrtowcs
 6
 7size_t
 8mbsrtowcs(wchar_t *restrict dest, const char **restrict src, size_t len,
 9          mbstate_t *restrict ps)
10{
11	wchar_t wc;
12	const char *s = *src;
13	size_t cnt, n;
14	static mbstate_t st;
15
16	if (!ps)
17		ps = &st;
18
19	n = 0;
20	for (;;) {
21		cnt = mbrtowc(&wc, s, MB_LEN_MAX, ps);
22		if (cnt == (size_t) -2) {
23			s += MB_LEN_MAX;
24			continue;
25		}
26		if (cnt == (size_t) -1)
27			return -1;
28
29		if (dest) {
30			if (n == len) {
31				*src = s;
32				break;
33			}
34			*dest++ = wc;
35		}
36
37		if (wc == 0) {
38			if (dest)
39				*src = NULL;
40			break;
41		}
42
43		s += cnt;
44		n++;
45
46	}
47
48	return n;
49}