summaryrefslogtreecommitdiff
path: root/keyword.c
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2022-07-28 19:38:07 -0300
committermrb0nk500 <b0nk@b0nk.xyz>2022-07-28 19:38:07 -0300
commitb46091ed2d79aacc0c44417ac2e3f85663f750af (patch)
tree4bf2802e5fdc5ad461a920e3bb208f7c467ff2b0 /keyword.c
parent47a5abd3ce92592c87f86d0cf33f57fff687c246 (diff)
keyword: Add `get_keyword_offset_ptr()`
Diffstat (limited to 'keyword.c')
-rw-r--r--keyword.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/keyword.c b/keyword.c
index c033242..b536820 100644
--- a/keyword.c
+++ b/keyword.c
@@ -1,6 +1,14 @@
#include <time.h>
#include "keyword.h"
+void *get_keyword_offset_ptr(const keyword *key, void *ptr) {
+ char *ret = (char *)(ptr+key->offsets[0]);
+ for (int i = 1; (int64_t)key->offsets[i] >= 0; ++i) {
+ ret = *(char **)(ret+key->offsets[i]);
+ }
+ return (void *)ret;
+}
+
keyword_val get_keyword_value(const keyword *key, char *value, int *error) {
keyword_val val = {0};
int dummy = 0;
@@ -35,21 +43,13 @@ int set_keyword(const keyword *key, keyword_val val, void *ret, void *ctx) {
return (callback_ret > 0) ? 0 : 5;
} else {
char *tmp_ret = (char *)get_keyword_offset_ptr(key, ret);
- char *tmp_ret = (char *)ret;
- size_t offset = -1;
- for (int i = 0; (int64_t)key->offsets[i] >= 0; ++i) {
- if ((int64_t)offset >= 0) {
- tmp_ret = *(char **)(tmp_ret+key->offsets[i]);
- }
- offset = key->offsets[i];
- }
switch (type) {
case TYPE_INT :
- case TYPE_BOOL : *(int *)(tmp_ret+offset) = val.i; break;
- case TYPE_TIME : *(time_t *)(tmp_ret+offset) = val.t; break;
- case TYPE_STRING: *(char **)(tmp_ret+offset) = val.str; break;
- case TYPE_FLOAT : *(float *)(tmp_ret+offset) = val.f; break;
+ case TYPE_BOOL : *(int *)tmp_ret = val.i; break;
+ case TYPE_TIME : *(time_t *)tmp_ret = val.t; break;
+ case TYPE_STRING: *(char **)tmp_ret = val.str; break;
+ case TYPE_FLOAT : *(float *)tmp_ret = val.f; break;
default : return 6; break;
}
return 0;