aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetri Lehtinen <petri@digip.org>2010-03-23 08:15:19 +0200
committerPetri Lehtinen <petri@digip.org>2010-03-23 08:15:19 +0200
commit49880cbabeb597a9c748a3d5f37e9961a084dce3 (patch)
tree1fe3b13386ab90454214682e5fcddb4435b6e611
parent66a69f3f1056da25446b01b18e01c9484f432c68 (diff)
parentf284e3c069abcdfc1145e939b0c284910c274d17 (diff)
downloadjansson-49880cbabeb597a9c748a3d5f37e9961a084dce3.zip
jansson-49880cbabeb597a9c748a3d5f37e9961a084dce3.tar.gz
jansson-49880cbabeb597a9c748a3d5f37e9961a084dce3.tar.bz2
Merge branch '1.2'
-rw-r--r--configure.ac1
-rw-r--r--src/dump.c1
-rw-r--r--src/load.c1
-rw-r--r--src/utf.c2
-rw-r--r--src/utf.h9
-rw-r--r--src/value.c6
-rw-r--r--test/suites/api/test_simple.c31
7 files changed, 45 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 17f1e01..6d21268 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,6 +16,7 @@ AC_PROG_LIBTOOL
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_INT32_T
# Checks for library functions.
diff --git a/src/dump.c b/src/dump.c
index a08c2e1..a862cba 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -9,7 +9,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <stdint.h>
#include <assert.h>
#include <jansson.h>
diff --git a/src/load.c b/src/load.c
index bcc7aa7..baf3183 100644
--- a/src/load.c
+++ b/src/load.c
@@ -14,7 +14,6 @@
#include <string.h>
#include <stdarg.h>
#include <assert.h>
-#include <stdint.h>
#include <jansson.h>
#include "jansson_private.h"
diff --git a/src/utf.c b/src/utf.c
index 9f4cb93..92484d0 100644
--- a/src/utf.c
+++ b/src/utf.c
@@ -6,7 +6,7 @@
*/
#include <string.h>
-#include <stdint.h>
+#include "utf.h"
int utf8_encode(int32_t codepoint, char *buffer, int *size)
{
diff --git a/src/utf.h b/src/utf.h
index 95abdc9..d0ae6e9 100644
--- a/src/utf.h
+++ b/src/utf.h
@@ -8,6 +8,15 @@
#ifndef UTF_H
#define UTF_H
+#include <config.h>
+
+#ifdef HAVE_INTTYPES_H
+/* inttypes.h includes stdint.h in a standard environment, so there's
+no need to include stdint.h separately. If inttypes.h doesn't define
+int32_t, it's defined in config.h. */
+#include <inttypes.h>
+#endif
+
int utf8_encode(int codepoint, char *buffer, int *size);
int utf8_check_first(char byte);
diff --git a/src/value.c b/src/value.c
index f74c684..7c41c89 100644
--- a/src/value.c
+++ b/src/value.c
@@ -833,7 +833,7 @@ json_t *json_true(void)
{
static json_t the_true = {
.type = JSON_TRUE,
- .refcount = (unsigned int)1
+ .refcount = (unsigned int)-1
};
return &the_true;
}
@@ -843,7 +843,7 @@ json_t *json_false(void)
{
static json_t the_false = {
.type = JSON_FALSE,
- .refcount = (unsigned int)1
+ .refcount = (unsigned int)-1
};
return &the_false;
}
@@ -853,7 +853,7 @@ json_t *json_null(void)
{
static json_t the_null = {
.type = JSON_NULL,
- .refcount = (unsigned int)1
+ .refcount = (unsigned int)-1
};
return &the_null;
}
diff --git a/test/suites/api/test_simple.c b/test/suites/api/test_simple.c
index 45f22c7..1769c65 100644
--- a/test/suites/api/test_simple.c
+++ b/test/suites/api/test_simple.c
@@ -150,5 +150,36 @@ int main()
fail("json_null failed");
json_decref(value);
+ /* Test reference counting on singletons (true, false, null) */
+ value = json_true();
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting true works incorrectly");
+ json_decref(value);
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting true works incorrectly");
+ json_incref(value);
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting true works incorrectly");
+
+ value = json_false();
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting false works incorrectly");
+ json_decref(value);
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting false works incorrectly");
+ json_incref(value);
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting false works incorrectly");
+
+ value = json_null();
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting null works incorrectly");
+ json_decref(value);
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting null works incorrectly");
+ json_incref(value);
+ if(value->refcount != (unsigned int)-1)
+ fail("refcounting null works incorrectly");
+
return 0;
}