summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2018-02-02 13:27:25 +0000
committerokan <okan>2018-02-02 13:27:25 +0000
commit9bf750b0549f10fdd4f5898dbab40ad4c946eee6 (patch)
tree29582e4653a13df95a27f36f3fab2d28b908466e
parent174537f29e4735799f5cafd29e34bb31f831f9b3 (diff)
downloadcwm-9bf750b0549f10fdd4f5898dbab40ad4c946eee6.tar.gz
cwm-9bf750b0549f10fdd4f5898dbab40ad4c946eee6.tar.xz
cwm-9bf750b0549f10fdd4f5898dbab40ad4c946eee6.zip
Simplification; use asprintf where appropriate now.
-rw-r--r--calmwm.h8
-rw-r--r--conf.c60
-rw-r--r--parse.y10
-rw-r--r--search.c6
4 files changed, 39 insertions, 45 deletions
diff --git a/calmwm.h b/calmwm.h
index 117cdb0..b2183e7 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -260,7 +260,7 @@ TAILQ_HEAD(mousebind_q, bind_ctx);
 struct cmd_ctx {
 	TAILQ_ENTRY(cmd_ctx)	 entry;
 	char			*name;
-	char			 path[PATH_MAX];
+	char			*path;
 };
 TAILQ_HEAD(cmd_q, cmd_ctx);
 TAILQ_HEAD(wm_q, cmd_ctx);
@@ -298,13 +298,13 @@ struct conf {
 	int			 snapdist;
 	struct gap		 gap;
 	char			*color[CWM_COLOR_NITEMS];
-	char			 known_hosts[PATH_MAX];
 	char			*font;
 	char			*wmname;
 	Cursor			 cursor[CF_NITEMS];
 	int			 xrandr;
 	int			 xrandr_event_base;
 	char			*homedir;
+	char			*known_hosts;
 	char			*wm_argv;
 };
 
@@ -540,9 +540,9 @@ int			 conf_bind_mouse(struct conf *, const char *,
     			     const char *);
 void			 conf_clear(struct conf *);
 void			 conf_client(struct client_ctx *);
