Fix json structures; need to use the LKEY & lHashfunc
[citadel.git] / libcitadel / lib / json.c
index 044be9cdf38b338d83a9c57f7bb52bae863a94f4..63fcbdcb9adf701b96f86161727cc448bf2c5634 100644 (file)
@@ -1,9 +1,22 @@
-/*
- * $Id: wildfire.c 6962 2009-01-18 19:33:45Z dothebart $
- */
 /**
  * \defgroup Subst Variable substitution type stuff
  * \ingroup CitadelConfig
+ *
+ * Copyright (c) 1987-2011 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
  */
 
 /*@{*/
@@ -67,7 +80,7 @@ JsonValue *NewJsonArray(const char *Key, long keylen)
        Ret->Type = JSON_ARRAY;
        if (Key != NULL)
                Ret->Name = NewStrBufPlain(Key, keylen);
-       Ret->SubValues = NewHash(1, Flathash);
+       Ret->SubValues = NewHash(1, lFlathash);
        return Ret;
 }
 
@@ -164,7 +177,7 @@ void JsonArrayAppend(JsonValue *Array, JsonValue *Val)
                return; /* todo assert! */
 
        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)
@@ -179,7 +192,7 @@ void JsonObjectAppend(JsonValue *Array, JsonValue *Val)
 
 
 
-void SerializeJson(StrBuf *Target, JsonValue *Val)
+void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
 {
        void *vValue, *vPrevious;
        JsonValue *SubVal;
@@ -215,10 +228,11 @@ void SerializeJson(StrBuf *Target, JsonValue *Val)
                                StrBufAppendBufPlain(Target, HKEY(","), 0);
 
                        SubVal = (JsonValue*) vValue;
-                       SerializeJson(Target, SubVal);
+                       SerializeJson(Target, SubVal, 0);
                        vPrevious = vValue;
                }
                StrBufAppendBufPlain(Target, HKEY("]"), 0);
+               DeleteHashPos(&It);
                break;
        case JSON_OBJECT:
                vPrevious = NULL;
@@ -237,13 +251,16 @@ void SerializeJson(StrBuf *Target, JsonValue *Val)
                        StrBufAppendBuf(Target, SubVal->Name, 0);
                        StrBufAppendBufPlain(Target, HKEY("\":"), 0);
 
-                       SerializeJson(Target, SubVal);
+                       SerializeJson(Target, SubVal, 0);
                        vPrevious = vValue;
                }
                StrBufAppendBufPlain(Target, HKEY("}"), 0);
+               DeleteHashPos(&It);
                break;
        }
-
+       if(FreeVal) {
+               DeleteJSONValue(Val);
+       }
 }