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;
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).
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;
}
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);