summaryrefslogtreecommitdiffstats
path: root/cmd-source-file.c
diff options
context:
space:
mode:
authornicm <nicm>2017-01-09 19:27:00 +0000
committernicm <nicm>2017-01-09 19:27:00 +0000
commit5330a2a85d69647f4f402c5b1fe85dc548ce5416 (patch)
treeb2a99f64ded421b63817fa79c8608fde9916af27 /cmd-source-file.c
parentc05002b0f2d86d7706efdc9636ee660642bdcecb (diff)
Run the source-file pattern through glob(3).
Diffstat (limited to 'cmd-source-file.c')
-rw-r--r--cmd-source-file.c28
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