diff options
Diffstat (limited to 'src/persistence-binding.c')
-rw-r--r-- | src/persistence-binding.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/persistence-binding.c b/src/persistence-binding.c index 3efb1f0..d1327a5 100644 --- a/src/persistence-binding.c +++ b/src/persistence-binding.c @@ -236,24 +236,40 @@ static void xdb_delete(afb_req_t req, datum *key) static void xdb_get(afb_req_t req, datum *key) { struct json_object* obj; + struct json_object* args; + struct json_object* item = NULL; datum result; + /* get the key */ + args = afb_req_json(req); + + obj = json_object_new_object(); + + if (json_object_object_get_ex(args, "key", &item)) + { + json_object_object_add(obj, "key", json_object_get(item)); + } + result = gdbm_fetch(database, *key); if (result.dptr) { - obj = json_object_new_object(); + json_object_object_add(obj, "value", json_tokener_parse(result.dptr)); + afb_req_reply(req, obj, NULL, NULL); + free(result.dptr); + } else { + json_object_object_add(obj, "value", NULL); AFB_API_ERROR(afbBindingRoot, "can't get key %s: %s%s%s", DATA_STR(*key), gdbm_strerror(gdbm_errno), IFSYS(", ", ""), IFSYS(strerror(errno), "")); - afb_req_reply_f(req, NULL, "failed", "%s", gdbm_strerror(gdbm_errno)); + afb_req_reply_f(req, obj, "failed", "%s", gdbm_strerror(gdbm_errno)); } } #endif |