summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLloyd Hilaiel <lloyd@hilaiel.com>2011-04-22 16:38:55 -0600
committerLloyd Hilaiel <lloyd@hilaiel.com>2011-04-22 16:38:55 -0600
commitaedaa9e449e03af866c0e594014cd7e78dc7c98b (patch)
tree73dc7fb46872a78d6516fadb2197519d8d6ac3f0 /src
parentbaf9c39797fce24b89398a3e94ff27ae4074867a (diff)
downloadyajl-aedaa9e449e03af866c0e594014cd7e78dc7c98b.tar.gz
object keys should just be bare strings, the indirection is useless
Diffstat (limited to 'src')
-rw-r--r--src/api/yajl_tree.h2
-rw-r--r--src/yajl_tree.c32
2 files changed, 17 insertions, 17 deletions
diff --git a/src/api/yajl_tree.h b/src/api/yajl_tree.h
index 7ba095a..ea5f1c1 100644
--- a/src/api/yajl_tree.h
+++ b/src/api/yajl_tree.h
@@ -59,7 +59,7 @@ typedef struct yajl_val_number_s
typedef struct yajl_val_object_s
{
/** Array of keys in the JSON object. */
- yajl_val *keys;
+ const char **keys;
/** Array of values in the JSON object. */
yajl_val *values;
/** Number of key-value-pairs in the JSON object. */
diff --git a/src/yajl_tree.c b/src/yajl_tree.c
index f2c7dcf..e4c8c8a 100644
--- a/src/yajl_tree.c
+++ b/src/yajl_tree.c
@@ -30,7 +30,7 @@ struct stack_elem_s;
typedef struct stack_elem_s stack_elem_t;
struct stack_elem_s
{
- yajl_val key;
+ char * key;
yajl_val value;
stack_elem_t *next;
};
@@ -72,7 +72,7 @@ static void yajl_object_free (yajl_val v)
for (i = 0; i < o->len; i++)
{
- yajl_tree_free (o->keys[i]);
+ free((char *) o->keys[i]);
o->keys[i] = NULL;
yajl_tree_free (o->values[i]);
o->values[i] = NULL;
@@ -148,10 +148,11 @@ static yajl_val context_pop(context_t *ctx)
}
static int object_add_keyval(context_t *ctx,
- yajl_val obj, yajl_val key, yajl_val value)
+ yajl_val obj, char *key, yajl_val value)
{
yajl_val_object *o;
- yajl_val *tmp;
+ const char **tmpk;
+ yajl_val *tmpv;
/* We're checking for NULL in "context_add_value" or its callers. */
assert (ctx != NULL);
@@ -159,22 +160,19 @@ static int object_add_keyval(context_t *ctx,
assert (key != NULL);
assert (value != NULL);
- /* We're assuring that the key is a string in "context_add_value". */
- assert (YAJL_IS_STRING (key));
-
/* We're assuring that "obj" is an object in "context_add_value". */
o = YAJL_TO_OBJECT (obj);
assert (o != NULL);
- tmp = realloc (o->keys, sizeof (*o->keys) * (o->len + 1));
- if (tmp == NULL)
+ tmpk = realloc (o->keys, sizeof (*o->keys) * (o->len + 1));
+ if (tmpk == NULL)
RETURN_ERROR (ctx, ENOMEM, "Out of memory");
- o->keys = tmp;
+ o->keys = tmpk;
- tmp = realloc (o->values, sizeof (*o->values) * (o->len + 1));
- if (tmp == NULL)
+ tmpv = realloc (o->values, sizeof (*o->values) * (o->len + 1));
+ if (tmpv == NULL)
RETURN_ERROR (ctx, ENOMEM, "Out of memory");
- o->values = tmp;
+ o->values = tmpv;
o->keys[o->len] = key;
o->values[o->len] = value;
@@ -245,12 +243,14 @@ static int context_add_value (context_t *ctx, yajl_val v)
"Object key is not a string (%#04"PRIx8")",
v->type);
- ctx->stack->key = v;
+ ctx->stack->key = v->data.string;
+ v->data.string = NULL;
+ free(v);
return (0);
}
else /* if (ctx->key != NULL) */
{
- yajl_val key;
+ char * key;
key = ctx->stack->key;
ctx->stack->key = NULL;
@@ -470,7 +470,7 @@ yajl_val yajl_tree_get(yajl_val n, const char ** path, int type)
if (n->type != YAJL_TYPE_OBJECT) return NULL;
for (i = 0; i < n->data.object.len; i++) {
- if (!strcmp(*path, n->data.object.keys[i]->data.string)) {
+ if (!strcmp(*path, n->data.object.keys[i])) {
n = n->data.object.values[i];
break;
}