diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-10-23 13:08:56 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-10-23 13:08:56 +0200 |
commit | eb9adf9baad5dca9dc2f30f45dc6eaf7607ac8f8 (patch) | |
tree | 5d3dfa111070759f6cc9b2bcbdda1b66f9f6b6e4 /runtime/msg.c | |
parent | 7d39740b3d88dbd0432806e5f8da32c49cdb69f1 (diff) | |
download | rsyslog-eb9adf9baad5dca9dc2f30f45dc6eaf7607ac8f8.tar.gz rsyslog-eb9adf9baad5dca9dc2f30f45dc6eaf7607ac8f8.tar.bz2 rsyslog-eb9adf9baad5dca9dc2f30f45dc6eaf7607ac8f8.zip |
refactor: simplify JSON variable access
Diffstat (limited to 'runtime/msg.c')
-rw-r--r-- | runtime/msg.c | 45 |
1 files changed, 17 insertions, 28 deletions
diff --git a/runtime/msg.c b/runtime/msg.c index b1b912a4..407fee72 100644 --- a/runtime/msg.c +++ b/runtime/msg.c @@ -2578,54 +2578,43 @@ getGlobalVarPropVal(uchar *propName, int propNameLen, uchar **pRes, rs_size_t *b /* Get a JSON-based-variable as native json object */ rsRetVal -msgGetJSONPropJSON(struct json_object *jroot, uchar *propName, int propNameLen, struct json_object **pjson) +msgGetJSONPropJSON(msg_t *pMsg, msgPropDescr_t *pProp, struct json_object **pjson) { + struct json_object *jroot; uchar *leaf; struct json_object *parent; DEFiRet; - if(jroot == NULL) { + if(pProp->id == PROP_CEE) { + jroot = pMsg->json; + } else if(pProp->id == PROP_LOCAL_VAR) { + jroot = pMsg->localvars; + } else if(pProp->id == PROP_GLOBAL_VAR) { + pthread_rwlock_rdlock(&glblVars_rwlock); + jroot = global_var_root; + } else { + DBGPRINTF("msgGetJSONPropJSON; invalid property id %d\n", + pProp->id); ABORT_FINALIZE(RS_RET_NOT_FOUND); } - if(!strcmp((char*)propName, "!") || - !strcmp((char*)propName, ".") || - !strcmp((char*)propName, "/") ) { + if(!strcmp((char*)pProp->name, "!")) { *pjson = jroot; FINALIZE; } - leaf = jsonPathGetLeaf(propName, propNameLen); - CHKiRet(jsonPathFindParent(jroot, propName, leaf, &parent, 1)); + leaf = jsonPathGetLeaf(pProp->name, pProp->nameLen); + CHKiRet(jsonPathFindParent(jroot, pProp->name, leaf, &parent, 1)); *pjson = json_object_object_get(parent, (char*)leaf); if(*pjson == NULL) { ABORT_FINALIZE(RS_RET_NOT_FOUND); } finalize_it: + if(pProp->id == PROP_GLOBAL_VAR) + pthread_rwlock_unlock(&glblVars_rwlock); RETiRet; } -rsRetVal -msgGetCEEPropJSON(msg_t *pM, uchar *propName, int propNameLen, struct json_object **pjson) -{ - return msgGetJSONPropJSON(pM->json, propName, propNameLen, pjson); -} - -rsRetVal -msgGetLocalVarJSON(msg_t *pM, uchar *propName, int propNameLen, struct json_object **pjson) -{ - return msgGetJSONPropJSON(pM->localvars, propName, propNameLen, pjson); -} - -rsRetVal -msgGetGlobalVarJSON(uchar *propName, int propNameLen, struct json_object **pjson) -{ - DEFiRet; - pthread_rwlock_rdlock(&glblVars_rwlock); - iRet = msgGetJSONPropJSON(global_var_root, propName, propNameLen, pjson); - pthread_rwlock_unlock(&glblVars_rwlock); - RETiRet; -} /* Encode a JSON value and add it to provided string. Note that * the string object may be NULL. In this case, it is created |