summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/persistence-binding.c20
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