Merge branch '1.2'
authorPetri Lehtinen <petri@digip.org>
Tue, 23 Mar 2010 06:15:19 +0000 (08:15 +0200)
committerPetri Lehtinen <petri@digip.org>
Tue, 23 Mar 2010 06:15:19 +0000 (08:15 +0200)
configure.ac
src/dump.c
src/load.c
src/utf.c
src/utf.h
src/value.c
test/suites/api/test_simple.c

index 17f1e01..6d21268 100644 (file)
@@ -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.
 
index a08c2e1..a862cba 100644 (file)
@@ -9,7 +9,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdint.h>
 #include <assert.h>
 
 #include <jansson.h>
index bcc7aa7..baf3183 100644 (file)
@@ -14,7 +14,6 @@
 #include <string.h>
 #include <stdarg.h>
 #include <assert.h>
-#include <stdint.h>
 
 #include <jansson.h>
 #include "jansson_private.h"
index 9f4cb93..92484d0 100644 (file)
--- 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)
 {
index 95abdc9..d0ae6e9 100644 (file)
--- 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);
index f74c684..7c41c89 100644 (file)
@@ -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;
 }
index 45f22c7..1769c65 100644 (file)
@@ -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;
 }