Style and cruft
[citadel.git] / libcitadel / lib / json.c
index 9c941bc626436755706e0fce9749d76b3152f8e2..b16674589fd68ec0925c642cf9fa91cd47b5f2d2 100644 (file)
@@ -1,12 +1,22 @@
 /*
- * $Id: wildfire.c 6962 2009-01-18 19:33:45Z dothebart $
+ * JSON data type and serializer for Citadel
+ *
+ * Copyright (c) 1987-2018 by the citadel.org team
+ *
+ * This program is open source software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
-/**
- * \defgroup Subst Variable substitution type stuff
- * \ingroup CitadelConfig
- */
-
-/*@{*/
 
 #include "sysdep.h"
 #include <sys/types.h>
 #include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
-
 #include "libcitadel.h"
 
-
 #define JSON_STRING 0
 #define JSON_NUM 1
 #define JSON_NULL 2
@@ -28,7 +36,8 @@
 #define JSON_ARRAY 4
 #define JSON_OBJECT 7
 
-struct JsonValue {
+struct JsonValue
+{
        int Type;
        StrBuf *Name;
        StrBuf *Value;
@@ -45,6 +54,7 @@ void DeleteJSONValue(void *vJsonValue)
        free(Val);
 }
 
+
 JsonValue *NewJsonObject(const char *Key, long keylen)
 {
        JsonValue *Ret;
@@ -53,11 +63,14 @@ JsonValue *NewJsonObject(const char *Key, long keylen)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_OBJECT;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
+       }
        Ret->SubValues = NewHash(1, NULL);
        return Ret;
 }
 
+
 JsonValue *NewJsonArray(const char *Key, long keylen)
 {
        JsonValue *Ret;
@@ -66,8 +79,10 @@ JsonValue *NewJsonArray(const char *Key, long keylen)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_ARRAY;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
-       Ret->SubValues = NewHash(1, Flathash);
+       }
+       Ret->SubValues = NewHash(1, lFlathash);
        return Ret;
 }
 
@@ -80,14 +95,15 @@ JsonValue *NewJsonNumber(const char *Key, long keylen, long Number)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_NUM;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
+       }
        Ret->Value = NewStrBufPlain(NULL, 64);
        StrBufPrintf(Ret->Value, "%ld", Number);
        return Ret;
 }
 
 
-
 JsonValue *NewJsonBigNumber(const char *Key, long keylen, double Number)
 {
        JsonValue *Ret;
@@ -96,12 +112,15 @@ JsonValue *NewJsonBigNumber(const char *Key, long keylen, double Number)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_NUM;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
+       }
        Ret->Value = NewStrBufPlain(NULL, 128);
        StrBufPrintf(Ret->Value, "%f", Number);
        return Ret;
 }
 
+
 JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe)
 {
        JsonValue *Ret;
@@ -110,11 +129,14 @@ JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_STRING;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
+       }
        Ret->Value = NewStrBufDup(CopyMe);
        return Ret;
 }
 
+
 JsonValue *NewJsonPlainString(const char *Key, long keylen, const char *CopyMe, long len)
 {
        JsonValue *Ret;
@@ -123,11 +145,14 @@ JsonValue *NewJsonPlainString(const char *Key, long keylen, const char *CopyMe,
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_STRING;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
+       }
        Ret->Value = NewStrBufPlain(CopyMe, len);
        return Ret;
 }
 
+
 JsonValue *NewJsonNull(const char *Key, long keylen)
 {
        JsonValue *Ret;
@@ -136,11 +161,14 @@ JsonValue *NewJsonNull(const char *Key, long keylen)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_NULL;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
+       }
        Ret->Value = NewStrBufPlain(HKEY("nulll"));
        return Ret;
 }
 
+
 JsonValue *NewJsonBool(const char *Key, long keylen, int value)
 {
        JsonValue *Ret;
@@ -149,36 +177,43 @@ JsonValue *NewJsonBool(const char *Key, long keylen, int value)
        memset(Ret, 0, sizeof(JsonValue));
        Ret->Type = JSON_BOOL;
        if (Key != NULL)
+       {
                Ret->Name = NewStrBufPlain(Key, keylen);
-       if (value)
+       }
+       if (value) {
                Ret->Value = NewStrBufPlain(HKEY("true"));
+       }
        else
+       {
                Ret->Value = NewStrBufPlain(HKEY("false"));
+       }
        return Ret;
 }
 
+
 void JsonArrayAppend(JsonValue *Array, JsonValue *Val)
 {
        long n;
        if (Array->Type != JSON_ARRAY)
-               return; /* todo assert! */
+       {
+               return;
+       }
 
        n = GetCount(Array->SubValues);
-       Put(Array->SubValues, (const char*) &n, sizeof(n), Val, DeleteJSONValue);
+       Put(Array->SubValues, LKEY(n), Val, DeleteJSONValue);
 }
 
+
 void JsonObjectAppend(JsonValue *Array, JsonValue *Val)
 {
        if ((Array->Type != JSON_OBJECT) || (Val->Name == NULL))
-               return; /* todo assert! */
-
+       {
+               return;
+       }
        Put(Array->SubValues, SKEY(Val->Name), Val, DeleteJSONValue);
 }
 
 
-
-
-
 void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
 {
        void *vValue, *vPrevious;
@@ -188,7 +223,8 @@ void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
        long keylen;
 
 
-       switch (Val->Type) {
+       switch (Val->Type)
+       {
        case JSON_STRING:
                StrBufAppendBufPlain(Target, HKEY("\""), 0);
                StrECMAEscAppend(Target, Val->Value, NULL);
@@ -207,13 +243,12 @@ void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
                vPrevious = NULL;
                StrBufAppendBufPlain(Target, HKEY("["), 0);
                It = GetNewHashPos(Val->SubValues, 0);
-               while (GetNextHashPos(Val->SubValues, 
-                                     It,
-                                     &keylen, &Key, 
-                                     &vValue)){
+               while (GetNextHashPos(Val->SubValues, It, &keylen, &Key, &vValue))
+               {
                        if (vPrevious != NULL) 
+                       {
                                StrBufAppendBufPlain(Target, HKEY(","), 0);
-
+                       }
                        SubVal = (JsonValue*) vValue;
                        SerializeJson(Target, SubVal, 0);
                        vPrevious = vValue;
@@ -225,13 +260,12 @@ void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
                vPrevious = NULL;
                StrBufAppendBufPlain(Target, HKEY("{"), 0);
                It = GetNewHashPos(Val->SubValues, 0);
-               while (GetNextHashPos(Val->SubValues, 
-                                     It,
-                                     &keylen, &Key, 
-                                     &vValue)){
+               while (GetNextHashPos(Val->SubValues, It, &keylen, &Key, &vValue))
+               {
                        SubVal = (JsonValue*) vValue;
 
-                       if (vPrevious != NULL) {
+                       if (vPrevious != NULL)
+                       {
                                StrBufAppendBufPlain(Target, HKEY(","), 0);
                        }
                        StrBufAppendBufPlain(Target, HKEY("\""), 0);
@@ -245,9 +279,8 @@ void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
                DeleteHashPos(&It);
                break;
        }
-       if(FreeVal) {
+       if (FreeVal)
+       {
                DeleteJSONValue(Val);
        }
 }
-
-