Merge branch 'obsd-master'

pull/2395/head
Thomas Adam 2020-09-22 08:01:18 +01:00
commit a34ceb1074
4 changed files with 26 additions and 9 deletions

View File

@ -59,7 +59,8 @@ static struct client_files client_files = RB_INITIALIZER(&client_files);
static __dead void client_exec(const char *,const char *);
static int client_get_lock(char *);
static int client_connect(struct event_base *, const char *, int);
static int client_connect(struct event_base *, const char *,
uint64_t);
static void client_send_identify(const char *, const char *, int);
static void client_signal(int);
static void client_dispatch(struct imsg *, void *);
@ -100,7 +101,7 @@ client_get_lock(char *lockfile)
/* Connect client to server. */
static int
client_connect(struct event_base *base, const char *path, int flags)
client_connect(struct event_base *base, const char *path, uint64_t flags)
{
struct sockaddr_un sa;
size_t size;
@ -238,7 +239,8 @@ client_exit(void)
/* Client main loop. */
int
client_main(struct event_base *base, int argc, char **argv, int flags, int feat)
client_main(struct event_base *base, int argc, char **argv, uint64_t flags,
int feat)
{
struct cmd_parse_result *pr;
struct msg_command *data;
@ -284,7 +286,7 @@ client_main(struct event_base *base, int argc, char **argv, int flags, int feat)
/* Save the flags. */
client_flags = flags;
log_debug("flags are %#llx", client_flags);
log_debug("flags are %#llx", (unsigned long long)client_flags);
/* Initialize the client socket and start the server. */
fd = client_connect(base, socket_path, client_flags);
@ -442,6 +444,8 @@ client_send_identify(const char *ttynam, const char *cwd, int feat)
pid_t pid;
proc_send(client_peer, MSG_IDENTIFY_FLAGS, -1, &flags, sizeof flags);
proc_send(client_peer, MSG_IDENTIFY_LONGFLAGS, -1, &client_flags,
sizeof client_flags);
if ((s = getenv("TERM")) == NULL)
s = "";
@ -891,7 +895,8 @@ client_dispatch_wait(struct imsg *imsg)
fatalx("bad MSG_FLAGS string");
memcpy(&client_flags, data, sizeof client_flags);
log_debug("new flags are %#llx", client_flags);
log_debug("new flags are %#llx",
(unsigned long long)client_flags);
break;
case MSG_SHELL:
if (datalen == 0 || data[datalen - 1] != '\0')
@ -944,7 +949,8 @@ client_dispatch_attached(struct imsg *imsg)
fatalx("bad MSG_FLAGS string");
memcpy(&client_flags, data, sizeof client_flags);
log_debug("new flags are %#llx", client_flags);
log_debug("new flags are %#llx",
(unsigned long long)client_flags);
break;
case MSG_DETACH:
case MSG_DETACHKILL:

View File

@ -1983,6 +1983,7 @@ server_client_dispatch(struct imsg *imsg, void *arg)
switch (imsg->hdr.type) {
case MSG_IDENTIFY_FEATURES:
case MSG_IDENTIFY_FLAGS:
case MSG_IDENTIFY_LONGFLAGS:
case MSG_IDENTIFY_TERM:
case MSG_IDENTIFY_TTYNAME:
case MSG_IDENTIFY_CWD:
@ -2141,6 +2142,7 @@ server_client_dispatch_identify(struct client *c, struct imsg *imsg)
const char *data, *home;
size_t datalen;
int flags, feat;
uint64_t longflags;
char *name;
if (c->flags & CLIENT_IDENTIFIED)
@ -2165,6 +2167,14 @@ server_client_dispatch_identify(struct client *c, struct imsg *imsg)
c->flags |= flags;
log_debug("client %p IDENTIFY_FLAGS %#x", c, flags);
break;
case MSG_IDENTIFY_LONGFLAGS:
if (datalen != sizeof longflags)
fatalx("bad MSG_IDENTIFY_LONGFLAGS size");
memcpy(&longflags, data, sizeof longflags);
c->flags |= longflags;
log_debug("client %p IDENTIFY_LONGFLAGS %#llx", c,
(unsigned long long)longflags);
break;
case MSG_IDENTIFY_TERM:
if (datalen == 0 || data[datalen - 1] != '\0')
fatalx("bad MSG_IDENTIFY_TERM string");

4
tmux.c
View File

@ -322,8 +322,8 @@ main(int argc, char **argv)
char *path = NULL, *label = NULL;
char *cause, **var;
const char *s, *shell, *cwd;
int opt, flags = 0, keys;
int feat = 0;
int opt, keys, feat = 0;
uint64_t flags = 0;
const struct options_table_entry *oe;
if (setlocale(LC_CTYPE, "en_US.UTF-8") == NULL &&

3
tmux.h
View File

@ -498,6 +498,7 @@ enum msgtype {
MSG_IDENTIFY_CWD,
MSG_IDENTIFY_FEATURES,
MSG_IDENTIFY_STDOUT,
MSG_IDENTIFY_LONGFLAGS,
MSG_COMMAND = 200,
MSG_DETACH,
@ -2333,7 +2334,7 @@ void printflike(2, 3) cmdq_error(struct cmdq_item *, const char *, ...);
void cmd_wait_for_flush(void);
/* client.c */
int client_main(struct event_base *, int, char **, int, int);
int client_main(struct event_base *, int, char **, uint64_t, int);
/* key-bindings.c */
struct key_table *key_bindings_get_table(const char *, int);