summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2022-08-06 12:21:55 -0300
committermrb0nk500 <b0nk@b0nk.xyz>2022-08-06 12:21:55 -0300
commit50a36e69eedaf9a4438d939e66ed5d09aa0f65c1 (patch)
tree1268d6424498a0a440f92075de1bd9f2b94744b6
parent19ee637cefbdc197c0d249b146f263116812db53 (diff)
keyword, git: Update error checking for every function that uses
`get_keyword_offset_ptr()`
-rw-r--r--config.c2
-rw-r--r--keyword.c44
2 files changed, 26 insertions, 20 deletions
diff --git a/config.c b/config.c
index 559fc55..dfbba40 100644
--- a/config.c
+++ b/config.c
@@ -62,7 +62,7 @@ config *parse_config(const char *filename) {
/* Did we fail to parse the config file? */
if (error = parse_key_value_file(cfg, &type_error, config_keywords, buf, "=", NULL)) {
- if (type_error || (error >= 3 && error != 6)) {
+ if (type_error || (error >= 3 && error > 7)) {
cleanup_config(cfg);
free(buf);
return NULL;
diff --git a/keyword.c b/keyword.c
index 3a87c13..fd323a0 100644
--- a/keyword.c
+++ b/keyword.c
@@ -61,14 +61,17 @@ keyword_val get_keyword(const keyword *key, void *data, void *ctx, int *error) {
const int callback_ret = (key->get_callback != NULL) ? key->get_callback(ctx, data, key, &val) : 0;
if (!callback_ret) {
char *data_member = (char *)get_keyword_offset_ptr(key, data);
-
- switch (key->type) {
- case TYPE_INT :
- case TYPE_BOOL : val.i = *(int *)data_member; break;
- case TYPE_TIME : val.t = *(time_t *)data_member; break;
- case TYPE_STRING: val.str = *(char **)data_member; break;
- case TYPE_FLOAT : val.f = *(float *)data_member; break;
- default : *error = 2; break;
+ if (data_member != NULL) {
+ switch (key->type) {
+ case TYPE_INT :
+ case TYPE_BOOL : val.i = *(int *)data_member; break;
+ case TYPE_TIME : val.t = *(time_t *)data_member; break;
+ case TYPE_STRING: val.str = *(char **)data_member; break;
+ case TYPE_FLOAT : val.f = *(float *)data_member; break;
+ default : *error = 2; break;
+ }
+ } else {
+ *error = 2;
}
} else if (callback_ret < 0) {
*error = 1;
@@ -85,16 +88,19 @@ 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);
-
- switch (key->type) {
- case TYPE_INT :
- 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;
+ if (tmp_ret != NULL) {
+ switch (key->type) {
+ case TYPE_INT :
+ 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;
+ } else {
+ return 7;
}
- return 0;
}
}
@@ -164,14 +170,14 @@ int parse_key_value_file(void *ret, void *ctx, const keyword **keywords, char *b
if (parse_cb != NULL) {
/* Did the callback return an error. */
if (parse_cb(&ret, ctx, buf) < 0) {
- ret_val = 7;
+ ret_val = 8;
break;
}
}
}
return ret_val;
} else {
- return 8;
+ return 9;
}
}