jsoninfo: helpers: use an actual bool as parameter for abuf_json_boolean
[olsrd.git] / lib / jsoninfo / src / olsrd_jsoninfo_helpers.c
index a076c2e..6f3f42a 100644 (file)
@@ -57,9 +57,15 @@ char uuid[UUIDLEN + 1];
 /* JSON does not allow commas dangling at the end of arrays, so we need to
  * count which entry number we're at in order to make sure we don't tack a
  * dangling comma on at the end */
-static int entrynumber[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+#define ENTRY_NUMBER_MAX_DEPTH 16
+static int entrynumber[ENTRY_NUMBER_MAX_DEPTH] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 static int currentjsondepth = 0;
 
+void abuf_json_reset_entry_number_and_depth(void) {
+  entrynumber[0] = 0;
+  currentjsondepth = 0;
+}
+
 static void abuf_json_new_indent(struct autobuf *abuf) {
   if (currentjsondepth) {
     int i = currentjsondepth;
@@ -71,9 +77,9 @@ static void abuf_json_new_indent(struct autobuf *abuf) {
   }
 }
 
-void abuf_json_reset_entry_number_and_depth(void) {
-  entrynumber[0] = 0;
-  currentjsondepth = 0;
+void abuf_json_insert_comma(struct autobuf *abuf) {
+  if (entrynumber[currentjsondepth])
+    abuf_appendf(abuf, ",");
 }
 
 void abuf_json_mark_output(bool open, struct autobuf *abuf) {
@@ -84,9 +90,9 @@ void abuf_json_mark_output(bool open, struct autobuf *abuf) {
     currentjsondepth++;
     entrynumber[currentjsondepth] = 0;
   } else {
+    assert(currentjsondepth == 1);
     entrynumber[currentjsondepth] = 0;
     currentjsondepth--;
-    assert(!currentjsondepth);
     abuf_json_new_indent(abuf);
     abuf_puts(abuf, "\n}");
   }
@@ -94,9 +100,7 @@ void abuf_json_mark_output(bool open, struct autobuf *abuf) {
 
 void abuf_json_mark_object(bool open, bool array, struct autobuf *abuf, const char* header) {
   if (open) {
-    if (entrynumber[currentjsondepth]) {
-      abuf_appendf(abuf, ",");
-    }
+    abuf_json_insert_comma(abuf);
     abuf_json_new_indent(abuf);
     if (header) {
       abuf_appendf(abuf, "\"%s\": %s", header, array ? "[" : "{");
@@ -105,10 +109,12 @@ void abuf_json_mark_object(bool open, bool array, struct autobuf *abuf, const ch
     }
     entrynumber[currentjsondepth]++;
     currentjsondepth++;
+    assert(currentjsondepth < ENTRY_NUMBER_MAX_DEPTH);
     entrynumber[currentjsondepth] = 0;
   } else {
     entrynumber[currentjsondepth] = 0;
     currentjsondepth--;
+    assert(currentjsondepth >= 0);
     abuf_json_new_indent(abuf);
     abuf_appendf(abuf, "%s", array ? "]" : "}");
   }
@@ -118,12 +124,7 @@ void abuf_json_mark_array_entry(bool open, struct autobuf *abuf) {
   abuf_json_mark_object(open, false, abuf, NULL);
 }
 
-void abuf_json_insert_comma(struct autobuf *abuf) {
-  if (entrynumber[currentjsondepth])
-    abuf_appendf(abuf, ",");
-}
-
-void abuf_json_boolean(struct autobuf *abuf, const char* key, int value) {
+void abuf_json_boolean(struct autobuf *abuf, const char* key, bool value) {
   abuf_json_insert_comma(abuf);
   abuf_json_new_indent(abuf);
   abuf_appendf(abuf, "\"%s\": %s", key, value ? "true" : "false");
@@ -140,14 +141,14 @@ void abuf_json_string(struct autobuf *abuf, const char* key, const char* value)
 void abuf_json_int(struct autobuf *abuf, const char* key, long value) {
   abuf_json_insert_comma(abuf);
   abuf_json_new_indent(abuf);
-  abuf_appendf(abuf, "\"%s\": %li", key, value);
+  abuf_appendf(abuf, "\"%s\": %ld", key, value);
   entrynumber[currentjsondepth]++;
 }
 
 void abuf_json_float(struct autobuf *abuf, const char* key, float value) {
   abuf_json_insert_comma(abuf);
   abuf_json_new_indent(abuf);
-  abuf_appendf(abuf, "\"%s\": %.03f", key, (double) value);
+  abuf_appendf(abuf, "\"%s\": %f", key, (double) value);
   entrynumber[currentjsondepth]++;
 }