summaryrefslogtreecommitdiff
path: root/sys/src/libjson
diff options
context:
space:
mode:
authorBurnZeZ <brz-9dev@intma.in>2013-10-27 15:52:35 -0400
committerBurnZeZ <brz-9dev@intma.in>2013-10-27 15:52:35 -0400
commitb1bc8b5c2b73a3b2cba83c12112644815e19c312 (patch)
treec6893279c5001188f9a0b3f3adce06e85fa26216 /sys/src/libjson
parent2dc7e311f43c41ecc412c237cbcb6293953c17e9 (diff)
libjson: handle unicode escapes
Diffstat (limited to 'sys/src/libjson')
-rw-r--r--sys/src/libjson/json.c15
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;