From cb2a50691fb0cddb64e1b5a9ed242a6a0b42d503 Mon Sep 17 00:00:00 2001 From: Hristo Venev Date: Mon, 22 Jun 2020 12:32:11 +0300 Subject: Initial commit. --- lib/util.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 lib/util.c (limited to 'lib/util.c') diff --git a/lib/util.c b/lib/util.c new file mode 100644 index 0000000..560671c --- /dev/null +++ b/lib/util.c @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later + +#include "impl.h" + +int hkvs_record_set(hkvs *c, hkvs_table *t, hkvs_rid rid, const char *value, size_t size) { + char *ptr; + int r = hkvs_record_resize(c, t, rid, &ptr, size, 0); + if(r < 0) return r; + memcpy(ptr, value, size); + hkvs_put_records(c); + return 0; +} + +int hkvs_record_update(hkvs *c, hkvs_table *t, hkvs_rid *prid, const char *key, const char *value, size_t size) { + hkvs_rid rid = hkvs_record_find(c, t, key); + if(hkvs_rid_ok(rid)) { + int r = hkvs_record_set(c, t, rid, value, size); + if(r < 0) return 0; + *prid = rid; + return 0; + } else { + char *ptr; + int r = hkvs_record_append(c, t, &rid, key, &ptr, size); + if(r < 0) return r; + memcpy(ptr, value, size); + hkvs_put_records(c); + *prid = rid; + return 1; + } +} -- cgit