From bcdd9d706171ea317bdacd0f2aa974264c9a77ff Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 5 Apr 2017 10:49:46 +0000 Subject: Give each client a name. This defaults to the tty name as before but falls back to an alternative if the tty name is not available. This is clearer than overloading the client ttyname member and allows us to remove the path stored in the tty struct, it should always be the same as the client. --- usr.bin/tmux/server-client.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'usr.bin/tmux/server-client.c') diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c index 10f268a05c4..a06035c698a 100644 --- a/usr.bin/tmux/server-client.c +++ b/usr.bin/tmux/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.215 2017/03/09 22:00:46 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.216 2017/04/05 10:49:46 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -99,15 +99,12 @@ server_client_check_nested(struct client *c) struct environ_entry *envent; struct window_pane *wp; - if (c->tty.path == NULL) - return (0); - envent = environ_find(c->environ, "TMUX"); if (envent == NULL || *envent->value == '\0') return (0); RB_FOREACH(wp, window_pane_tree, &all_window_panes) { - if (strcmp(wp->tty, c->tty.path) == 0) + if (strcmp(wp->tty, c->ttyname) == 0) return (1); } return (0); @@ -322,8 +319,10 @@ server_client_free(__unused int fd, __unused short events, void *arg) if (!TAILQ_EMPTY(&c->queue)) fatalx("queue not empty"); - if (c->references == 0) + if (c->references == 0) { + free((void *)c->name); free(c); + } } /* Detach a client. */ @@ -1470,6 +1469,7 @@ server_client_dispatch_identify(struct client *c, struct imsg *imsg) const char *data, *home; size_t datalen; int flags; + char *name; if (c->flags & CLIENT_IDENTIFIED) fatalx("out-of-order identify message"); @@ -1535,6 +1535,13 @@ server_client_dispatch_identify(struct client *c, struct imsg *imsg) return; c->flags |= CLIENT_IDENTIFIED; + if (*c->ttyname != '\0') + name = xstrdup(c->ttyname); + else + xasprintf(&name, "client-%ld", (long)c->pid); + c->name = name; + log_debug("client %p name is %s", c, c->name); + if (c->flags & CLIENT_CONTROL) { c->stdin_callback = control_callback; @@ -1685,7 +1692,7 @@ server_client_add_message(struct client *c, const char *fmt, ...) xvasprintf(&s, fmt, ap); va_end(ap); - log_debug("%s: message %s", c->tty.path, s); + log_debug("message %s (client %p)", s, c); msg = xcalloc(1, sizeof *msg); msg->msg_time = time(NULL); -- cgit v1.2.3-59-g8ed1b