From 09a5e21cff7551e037385280e2a85e95c41072e4 Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sun, 29 Dec 2013 17:10:55 +0200 Subject: [PATCH] config.c: Implement store_int_variable_value_to_array() This can be used to insert variable entries with integer type into the variable array. Signed-off-by: Timo Kokkonen --- config.c | 46 +++++++++++++++++++++++++++++++++++++--------- config.h | 2 ++ 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/config.c b/config.c index 7caa63d..1dcc9c8 100644 --- a/config.c +++ b/config.c @@ -62,9 +62,8 @@ static void init_variable_value(struct variable_value *v) bzero(v, sizeof(*v)); } -static int store_str_variable_value_to_array(const char *variable, - const char *value, - struct plotter_config *cfg) +static struct variable_value *prepare_slot_for_insertion( + struct plotter_config *cfg, const char *variable) { struct variable_value *v; int i; @@ -82,12 +81,15 @@ static int store_str_variable_value_to_array(const char *variable, continue; free(v[i].name); + v[i].name = NULL; free(v[i].ptr); - goto out_store; + v[i].ptr = NULL; + + return &v[i]; } /* - * Failed to find an existing variable with same type, create + * Failed to find an existing variable with same name, create * a new one. Resize the variable array so that there is room * for the new entry and one terminator entry (with all fields * zeroed). @@ -97,10 +99,36 @@ static int store_str_variable_value_to_array(const char *variable, v = cfg->variables; init_variable_value(&cfg->variables[i + 1]); -out_store: - v[i].name = strdup(variable); - v[i].type = TYPE_STRING; - v[i].ptr = strdup(value); + return &v[i]; +} + +static int store_str_variable_value_to_array(const char *variable, + const char *value, + struct plotter_config *cfg) +{ + struct variable_value *v; + + v = prepare_slot_for_insertion(cfg, variable); + + v->name = strdup(variable); + v->type = TYPE_STRING; + v->ptr = strdup(value); + + return 0; +} + +int store_int_variable_value_to_array(const char *variable, int value, + struct plotter_config *cfg) +{ + struct variable_value *v; + int *p; + + v = prepare_slot_for_insertion(cfg, variable); + + v->name = strdup(variable); + v->type = TYPE_INT; + p = v->ptr = malloc(sizeof(value)); + *p = value; return 0; } diff --git a/config.h b/config.h index 851c7d4..c8abadc 100644 --- a/config.h +++ b/config.h @@ -30,6 +30,8 @@ int read_args(int argc, char *argv[], struct plotter_config *cfg); int populate_config_data_from_file(const char *path, struct plotter_config *cfg); +int store_int_variable_value_to_array(const char *variable, int value, + struct plotter_config *cfg); int replace_variables_with_values(char *str, size_t len, const struct plotter_config *cfg); -- 2.44.0