summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--parse.y59
1 files changed, 2 insertions, 57 deletions
diff --git a/parse.y b/parse.y
index cb14dd1..a23e1c5 100644
--- a/parse.y
+++ b/parse.y
@@ -547,76 +547,21 @@ parse_config(const char *filename, struct conf *xconf)
 {
 	int			 errors = 0;
 
-	conf = xcalloc(1, sizeof(*conf));
+	conf = xconf;
 
 	if ((file = pushfile(filename)) == NULL) {
-		free(conf);
 		return (-1);
 	}
 	topfile = file;
 
-	conf_init(conf);
-
 	yyparse();
 	errors = file->errors;
 	popfile();
 
 	if (errors) {
 		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);
 }