X-Git-Url: https://git.distorted.org.uk/~mdw/runlisp/blobdiff_plain/10427eb21d77a0edeb2f17e434515b91b420cdfb..47a219e85c4215cea80c75ed9b26ed7dc404a8e2:/lib.c diff --git a/lib.c b/lib.c index 36751ab..251d932 100644 --- a/lib.c +++ b/lib.c @@ -267,7 +267,7 @@ void argv_ensure(struct argv *av, size_t n) if (need <= av->sz) return; newsz = av->sz ? 2*av->sz : 8; while (newsz < need) newsz *= 2; - av->v = xrealloc(av->v - av->o, newsz*sizeof(char *)) + av->o; + av->v = xrealloc(av->v - av->o, newsz*sizeof(char *)); av->v += av->o; av->sz = newsz; } @@ -932,7 +932,7 @@ static void set_config_section_parents(struct config *conf, * to have, so we can allocate the `parents' vector and fill it in. */ sect->nparents = av.n/2; - sect->parents = xmalloc(sect->nparents*sizeof(sect->parents)); + sect->parents = xmalloc(sect->nparents*sizeof(*sect->parents)); for (i = 0; i < av.n; i += 2) { n = av.v[i + 1] - av.v[i]; parent = config_find_section_n(conf, 0, av.v[i], n); @@ -1061,34 +1061,38 @@ struct config_var *config_find_var_n(struct config *conf, /* Set variable NAME to VALUE in SECT, with associated flags F. * * The names are null-terminated. The flags are variable flags: see `struct - * config_var' for details. + * config_var' for details. Returns the variable. * * If the variable is already set and has the `CF_OVERRIDE' flag, then this * function does nothing unless `CF_OVERRIDE' is /also/ set in F. */ -void config_set_var(struct config *conf, struct config_section *sect, - unsigned f, const char *name, const char *value) +struct config_var *config_set_var(struct config *conf, + struct config_section *sect, + unsigned f, + const char *name, const char *value) { - config_set_var_n(conf, sect, f, - name, strlen(name), - value, strlen(value)); + return (config_set_var_n(conf, sect, f, + name, strlen(name), + value, strlen(value))); } /* As `config_set_var', except that the variable NAME and VALUE have explicit * lengths (NAMELEN and VALUELEN, respectively) rather than being null- * terminated. */ -void config_set_var_n(struct config *conf, struct config_section *sect, - unsigned f, - const char *name, size_t namelen, - const char *value, size_t valuelen) +struct config_var *config_set_var_n(struct config *conf, + struct config_section *sect, + unsigned f, + const char *name, size_t namelen, + const char *value, size_t valuelen) { struct config_var *var = config_find_var_n(conf, sect, CF_CREAT, name, namelen); - if (var->f&~f&CF_OVERRIDE) return; + if (var->f&~f&CF_OVERRIDE) return (var); free(var->val); var->val = xstrndup(value, valuelen); var->n = valuelen; var->f = f; + return (var); } /* Initialize I to iterate over the variables directly defined in SECT. */