]> code.citadel.org Git - citadel.git/blobdiff - libcitadel/lib/json.c
Bumped version numbers to 8.11 for upcoming release
[citadel.git] / libcitadel / lib / json.c
index 044be9cdf38b338d83a9c57f7bb52bae863a94f4..db10cad1cfdfb4e9426e7c839be1d016d646f2d4 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
  */
 
 /*@{*/
@@ -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);
+       }
 }