diff options
author | nicm <nicm> | 2017-01-09 19:27:00 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-01-09 19:27:00 +0000 |
commit | 5330a2a85d69647f4f402c5b1fe85dc548ce5416 (patch) | |
tree | b2a99f64ded421b63817fa79c8608fde9916af27 /cmd-source-file.c | |
parent | c05002b0f2d86d7706efdc9636ee660642bdcecb (diff) |
Run the source-file pattern through glob(3).
Diffstat (limited to 'cmd-source-file.c')
-rw-r--r-- | cmd-source-file.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/cmd-source-file.c b/cmd-source-file.c index d2178692..fc5de58b 100644 --- a/cmd-source-file.c +++ b/cmd-source-file.c @@ -18,7 +18,10 @@ #include <sys/types.h> +#include <errno.h> +#include <glob.h> #include <stdlib.h> +#include <string.h> #include "tmux.h" @@ -48,23 +51,28 @@ cmd_source_file_exec(struct cmd *self, struct cmdq_item *item) struct client *c = item->client; int quiet; struct cmdq_item *new_item; + enum cmd_retval retval; + glob_t g; + int i; - quiet = args_has(args, 'q'); - switch (load_cfg(args->argv[0], c, item, quiet)) { - case -1: - if (cfg_finished) - cfg_print_causes(item); + if (glob(args->argv[0], 0, NULL, &g) != 0) { + cmdq_error(item, "%s: %s", args->argv[0], strerror(errno)); return (CMD_RETURN_ERROR); - case 0: - if (cfg_finished) - cfg_print_causes(item); - return (CMD_RETURN_NORMAL); + } + quiet = args_has(args, 'q'); + + retval = CMD_RETURN_NORMAL; + for (i = 0; i < g.gl_pathc; i++) { + if (load_cfg(g.gl_pathv[i], c, item, quiet) != 0) + retval = CMD_RETURN_ERROR; } if (cfg_finished) { new_item = cmdq_get_callback(cmd_source_file_done, NULL); cmdq_insert_after(item, new_item); } - return (CMD_RETURN_NORMAL); + + globfree(&g); + return (retval); } static enum cmd_retval |