diff options
author | BurnZeZ <brz-9dev@intma.in> | 2013-10-27 15:52:35 -0400 |
---|---|---|
committer | BurnZeZ <brz-9dev@intma.in> | 2013-10-27 15:52:35 -0400 |
commit | b1bc8b5c2b73a3b2cba83c12112644815e19c312 (patch) | |
tree | c6893279c5001188f9a0b3f3adce06e85fa26216 /sys/src/libjson | |
parent | 2dc7e311f43c41ecc412c237cbcb6293953c17e9 (diff) |
libjson: handle unicode escapes
Diffstat (limited to 'sys/src/libjson')
-rw-r--r-- | sys/src/libjson/json.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/src/libjson/json.c b/sys/src/libjson/json.c index 850b94af7..0e1de4ca4 100644 --- a/sys/src/libjson/json.c +++ b/sys/src/libjson/json.c @@ -52,6 +52,8 @@ lex(Lex *l) { Rune r; char *t; + int i; + char c; for(;;){ r = peekch(l); @@ -117,6 +119,19 @@ lex(Lex *l) case 'r': r = '\r'; break; + case 'u': + r = 0; + for(i = 0; i < 4; i++){ + if(!isxdigit(peekch(l))) + break; + + c = getch(l); + r *= 16; + if(c > '0' && c < '9') r += c - '0'; + else if(c > 'a' && c < 'f') r += c - 'a' + 10; + else if(c > 'A' && c < 'F') r += c - 'A' + 10; + } + break; case 't': r = '\t'; break; |