X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Fjson.c;h=63fcbdcb9adf701b96f86161727cc448bf2c5634;hb=7a9abe96a5fa44e06c0e9fd9dc2097d643495063;hp=044be9cdf38b338d83a9c57f7bb52bae863a94f4;hpb=f0e6b0183e4739e5fe35fbc8bd116c7b219c0ab7;p=citadel.git diff --git a/libcitadel/lib/json.c b/libcitadel/lib/json.c index 044be9cdf..63fcbdcb9 100644 --- a/libcitadel/lib/json.c +++ b/libcitadel/lib/json.c @@ -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); + } }