diff options
-rw-r--r-- | usr.bin/tmux/cfg.c | 20 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.c | 30 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.h | 4 |
3 files changed, 29 insertions, 25 deletions
diff --git a/usr.bin/tmux/cfg.c b/usr.bin/tmux/cfg.c index e4d8b721b45..7ed177fcfee 100644 --- a/usr.bin/tmux/cfg.c +++ b/usr.bin/tmux/cfg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cfg.c,v 1.40 2015/09/01 10:01:56 nicm Exp $ */ +/* $OpenBSD: cfg.c,v 1.41 2015/09/01 10:10:59 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> @@ -28,6 +28,7 @@ #include "tmux.h" +char *cfg_file; struct cmd_q *cfg_cmd_q; int cfg_finished; int cfg_references; @@ -38,9 +39,17 @@ struct client *cfg_client; void cfg_default_done(struct cmd_q *); void +set_cfg_file(const char *path) +{ + free(cfg_file); + cfg_file = xstrdup(path); +} + +void start_cfg(void) { - char *cause = NULL; + char *cause = NULL; + const char *home; cfg_cmd_q = cmdq_new(NULL); cfg_cmd_q->emptyfn = cfg_default_done; @@ -58,6 +67,13 @@ start_cfg(void) } else if (errno != ENOENT) cfg_add_cause("%s: %s", TMUX_CONF, strerror(errno)); + if (cfg_file == NULL && (home = find_home()) != NULL) { + xasprintf(&cfg_file, "%s/.tmux.conf", home); + if (access(cfg_file, R_OK) != 0 && errno == ENOENT) { + free(cfg_file); + cfg_file = NULL; + } + } if (cfg_file != NULL && load_cfg(cfg_file, cfg_cmd_q, &cause) == -1) cfg_add_cause("%s: %s", cfg_file, cause); free(cause); diff --git a/usr.bin/tmux/tmux.c b/usr.bin/tmux/tmux.c index 560039c4c25..93a1aa06a0c 100644 --- a/usr.bin/tmux/tmux.c +++ b/usr.bin/tmux/tmux.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.c,v 1.141 2015/08/30 22:56:36 nicm Exp $ */ +/* $OpenBSD: tmux.c,v 1.142 2015/09/01 10:10:59 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -41,7 +41,6 @@ struct options global_s_options; /* session options */ struct options global_w_options; /* window options */ struct environ global_environ; -char *cfg_file; char *shell_cmd; int debug_level; time_t start_time; @@ -171,8 +170,11 @@ setblocking(int fd, int state) const char * find_home(void) { - struct passwd *pw; - const char *home; + struct passwd *pw; + static const char *home; + + if (home != NULL) + return (home); home = getenv("HOME"); if (home == NULL || *home == '\0') { @@ -189,9 +191,8 @@ find_home(void) int main(int argc, char **argv) { - char *s, *path, *label, **var, tmp[PATH_MAX]; - const char *home; - int opt, flags, keys; + char *s, *path, *label, **var, tmp[PATH_MAX]; + int opt, flags, keys; #ifdef DEBUG malloc_options = (char *) "AFGJPX"; @@ -221,8 +222,7 @@ main(int argc, char **argv) flags |= CLIENT_CONTROL; break; case 'f': - free(cfg_file); - cfg_file = xstrdup(optarg); + set_cfg_file(optarg); break; case 'l': flags |= CLIENT_LOGIN; @@ -306,18 +306,6 @@ main(int argc, char **argv) options_set_number(&global_w_options, "mode-keys", keys); } - /* Locate the configuration file. */ - if (cfg_file == NULL) { - home = find_home(); - if (home != NULL) { - xasprintf(&cfg_file, "%s/.tmux.conf", home); - if (access(cfg_file, R_OK) != 0 && errno == ENOENT) { - free(cfg_file); - cfg_file = NULL; - } - } - } - /* * Figure out the socket path. If specified on the command-line with -S * or -L, use it, otherwise try $TMUX or assume -L default. diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h index 7a2bba02fa0..222d060207d 100644 --- a/usr.bin/tmux/tmux.h +++ b/usr.bin/tmux/tmux.h @@ -1,4 +1,4 @@ -/* $OpenBSD: tmux.h,v 1.550 2015/09/01 10:01:56 nicm Exp $ */ +/* $OpenBSD: tmux.h,v 1.551 2015/09/01 10:10:59 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1407,7 +1407,6 @@ extern struct options global_options; extern struct options global_s_options; extern struct options global_w_options; extern struct environ global_environ; -extern char *cfg_file; extern char *shell_cmd; extern int debug_level; extern time_t start_time; @@ -1425,6 +1424,7 @@ extern int cfg_references; extern struct client *cfg_client; void start_cfg(void); int load_cfg(const char *, struct cmd_q *, char **); +void set_cfg_file(const char *); void cfg_add_cause(const char *, ...); void cfg_print_causes(struct cmd_q *); void cfg_show_causes(struct session *); |