|
|
@ -501,18 +501,22 @@ static int scan_hex(const char c) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int scan_utf_16(const char *str, unsigned int *cp) { |
|
|
|
static int scan_utf_16(const char *str, unsigned int *cp) { |
|
|
|
unsigned int cp1 = scan_hex(*str++) << 12; |
|
|
|
int i = 4; |
|
|
|
unsigned int cp2 = scan_hex(*str++) << 8; |
|
|
|
int intermediate; |
|
|
|
unsigned int cp3 = scan_hex(*str++) << 4; |
|
|
|
|
|
|
|
unsigned int cp4 = scan_hex(*str); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (cp1 == EOF || cp2 == EOF || cp3 == EOF || cp4 == EOF) { |
|
|
|
*cp = 0; |
|
|
|
return EOF; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
*cp = cp1 | cp2 | cp3 | cp4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
while (i--) { |
|
|
|
|
|
|
|
intermediate = scan_hex(*str++); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (intermediate == EOF) { |
|
|
|
|
|
|
|
return EOF; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*cp |= intermediate << (i << 2); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int parse_utf_16(const char **unprocessed, char **processed) { |
|
|
|
static int parse_utf_16(const char **unprocessed, char **processed) { |
|
|
|