/*
- * Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
+ * Copyright (c) 2009-2011 Petri Lehtinen <petri@digip.org>
*
* Jansson is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
#define _GNU_SOURCE
-#include <config.h>
-
+#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "hashtable.h"
#include "jansson_private.h"
#include "utf.h"
-#include "util.h"
-static inline void json_init(json_t *json, json_type type)
+static JSON_INLINE void json_init(json_t *json, json_type type)
{
json->type = type;
json->refcount = 1;
}
object = json_to_object(json);
- k = malloc(sizeof(object_key_t) + strlen(key) + 1);
- if(!k)
- return -1;
+ /* offsetof(...) returns the size of object_key_t without the
+ last, flexible member. This way, the correct amount is
+ allocated. */
+ k = malloc(offsetof(object_key_t, key) +
+ strlen(key) + 1); if(!k) return -1;
k->serial = object->serial++;
strcpy(k->key, key);
/*** integer ***/
-json_t *json_integer(int value)
+json_t *json_integer(json_int_t value)
{
json_integer_t *integer = malloc(sizeof(json_integer_t));
if(!integer)
return &integer->json;
}
-int json_integer_value(const json_t *json)
+json_int_t json_integer_value(const json_t *json)
{
if(!json_is_integer(json))
return 0;
return json_to_integer(json)->value;
}
-int json_integer_set(json_t *json, int value)
+int json_integer_set(json_t *json, json_int_t value)
{
if(!json_is_integer(json))
return -1;
json_t *json_true(void)
{
- static json_t the_true = {
- .type = JSON_TRUE,
- .refcount = (size_t)-1
- };
+ static json_t the_true = {JSON_TRUE, (size_t)-1};
return &the_true;
}
json_t *json_false(void)
{
- static json_t the_false = {
- .type = JSON_FALSE,
- .refcount = (size_t)-1
- };
+ static json_t the_false = {JSON_FALSE, (size_t)-1};
return &the_false;
}
json_t *json_null(void)
{
- static json_t the_null = {
- .type = JSON_NULL,
- .refcount = (size_t)-1
- };
+ static json_t the_null = {JSON_NULL, (size_t)-1};
return &the_null;
}