-int			 conf_cmd_add(struct conf *, const char *,
+void			 conf_cmd_add(struct conf *, const char *,
 			     const char *);
-int			 conf_wm_add(struct conf *, const char *,
+void			 conf_wm_add(struct conf *, const char *,
 			     const char *);
 void			 conf_cursor(struct conf *);
 void			 conf_grab_kbd(Window);
diff --git a/conf.c b/conf.c
index 9fcee2a..9c02e3e 100644
--- a/conf.c
+++ b/conf.c
@@ -33,7 +33,6 @@
 #include "calmwm.h"
 
 static const char	*conf_bind_getmask(const char *, unsigned int *);
-static void		 conf_cmd_remove(struct conf *, const char *);
 static void		 conf_unbind_key(struct conf *, struct bind_ctx *);
 static void		 conf_unbind_mouse(struct conf *, struct bind_ctx *);
 
@@ -279,8 +278,7 @@ conf_init(struct conf *c)
 
 	conf_wm_add(c, "cwm", "cwm");
 
-	(void)snprintf(c->known_hosts, sizeof(c->known_hosts), "%s/%s",
-	    c->homedir, ".ssh/known_hosts");
+	xasprintf(&c->known_hosts, "%s/%s", c->homedir, ".ssh/known_hosts");
 
 	c->font = xstrdup("sans-serif:pixelsize=14:bold");
 	c->wmname = xstrdup("CWM");
@@ -298,11 +296,13 @@ conf_clear(struct conf *c)
 	while ((cmd = TAILQ_FIRST(&c->cmdq)) != NULL) {
 		TAILQ_REMOVE(&c->cmdq, cmd, entry);
 		free(cmd->name);
+		free(cmd->path);
 		free(cmd);
 	}
 	while ((wm = TAILQ_FIRST(&c->wmq)) != NULL) {
 		TAILQ_REMOVE(&c->wmq, wm, entry);
 		free(wm->name);
+		free(wm->path);
 		free(wm);
 	}
 	while ((kb = TAILQ_FIRST(&c->keybindq)) != NULL) {
@@ -327,57 +327,49 @@ conf_clear(struct conf *c)
 	for (i = 0; i < CWM_COLOR_NITEMS; i++)
 		free(c->color[i]);
 
+	free(c->known_hosts);
 	free(c->font);
 	free(c->wmname);
 }
 
-int
+void
 conf_cmd_add(struct conf *c, const char *name, const char *path)
 {
-	struct cmd_ctx	*cmd;
+	struct cmd_ctx	*cmd, *cmdtmp = NULL, *cmdnxt;
 
 	cmd = xmalloc(sizeof(*cmd));
 	cmd->name = xstrdup(name);
-	if (strlcpy(cmd->path, path, sizeof(cmd->path)) >= sizeof(cmd->path)) {
-		free(cmd->name);
-		free(cmd);
-		return(0);
-	}
-	conf_cmd_remove(c, name);
-
-	TAILQ_INSERT_TAIL(&c->cmdq, cmd, entry);
-	return(1);
-}
-
-static void
-conf_cmd_remove(struct conf *c, const char *name)
-{
-	struct cmd_ctx	*cmd = NULL, *cmdnxt;
-
-	TAILQ_FOREACH_SAFE(cmd, &c->cmdq, entry, cmdnxt) {
-		if (strcmp(cmd->name, name) == 0) {
-			TAILQ_REMOVE(&c->cmdq, cmd, entry);
-			free(cmd->name);
-			free(cmd);
+	cmd->path = xstrdup(path);
+
+	TAILQ_FOREACH_SAFE(cmdtmp, &c->cmdq, entry, cmdnxt) {
+		if (strcmp(cmdtmp->name, name) == 0) {
+			TAILQ_REMOVE(&c->cmdq, cmdtmp, entry);
+			free(cmdtmp->name);
+			free(cmdtmp->path);
+			free(cmdtmp);
 		}
 	}
+	TAILQ_INSERT_TAIL(&c->cmdq, cmd, entry);
 }
 
-int
+void
 conf_wm_add(struct conf *c, const char *name, const char *path)
 {
-	struct cmd_ctx	*wm;
+	struct cmd_ctx	*wm, *wmtmp = NULL, *wmnxt;
 
 	wm = xmalloc(sizeof(*wm));
 	wm->name = xstrdup(name);
-	if (strlcpy(wm->path, path, sizeof(wm->path)) >= sizeof(wm->path)) {
-		free(wm->name);
-		free(wm);
-		return(0);
+	wm->path = xstrdup(path);
+
+	TAILQ_FOREACH_SAFE(wmtmp, &c->cmdq, entry, wmnxt) {
+		if (strcmp(wmtmp->name, name) == 0) {
+			TAILQ_REMOVE(&c->wmq, wmtmp, entry);
+			free(wmtmp->name);
+			free(wmtmp->path);
+			free(wmtmp);
+		}
 	}
-
 	TAILQ_INSERT_TAIL(&c->wmq, wm, entry);
-	return(1);
 }
 
 void
diff --git a/parse.y b/parse.y
index fbc19ed..6c4a556 100644
--- a/parse.y
+++ b/parse.y
@@ -137,22 +137,24 @@ main		: FONTNAME STRING		{
 			conf->snapdist = $2;
 		}
 		| COMMAND STRING string		{
-			if (!conf_cmd_add(conf, $2, $3)) {
-				yyerror("command name/path too long");
+			if (strlen($3) >= PATH_MAX) {
+				yyerror("%s command path too long", $2);
 				free($2);
 				free($3);
 				YYERROR;
 			}
+			conf_cmd_add(conf, $2, $3);
 			free($2);
 			free($3);
 		}
 		| WM STRING string	{
-			if (!conf_wm_add(conf, $2, $3)) {
-				yyerror("wm name/path too long");
+			if (strlen($3) >= PATH_MAX) {
+				yyerror("%s wm path too long", $2);
 				free($2);
 				free($3);
 				YYERROR;
 			}
+			conf_wm_add(conf, $2, $3);
 			free($2);
 			free($3);
 		}
diff --git a/search.c b/search.c
index 0ab75b2..6911436 100644
--- a/search.c
+++ b/search.c
@@ -162,12 +162,11 @@ static void
 match_path_type(struct menu_q *resultq, char *search, int flag)
 {
 	struct menu     *mi;
-	char 		 pattern[PATH_MAX];
+	char 		*pattern;
 	glob_t		 g;
 	int		 i;
 
-	(void)strlcpy(pattern, search, sizeof(pattern));
-	(void)strlcat(pattern, "*", sizeof(pattern));
+	xasprintf(&pattern, "%s*", search);
 	if (glob(pattern, GLOB_MARK, NULL, &g) != 0)
 		return;
 	for (i = 0; i < g.gl_pathc; i++) {
@@ -178,6 +177,7 @@ match_path_type(struct menu_q *resultq, char *search, int flag)
 		TAILQ_INSERT_TAIL(resultq, mi, resultentry);
 	}
 	globfree(&g);
+	free(pattern);
 }
 
 void