aboutsummaryrefslogtreecommitdiff
path: root/lib/util.c
blob: 560671c6836b209d8f27ea561a00ec786b915309 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;
	}
}