diff --git a/src/core/store.c b/src/core/store.c
index e8d14a079679a12d5a76ef58735b44920065755d..2522233112a8d125024d9853710ff90565f768d4 100644 (file)
--- a/src/core/store.c
+++ b/src/core/store.c
typedef struct {
sdb_store_base_t super;
- char *value;
+ sdb_data_t value;
} sdb_attribute_t;
#define SDB_ATTR(obj) ((sdb_attribute_t *)(obj))
#define SDB_CONST_ATTR(obj) ((const sdb_attribute_t *)(obj))
static int
sdb_attr_init(sdb_object_t *obj, va_list ap)
{
- const char *value;
+ const sdb_data_t *value;
int ret;
- /* this will consume the first argument (type) of ap */
+ /* this will consume the first two arguments
+ * (type and last_update) of ap */
ret = store_base_init(obj, ap);
if (ret)
return ret;
- value = va_arg(ap, const char *);
+ value = va_arg(ap, const sdb_data_t *);
- if (value) {
- SDB_ATTR(obj)->value = strdup(value);
- if (! SDB_ATTR(obj)->value)
+ if (value)
+ if (sdb_data_copy(&SDB_ATTR(obj)->value, value))
return -1;
- }
return 0;
} /* sdb_attr_init */
assert(obj);
store_base_destroy(obj);
-
- if (SDB_ATTR(obj)->value)
- free(SDB_ATTR(obj)->value);
+ sdb_data_free_datum(&SDB_ATTR(obj)->value);
} /* sdb_attr_destroy */
static sdb_type_t sdb_store_obj_type = {
sdb_strbuf_append(buf, "{\"name\": \"%s\", ", SDB_OBJ(sobj)->name);
if (type == SDB_ATTRIBUTE)
+ /* XXX: this needs to be type-dependent */
sdb_strbuf_append(buf, "\"value\": \"%s\", ",
- SDB_ATTR(sobj)->value);
+ SDB_ATTR(sobj)->value.data.string);
sdb_strbuf_append(buf, "\"last_update\": \"%s\"}", time_str);
if (sdb_llist_iter_has_next(iter))
} /* sdb_store_get_host */
int
-sdb_store_attribute(const char *hostname, const char *key, const char *value,
+sdb_store_attribute(const char *hostname,
+ const char *key, const sdb_data_t *value,
sdb_time_t last_update)
{
int status;
if (status >= 0) {
assert(updated_attr);
- SDB_ATTR(updated_attr)->value = strdup(value);
- if (! SDB_ATTR(updated_attr)->value) {
+ if (sdb_data_copy(&SDB_ATTR(updated_attr)->value, value)) {
sdb_object_deref(SDB_OBJ(updated_attr));
status = -1;
}