load: Factor out an unneeded strdup
authorPetri Lehtinen <petri@digip.org>
Thu, 3 Sep 2009 18:30:36 +0000 (21:30 +0300)
committerPetri Lehtinen <petri@digip.org>
Fri, 4 Sep 2009 06:52:40 +0000 (09:52 +0300)
By "stealing" the string parsed out in lexer, one strdup can be saved.

src/load.c

index 25df182..1e2ad2a 100644 (file)
@@ -544,6 +544,17 @@ out:
     return lex->token;
 }
 
+static char *lex_steal_string(lex_t *lex)
+{
+    char *result = NULL;
+    if(lex->token == TOKEN_STRING)
+    {
+        result = lex->value.string;
+        lex->value.string = NULL;
+    }
+    return result;
+}
+
 static int lex_init(lex_t *lex, get_func get, eof_func eof, void *data)
 {
     stream_init(&lex->stream, get, eof, data);
@@ -587,7 +598,7 @@ static json_t *parse_object(lex_t *lex, json_error_t *error)
             goto error;
         }
 
-        key = strdup(lex->value.string);
+        key = lex_steal_string(lex);
         if(!key)
             return NULL;