Run the source-file pattern through glob(3).

pull/714/head
nicm 2017-01-09 19:27:00 +00:00
parent c05002b0f2
commit 5330a2a85d
4 changed files with 28 additions and 17 deletions

10
cfg.c
View File

@ -28,11 +28,11 @@
#include "tmux.h"
char *cfg_file;
int cfg_finished;
static char **cfg_causes;
static u_int cfg_ncauses;
struct client *cfg_client;
char *cfg_file;
int cfg_finished;
static char **cfg_causes;
static u_int cfg_ncauses;
struct client *cfg_client;
static enum cmd_retval
cfg_done(__unused struct cmdq_item *item, __unused void *data)

View File

@ -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

5
tmux.1
View File

@ -921,7 +921,10 @@ show debugging information about jobs and terminals.
.Xc
.D1 (alias: Ic source )
Execute commands from
.Ar path .
.Ar path
(which may be a
.Xr glob 3
pattern).
If
.Fl q
is given, no error will be returned if

2
tmux.h
View File

@ -76,7 +76,7 @@ struct tmuxproc;
#define READ_CHANGE_HITS 3
/* Attribute to make gcc check printf-like arguments. */
/* Attribute to make GCC check printf-like arguments. */
#define printflike(a, b) __attribute__ ((format (printf, a, b)))
/* Number of items in array. */