summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2013-10-23 18:26:04 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2013-10-23 18:26:04 +0200
commit11d75c3d5ddcd6c665fb346f1d7e8bf8fb63a411 (patch)
tree080f92eda4a193324f47f6b7a346b85ecf8cab17
parent3a4ca82938dc8470fa1ceeef2ddb2058e896a803 (diff)
downloadrsyslog-11d75c3d5ddcd6c665fb346f1d7e8bf8fb63a411.tar.gz
rsyslog-11d75c3d5ddcd6c665fb346f1d7e8bf8fb63a411.tar.bz2
rsyslog-11d75c3d5ddcd6c665fb346f1d7e8bf8fb63a411.zip
permit writing not only msg variables via the msgAddJSON() API
-rw-r--r--runtime/msg.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/runtime/msg.c b/runtime/msg.c
index eef69f85..3a48fc09 100644
--- a/runtime/msg.c
+++ b/runtime/msg.c
@@ -327,7 +327,6 @@ static int getAPPNAMELen(msg_t *pM, sbool bLockMutex);
static rsRetVal jsonPathFindParent(struct json_object *jroot, uchar *name, uchar *leaf, struct json_object **parent, int bCreate);
static uchar * jsonPathGetLeaf(uchar *name, int lenName);
static struct json_object *jsonDeepCopy(struct json_object *src);
-static rsRetVal msgAddJSONObj(msg_t *pM, uchar *name, struct json_object *json, struct json_object **pjroot);
/* the locking and unlocking implementations: */
@@ -3890,16 +3889,26 @@ finalize_it:
RETiRet;
}
-static rsRetVal
-msgAddJSONObj(msg_t *pM, uchar *name, struct json_object *json, struct json_object **pjroot)
+rsRetVal
+msgAddJSON(msg_t *pM, uchar *name, struct json_object *json)
{
/* TODO: error checks! This is a quick&dirty PoC! */
+ struct json_object **pjroot;
struct json_object *parent, *leafnode;
uchar *leaf;
DEFiRet;
MsgLock(pM);
- if((name[0] == '!' || name[0] == '.' || name[0] == '/') && name[1] == '\0') {
+ if(name[0] == '!') {
+ pjroot = &pM->json;
+ } else if(name[0] == '.') {
+ pjroot = &pM->localvars;
+ } else { /* globl var */
+ pthread_rwlock_wrlock(&glblVars_rwlock);
+ pjroot = &global_var_root;
+ }
+
+ if(name[1] == '\0') { /* full tree? */
if(*pjroot == NULL)
*pjroot = json;
else
@@ -3942,14 +3951,12 @@ msgAddJSONObj(msg_t *pM, uchar *name, struct json_object *json, struct json_obje
}
finalize_it:
+ if(name[0] == '/')
+ pthread_rwlock_unlock(&glblVars_rwlock);
MsgUnlock(pM);
RETiRet;
}
-rsRetVal
-msgAddJSON(msg_t *pM, uchar *name, struct json_object *json) {
- return msgAddJSONObj(pM, name, json, &pM->json);
-}
rsRetVal
msgDelJSON(msg_t *pM, uchar *name)
@@ -4079,16 +4086,8 @@ msgSetJSONFromVar(msg_t *pMsg, uchar *varname, struct var *v)
v->datatype);
ABORT_FINALIZE(RS_RET_ERR);
}
- /* we always know strlen(varname) > 2 */
- if(varname[0] == '!')
- msgAddJSONObj(pMsg, varname+1, json, &pMsg->json);
- else if(varname[0] == '.')
- msgAddJSONObj(pMsg, varname+1, json, &pMsg->localvars);
- else { /* global - '/' */
- pthread_rwlock_wrlock(&glblVars_rwlock);
- msgAddJSONObj(pMsg, varname+1, json, &global_var_root);
- pthread_rwlock_unlock(&glblVars_rwlock);
- }
+
+ msgAddJSON(pMsg, varname, json);
finalize_it:
RETiRet;
}