aboutsummaryrefslogtreecommitdiffstats
path: root/src/writer.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-07-30 10:19:06 +0200
committerDavid Robillard <d@drobilla.net>2017-07-30 10:19:06 +0200
commitf15d475b73b994297dfebe522896acf0d0b7c471 (patch)
treeeaa244883e568a4cc81b11f2d90e95d1d54e039d /src/writer.c
parentc0c776af18c57d3aef66889570fe2116efb82677 (diff)
downloadserd-f15d475b73b994297dfebe522896acf0d0b7c471.tar.gz
serd-f15d475b73b994297dfebe522896acf0d0b7c471.tar.bz2
serd-f15d475b73b994297dfebe522896acf0d0b7c471.zip
Move parse_utf8_char to shared internal header
Diffstat (limited to 'src/writer.c')
-rw-r--r--src/writer.c21
1 files changed, 1 insertions, 20 deletions
diff --git a/src/writer.c b/src/writer.c
index 94e2c1d2..a359ee6c 100644
--- a/src/writer.c
+++ b/src/writer.c
@@ -174,32 +174,13 @@ sink(const void* buf, size_t len, SerdWriter* writer)
return serd_byte_sink_write(buf, len, &writer->byte_sink);
}
-// Parse a UTF-8 character, set *size to the length, and return the code point
-static inline uint32_t
-parse_utf8_char(SerdWriter* writer, const uint8_t* utf8, size_t* size)
-{
- switch (*size = utf8_num_bytes(utf8[0])) {
- case 1: case 2: case 3: case 4:
- break;
- default:
- return *size = 0;
- }
-
- uint32_t c = utf8[0] & ((1 << (8 - *size)) - 1);
- for (size_t i = 1; i < *size; ++i) {
- const uint8_t in = utf8[i] & 0x3F;
- c = (c << 6) | in;
- }
- return c;
-}
-
// Write a single character, as an escape for single byte characters
// (Caller prints any single byte characters that don't need escaping)
static size_t
write_character(SerdWriter* writer, const uint8_t* utf8, size_t* size)
{
char escape[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- const uint32_t c = parse_utf8_char(writer, utf8, size);
+ const uint32_t c = parse_utf8_char(utf8, size);
switch (*size) {
case 0:
w_err(writer, SERD_ERR_BAD_ARG, "invalid UTF-8: %X\n", utf8[0]);