exit(code);
}
+static void
+set_modif_flag(int var, int flag)
+{
+ var_tab[var].modif = flag;
+}
+
+static int
+get_modif_flag(int var)
+{
+ return var_tab[var].modif;
+}
+
void
free_string(char* c)
{
static void
clear_var(int var)
{
- if ((var_tab[var] != NULL))
- free_string(var_tab[var]);
+ if ((var_tab[var].value != NULL))
+ free_string(var_tab[var].value);
+ var_tab[var].modif = 0;
}
static void
set_var(int var, char* value)
{
clear_var(var);
- var_tab[var] = xstrdup(value);
+ var_tab[var].modif = 1;
+ var_tab[var].value = xstrdup(value);
}
void
{
if (var < 0)
return xstrdup(const_tab[-var]);
- return xstrdup(var_tab[var]);
+ return xstrdup(var_tab[var].value);
}
static int
u = unfold(p->value);
value = get_var(pv->varcode);
if (strcmp(u, value)){
- pv->modified = 0;
+ set_modif_flag(pv->varcode, 0);
free_string(p->value);
p->value = fold(value,
strlen(p->name) + 2);
// find new headers
for (i = 0; i < HASHSIZE; i++){
LIST_FOREACH(pv, hash + i){
- if (pv->type == VAR_HEADER && pv->modified){
- pv->modified = 0;
+ if (pv->type == VAR_HEADER &&
+ get_modif_flag(pv->varcode)){
+ set_modif_flag(pv->varcode, 0);
p = xmalloc(sizeof(struct hlist));
p->name = xstrdup(pv->name);
p->value = get_var(pv->varcode);
u = unfold(p->value);
set_var(pv->varcode, u);
free_string(u);
- pv->modified = 0;
+ set_modif_flag(pv->varcode, 0);
p->have_var = 1;
}
}
compile(input_tree, NULL);
skip_conf:
- var_tab = xmalloc((max_varcode + 1) * sizeof(char*));
+ var_tab = xmalloc((max_varcode + 1) * sizeof(struct vartab));
for (i = 0; i <= max_varcode; i++) {
- var_tab[i] = empty;
+ var_tab[i].value = empty;
+ var_tab[i].modif = 0;
}
current_headers = make_hlist(0);