projects
/
citadel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Style and cruft
[citadel.git]
/
libcitadel
/
lib
/
json.c
diff --git
a/libcitadel/lib/json.c
b/libcitadel/lib/json.c
index 63fcbdcb9adf701b96f86161727cc448bf2c5634..b16674589fd68ec0925c642cf9fa91cd47b5f2d2 100644
(file)
--- a/
libcitadel/lib/json.c
+++ b/
libcitadel/lib/json.c
@@
-1,8
+1,7
@@
-/**
- * \defgroup Subst Variable substitution type stuff
- * \ingroup CitadelConfig
+/*
+ * JSON data type and serializer for Citadel
*
*
- * Copyright (c) 1987-201
1
by the citadel.org team
+ * Copyright (c) 1987-201
8
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
*
* 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
@@
-19,8
+18,6
@@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/*@{*/
-
#include "sysdep.h"
#include <sys/types.h>
#include <sys/stat.h>
#include "sysdep.h"
#include <sys/types.h>
#include <sys/stat.h>
@@
-30,10
+27,8
@@
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
-
#include "libcitadel.h"
#include "libcitadel.h"
-
#define JSON_STRING 0
#define JSON_NUM 1
#define JSON_NULL 2
#define JSON_STRING 0
#define JSON_NUM 1
#define JSON_NULL 2
@@
-41,7
+36,8
@@
#define JSON_ARRAY 4
#define JSON_OBJECT 7
#define JSON_ARRAY 4
#define JSON_OBJECT 7
-struct JsonValue {
+struct JsonValue
+{
int Type;
StrBuf *Name;
StrBuf *Value;
int Type;
StrBuf *Name;
StrBuf *Value;
@@
-58,6
+54,7
@@
void DeleteJSONValue(void *vJsonValue)
free(Val);
}
free(Val);
}
+
JsonValue *NewJsonObject(const char *Key, long keylen)
{
JsonValue *Ret;
JsonValue *NewJsonObject(const char *Key, long keylen)
{
JsonValue *Ret;
@@
-66,11
+63,14
@@
JsonValue *NewJsonObject(const char *Key, long keylen)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_OBJECT;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_OBJECT;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->SubValues = NewHash(1, NULL);
return Ret;
}
Ret->SubValues = NewHash(1, NULL);
return Ret;
}
+
JsonValue *NewJsonArray(const char *Key, long keylen)
{
JsonValue *Ret;
JsonValue *NewJsonArray(const char *Key, long keylen)
{
JsonValue *Ret;
@@
-79,7
+79,9
@@
JsonValue *NewJsonArray(const char *Key, long keylen)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_ARRAY;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_ARRAY;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->SubValues = NewHash(1, lFlathash);
return Ret;
}
Ret->SubValues = NewHash(1, lFlathash);
return Ret;
}
@@
-93,14
+95,15
@@
JsonValue *NewJsonNumber(const char *Key, long keylen, long Number)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_NUM;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_NUM;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->Value = NewStrBufPlain(NULL, 64);
StrBufPrintf(Ret->Value, "%ld", Number);
return Ret;
}
Ret->Value = NewStrBufPlain(NULL, 64);
StrBufPrintf(Ret->Value, "%ld", Number);
return Ret;
}
-
JsonValue *NewJsonBigNumber(const char *Key, long keylen, double Number)
{
JsonValue *Ret;
JsonValue *NewJsonBigNumber(const char *Key, long keylen, double Number)
{
JsonValue *Ret;
@@
-109,12
+112,15
@@
JsonValue *NewJsonBigNumber(const char *Key, long keylen, double Number)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_NUM;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_NUM;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->Value = NewStrBufPlain(NULL, 128);
StrBufPrintf(Ret->Value, "%f", Number);
return Ret;
}
Ret->Value = NewStrBufPlain(NULL, 128);
StrBufPrintf(Ret->Value, "%f", Number);
return Ret;
}
+
JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe)
{
JsonValue *Ret;
JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe)
{
JsonValue *Ret;
@@
-123,11
+129,14
@@
JsonValue *NewJsonString(const char *Key, long keylen, StrBuf *CopyMe)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_STRING;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_STRING;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->Value = NewStrBufDup(CopyMe);
return Ret;
}
Ret->Value = NewStrBufDup(CopyMe);
return Ret;
}
+
JsonValue *NewJsonPlainString(const char *Key, long keylen, const char *CopyMe, long len)
{
JsonValue *Ret;
JsonValue *NewJsonPlainString(const char *Key, long keylen, const char *CopyMe, long len)
{
JsonValue *Ret;
@@
-136,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)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_STRING;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->Value = NewStrBufPlain(CopyMe, len);
return Ret;
}
Ret->Value = NewStrBufPlain(CopyMe, len);
return Ret;
}
+
JsonValue *NewJsonNull(const char *Key, long keylen)
{
JsonValue *Ret;
JsonValue *NewJsonNull(const char *Key, long keylen)
{
JsonValue *Ret;
@@
-149,11
+161,14
@@
JsonValue *NewJsonNull(const char *Key, long keylen)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_NULL;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_NULL;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
+ }
Ret->Value = NewStrBufPlain(HKEY("nulll"));
return Ret;
}
Ret->Value = NewStrBufPlain(HKEY("nulll"));
return Ret;
}
+
JsonValue *NewJsonBool(const char *Key, long keylen, int value)
{
JsonValue *Ret;
JsonValue *NewJsonBool(const char *Key, long keylen, int value)
{
JsonValue *Ret;
@@
-162,36
+177,43
@@
JsonValue *NewJsonBool(const char *Key, long keylen, int value)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_BOOL;
if (Key != NULL)
memset(Ret, 0, sizeof(JsonValue));
Ret->Type = JSON_BOOL;
if (Key != NULL)
+ {
Ret->Name = NewStrBufPlain(Key, keylen);
Ret->Name = NewStrBufPlain(Key, keylen);
- if (value)
+ }
+ if (value) {
Ret->Value = NewStrBufPlain(HKEY("true"));
Ret->Value = NewStrBufPlain(HKEY("true"));
+ }
else
else
+ {
Ret->Value = NewStrBufPlain(HKEY("false"));
Ret->Value = NewStrBufPlain(HKEY("false"));
+ }
return Ret;
}
return Ret;
}
+
void JsonArrayAppend(JsonValue *Array, JsonValue *Val)
{
long n;
if (Array->Type != JSON_ARRAY)
void JsonArrayAppend(JsonValue *Array, JsonValue *Val)
{
long n;
if (Array->Type != JSON_ARRAY)
- return; /* todo assert! */
+ {
+ return;
+ }
n = GetCount(Array->SubValues);
Put(Array->SubValues, LKEY(n), Val, DeleteJSONValue);
}
n = GetCount(Array->SubValues);
Put(Array->SubValues, LKEY(n), Val, DeleteJSONValue);
}
+
void JsonObjectAppend(JsonValue *Array, JsonValue *Val)
{
if ((Array->Type != JSON_OBJECT) || (Val->Name == NULL))
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);
}
Put(Array->SubValues, SKEY(Val->Name), Val, DeleteJSONValue);
}
-
-
-
void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
{
void *vValue, *vPrevious;
void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
{
void *vValue, *vPrevious;
@@
-201,7
+223,8
@@
void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
long keylen;
long keylen;
- switch (Val->Type) {
+ switch (Val->Type)
+ {
case JSON_STRING:
StrBufAppendBufPlain(Target, HKEY("\""), 0);
StrECMAEscAppend(Target, Val->Value, NULL);
case JSON_STRING:
StrBufAppendBufPlain(Target, HKEY("\""), 0);
StrECMAEscAppend(Target, Val->Value, NULL);
@@
-220,13
+243,12
@@
void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
vPrevious = NULL;
StrBufAppendBufPlain(Target, HKEY("["), 0);
It = GetNewHashPos(Val->SubValues, 0);
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)
if (vPrevious != NULL)
+ {
StrBufAppendBufPlain(Target, HKEY(","), 0);
StrBufAppendBufPlain(Target, HKEY(","), 0);
-
+ }
SubVal = (JsonValue*) vValue;
SerializeJson(Target, SubVal, 0);
vPrevious = vValue;
SubVal = (JsonValue*) vValue;
SerializeJson(Target, SubVal, 0);
vPrevious = vValue;
@@
-238,13
+260,12
@@
void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
vPrevious = NULL;
StrBufAppendBufPlain(Target, HKEY("{"), 0);
It = GetNewHashPos(Val->SubValues, 0);
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;
SubVal = (JsonValue*) vValue;
- if (vPrevious != NULL) {
+ if (vPrevious != NULL)
+ {
StrBufAppendBufPlain(Target, HKEY(","), 0);
}
StrBufAppendBufPlain(Target, HKEY("\""), 0);
StrBufAppendBufPlain(Target, HKEY(","), 0);
}
StrBufAppendBufPlain(Target, HKEY("\""), 0);
@@
-258,9
+279,8
@@
void SerializeJson(StrBuf *Target, JsonValue *Val, int FreeVal)
DeleteHashPos(&It);
break;
}
DeleteHashPos(&It);
break;
}
- if(FreeVal) {
+ if (FreeVal)
+ {
DeleteJSONValue(Val);
}
}
DeleteJSONValue(Val);
}
}
-
-