Simplification; use asprintf where appropriate now.

This commit is contained in:
okan 2018-02-02 13:27:25 +00:00
parent 174537f29e
commit 9bf750b054
4 changed files with 38 additions and 44 deletions

View File

@ -260,7 +260,7 @@ TAILQ_HEAD(mousebind_q, bind_ctx);
struct cmd_ctx { struct cmd_ctx {
TAILQ_ENTRY(cmd_ctx) entry; TAILQ_ENTRY(cmd_ctx) entry;
char *name; char *name;
char path[PATH_MAX]; char *path;
}; };
TAILQ_HEAD(cmd_q, cmd_ctx); TAILQ_HEAD(cmd_q, cmd_ctx);
TAILQ_HEAD(wm_q, cmd_ctx); TAILQ_HEAD(wm_q, cmd_ctx);
@ -298,13 +298,13 @@ struct conf {
int snapdist; int snapdist;
struct gap gap; struct gap gap;
char *color[CWM_COLOR_NITEMS]; char *color[CWM_COLOR_NITEMS];
char known_hosts[PATH_MAX];
char *font; char *font;
char *wmname; char *wmname;
Cursor cursor[CF_NITEMS]; Cursor cursor[CF_NITEMS];
int xrandr; int xrandr;
int xrandr_event_base; int xrandr_event_base;
char *homedir; char *homedir;
char *known_hosts;
char *wm_argv; char *wm_argv;
}; };
@ -540,9 +540,9 @@ int conf_bind_mouse(struct conf *, const char *,
const char *); const char *);
void conf_clear(struct conf *); void conf_clear(struct conf *);
void conf_client(struct client_ctx *); void conf_client(struct client_ctx *);
int conf_cmd_add(struct conf *, const char *, void conf_cmd_add(struct conf *, const char *,
const char *); const char *);
int conf_wm_add(struct conf *, const char *, void conf_wm_add(struct conf *, const char *,
const char *); const char *);
void conf_cursor(struct conf *); void conf_cursor(struct conf *);
void conf_grab_kbd(Window); void conf_grab_kbd(Window);

58
conf.c
View File

@ -33,7 +33,6 @@
#include "calmwm.h" #include "calmwm.h"
static const char *conf_bind_getmask(const char *, unsigned int *); 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_key(struct conf *, struct bind_ctx *);
static void conf_unbind_mouse(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"); conf_wm_add(c, "cwm", "cwm");
(void)snprintf(c->known_hosts, sizeof(c->known_hosts), "%s/%s", xasprintf(&c->known_hosts, "%s/%s", c->homedir, ".ssh/known_hosts");
c->homedir, ".ssh/known_hosts");
c->font = xstrdup("sans-serif:pixelsize=14:bold"); c->font = xstrdup("sans-serif:pixelsize=14:bold");
c->wmname = xstrdup("CWM"); c->wmname = xstrdup("CWM");
@ -298,11 +296,13 @@ conf_clear(struct conf *c)
while ((cmd = TAILQ_FIRST(&c->cmdq)) != NULL) { while ((cmd = TAILQ_FIRST(&c->cmdq)) != NULL) {
TAILQ_REMOVE(&c->cmdq, cmd, entry); TAILQ_REMOVE(&c->cmdq, cmd, entry);
free(cmd->name); free(cmd->name);
free(cmd->path);
free(cmd); free(cmd);
} }
while ((wm = TAILQ_FIRST(&c->wmq)) != NULL) { while ((wm = TAILQ_FIRST(&c->wmq)) != NULL) {
TAILQ_REMOVE(&c->wmq, wm, entry); TAILQ_REMOVE(&c->wmq, wm, entry);
free(wm->name); free(wm->name);
free(wm->path);
free(wm); free(wm);
} }
while ((kb = TAILQ_FIRST(&c->keybindq)) != NULL) { while ((kb = TAILQ_FIRST(&c->keybindq)) != NULL) {
@ -327,57 +327,49 @@ conf_clear(struct conf *c)
for (i = 0; i < CWM_COLOR_NITEMS; i++) for (i = 0; i < CWM_COLOR_NITEMS; i++)
free(c->color[i]); free(c->color[i]);
free(c->known_hosts);
free(c->font); free(c->font);
free(c->wmname); free(c->wmname);
} }
int void
conf_cmd_add(struct conf *c, const char *name, const char *path) 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 = xmalloc(sizeof(*cmd));
cmd->name = xstrdup(name); cmd->name = xstrdup(name);
if (strlcpy(cmd->path, path, sizeof(cmd->path)) >= sizeof(cmd->path)) { cmd->path = xstrdup(path);
free(cmd->name);
free(cmd);
return(0);
}
conf_cmd_remove(c, name);
TAILQ_INSERT_TAIL(&c->cmdq, cmd, entry); TAILQ_FOREACH_SAFE(cmdtmp, &c->cmdq, entry, cmdnxt) {
return(1); if (strcmp(cmdtmp->name, name) == 0) {
} TAILQ_REMOVE(&c->cmdq, cmdtmp, entry);
free(cmdtmp->name);
static void free(cmdtmp->path);
conf_cmd_remove(struct conf *c, const char *name) free(cmdtmp);
{
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);
} }
} }
TAILQ_INSERT_TAIL(&c->cmdq, cmd, entry);
} }
int void
conf_wm_add(struct conf *c, const char *name, const char *path) 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 = xmalloc(sizeof(*wm));
wm->name = xstrdup(name); wm->name = xstrdup(name);
if (strlcpy(wm->path, path, sizeof(wm->path)) >= sizeof(wm->path)) { wm->path = xstrdup(path);
free(wm->name);
free(wm);
return(0);
}
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); TAILQ_INSERT_TAIL(&c->wmq, wm, entry);
return(1);
} }
void void

10
parse.y
View File

@ -137,22 +137,24 @@ main : FONTNAME STRING {
conf->snapdist = $2; conf->snapdist = $2;
} }
| COMMAND STRING string { | COMMAND STRING string {
if (!conf_cmd_add(conf, $2, $3)) { if (strlen($3) >= PATH_MAX) {
yyerror("command name/path too long"); yyerror("%s command path too long", $2);
free($2); free($2);
free($3); free($3);
YYERROR; YYERROR;
} }
conf_cmd_add(conf, $2, $3);
free($2); free($2);
free($3); free($3);
} }
| WM STRING string { | WM STRING string {
if (!conf_wm_add(conf, $2, $3)) { if (strlen($3) >= PATH_MAX) {
yyerror("wm name/path too long"); yyerror("%s wm path too long", $2);
free($2); free($2);
free($3); free($3);
YYERROR; YYERROR;
} }
conf_wm_add(conf, $2, $3);
free($2); free($2);
free($3); free($3);
} }

View File

@ -162,12 +162,11 @@ static void
match_path_type(struct menu_q *resultq, char *search, int flag) match_path_type(struct menu_q *resultq, char *search, int flag)
{ {
struct menu *mi; struct menu *mi;
char pattern[PATH_MAX]; char *pattern;
glob_t g; glob_t g;
int i; int i;
(void)strlcpy(pattern, search, sizeof(pattern)); xasprintf(&pattern, "%s*", search);
(void)strlcat(pattern, "*", sizeof(pattern));
if (glob(pattern, GLOB_MARK, NULL, &g) != 0) if (glob(pattern, GLOB_MARK, NULL, &g) != 0)
return; return;
for (i = 0; i < g.gl_pathc; i++) { 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); TAILQ_INSERT_TAIL(resultq, mi, resultentry);
} }
globfree(&g); globfree(&g);
free(pattern);
} }
void void