_validutf8.c - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
_validutf8.c (552B)
---
1 #include <wchar.h>
2
3 #include "../libc.h"
4
5 struct range {
6 unsigned long begin, end;
7 int valid;
8 int nbytes;
9 };
10
11 int
12 _validutf8(wchar_t wc, int *nbytes)
13 {
14
15 static struct range ranges[] = {
16 {0, 0x80, 1, 1},
17 {0x80, 0x800, 1, 2},
18 {0x800, 0xD800, 1, 3},
19 {0xD800, 0xDD00, 0, 3},
20 {0xDD00, 0x10000, 1, 3},
21 {0x10000, 0x110000, 1, 4},
22 {0x110000, -1ul, 0, 0},
23 };
24 struct range *bp;
25
26 for (bp = ranges; bp->begin > wc || bp->end <= wc; ++bp)
27 ;
28 *nbytes = bp->nbytes;
29
30 return bp->valid;
31 }