diff options
author | mrb0nk500 <b0nk@b0nk.xyz> | 2022-07-28 19:38:07 -0300 |
---|---|---|
committer | mrb0nk500 <b0nk@b0nk.xyz> | 2022-07-28 19:38:07 -0300 |
commit | b46091ed2d79aacc0c44417ac2e3f85663f750af (patch) | |
tree | 4bf2802e5fdc5ad461a920e3bb208f7c467ff2b0 /keyword.c | |
parent | 47a5abd3ce92592c87f86d0cf33f57fff687c246 (diff) |
keyword: Add `get_keyword_offset_ptr()`
Diffstat (limited to 'keyword.c')
-rw-r--r-- | keyword.c | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -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; |