diff --git a/src/core/store.c b/src/core/store.c
index be307c5829adb49f212a478f13cb4d34c82983e4..e9e0979e72e4db10ec99d34f2596f178c5d19317 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
#include "sysdb.h"
#include "core/store.h"
-#include "core/error.h"
#include "core/plugin.h"
+#include "utils/error.h"
#include "utils/llist.h"
#include <assert.h>
/* stored object = */ SDB_ATTRIBUTE, key, last_update,
&updated_attr);
- SDB_ATTR(updated_attr)->value = strdup(value);
- if (! SDB_ATTR(updated_attr)->value) {
- sdb_object_deref(SDB_OBJ(updated_attr));
- status = -1;
+ if (status >= 0) {
+ assert(updated_attr);
+ SDB_ATTR(updated_attr)->value = strdup(value);
+ if (! SDB_ATTR(updated_attr)->value) {
+ sdb_object_deref(SDB_OBJ(updated_attr));
+ status = -1;
+ }
}
+
pthread_rwlock_unlock(&obj_lock);
return status;
} /* sdb_store_attribute */
char errbuf[1024];
sdb_log(SDB_LOG_ERR, "store: Failed to retrieve attributes: %s\n",
sdb_strerror(errno, errbuf, sizeof(errbuf)));
- break;
+ sdb_strbuf_append(buf, "{\"error\": \"failed to retrieve "
+ "attributes: %s\"}", errbuf);
}
+ /* has_next returns false if the iterator is NULL */
while (sdb_llist_iter_has_next(attr_iter)) {
sdb_attribute_t *attr = SDB_ATTR(sdb_llist_iter_get_next(attr_iter));
assert(attr);
char errbuf[1024];
sdb_log(SDB_LOG_ERR, "store: Failed to retrieve services: %s\n",
sdb_strerror(errno, errbuf, sizeof(errbuf)));
- break;
+ sdb_strbuf_append(buf, "{\"error\": \"failed to retrieve "
+ "services: %s\"}", errbuf);
}
while (sdb_llist_iter_has_next(svc_iter)) {
}
sdb_llist_iter_destroy(svc_iter);
- sdb_strbuf_append(buf, "]}");
+ sdb_strbuf_append(buf, "]},");
}
sdb_strbuf_append(buf, "]}");