simplify parse_config using assignment; inspired by a very old diff from

Tiago Cunha.
This commit is contained in:
okan 2014-01-27 14:49:40 +00:00
parent 6f10349843
commit 469db5f371

59
parse.y
View File

@ -547,76 +547,21 @@ parse_config(const char *filename, struct conf *xconf)
{ {
int errors = 0; int errors = 0;
conf = xcalloc(1, sizeof(*conf)); conf = xconf;
if ((file = pushfile(filename)) == NULL) { if ((file = pushfile(filename)) == NULL) {
free(conf);
return (-1); return (-1);
} }
topfile = file; topfile = file;
conf_init(conf);
yyparse(); yyparse();
errors = file->errors; errors = file->errors;
popfile(); popfile();
if (errors) { if (errors) {
conf_clear(conf); conf_clear(conf);
conf_init(conf);
} }
else {
struct autogroupwin *ag;
struct keybinding *kb;
struct winmatch *wm;
struct cmd *cmd;
struct mousebinding *mb;
int i;
conf_clear(xconf);
xconf->flags = conf->flags;
xconf->bwidth = conf->bwidth;
xconf->mamount = conf->mamount;
xconf->snapdist = conf->snapdist;
xconf->gap = conf->gap;
while ((cmd = TAILQ_FIRST(&conf->cmdq)) != NULL) {
TAILQ_REMOVE(&conf->cmdq, cmd, entry);
TAILQ_INSERT_TAIL(&xconf->cmdq, cmd, entry);
}
while ((kb = TAILQ_FIRST(&conf->keybindingq)) != NULL) {
TAILQ_REMOVE(&conf->keybindingq, kb, entry);
TAILQ_INSERT_TAIL(&xconf->keybindingq, kb, entry);
}
while ((ag = TAILQ_FIRST(&conf->autogroupq)) != NULL) {
TAILQ_REMOVE(&conf->autogroupq, ag, entry);
TAILQ_INSERT_TAIL(&xconf->autogroupq, ag, entry);
}
while ((wm = TAILQ_FIRST(&conf->ignoreq)) != NULL) {
TAILQ_REMOVE(&conf->ignoreq, wm, entry);
TAILQ_INSERT_TAIL(&xconf->ignoreq, wm, entry);
}
while ((mb = TAILQ_FIRST(&conf->mousebindingq)) != NULL) {
TAILQ_REMOVE(&conf->mousebindingq, mb, entry);
TAILQ_INSERT_TAIL(&xconf->mousebindingq, mb, entry);
}
(void)strlcpy(xconf->termpath, conf->termpath,
sizeof(xconf->termpath));
(void)strlcpy(xconf->lockpath, conf->lockpath,
sizeof(xconf->lockpath));
for (i = 0; i < CWM_COLOR_NITEMS; i++)
xconf->color[i] = conf->color[i];
xconf->font = conf->font;
}
free(conf);
return (errors ? -1 : 0); return (errors ? -1 : 0);
} }