summaryrefslogtreecommitdiffstats
path: root/client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-11-27 19:23:34 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-11-27 19:23:34 +0000
commit76c8a590db14131928f79123adcab934a3825501 (patch)
tree359cbfac219a68d5137bd3ec02b31ecb33cbd288 /client.c
parent97eca99d0bae6c4fdfc38a6f42d42f05c8faac4b (diff)
Big internal reorganisation to move tty control into parent.
Diffstat (limited to 'client.c')
-rw-r--r--client.c61
1 files changed, 8 insertions, 53 deletions
diff --git a/client.c b/client.c
index 1bf97966..b21d49fd 100644
--- a/client.c
+++ b/client.c
@@ -1,4 +1,4 @@
-/* $Id: client.c,v 1.22 2007-11-26 20:36:30 nicm Exp $ */
+/* $Id: client.c,v 1.23 2007-11-27 19:23:33 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -33,7 +33,6 @@
#include "tmux.h"
void client_handle_winch(struct client_ctx *);
-int client_process_local(struct client_ctx *, char **);
int
client_init(const char *path, struct client_ctx *cctx, int start_server)
@@ -113,6 +112,7 @@ retry:
if (ttyname_r(STDIN_FILENO, data.tty, sizeof data.tty) != 0)
fatal("ttyname_r failed");
client_write_server(cctx, MSG_IDENTIFY, &data, sizeof data);
+ cmd_send_string(cctx->srv_out, getenv("TERM"));
}
return (0);
@@ -121,13 +121,11 @@ retry:
int
client_main(struct client_ctx *cctx)
{
- struct pollfd pfds[2];
+ struct pollfd pfd;
char *error;
int timeout;
siginit();
- if ((cctx->loc_fd = local_init(&cctx->loc_in, &cctx->loc_out)) == -1)
- return (1);
logfile("client");
#ifndef NO_SETPROCTITLE
@@ -140,34 +138,20 @@ client_main(struct client_ctx *cctx)
if (sigwinch)
client_handle_winch(cctx);
- pfds[0].fd = cctx->srv_fd;
- pfds[0].events = POLLIN;
+ pfd.fd = cctx->srv_fd;
+ pfd.events = POLLIN;
if (BUFFER_USED(cctx->srv_out) > 0)
- pfds[0].events |= POLLOUT;
- pfds[1].fd = cctx->loc_fd;
- pfds[1].events = POLLIN;
- if (BUFFER_USED(cctx->loc_out) > 0)
- pfds[1].events |= POLLOUT;
+ pfd.events |= POLLOUT;
- if (poll(pfds, 2, timeout) == -1) {
+ if (poll(&pfd, 1, timeout) == -1) {
if (errno == EAGAIN || errno == EINTR)
continue;
fatal("poll failed");
}
- if (buffer_poll(&pfds[0], cctx->srv_in, cctx->srv_out) != 0)
+ if (buffer_poll(&pfd, cctx->srv_in, cctx->srv_out) != 0)
goto server_dead;
- if (buffer_poll(&pfds[1], cctx->loc_in, cctx->loc_out) != 0)
- goto local_dead;
- if (cctx->flags & CCTX_PAUSE) {
- usleep(750000);
- cctx->flags = 0;
- }
-
- if (client_process_local(cctx, &error) == -1)
- goto out;
-
switch (client_msg_dispatch(cctx, &error)) {
case -1:
goto out;
@@ -183,8 +167,6 @@ client_main(struct client_ctx *cctx)
}
out:
- local_done();
-
if (sigterm) {
printf("[terminated]\n");
return (1);
@@ -204,14 +186,8 @@ out:
return (1);
server_dead:
- local_done();
-
printf("[lost server]\n");
return (0);
-
-local_dead:
- /* Can't do much here. Log and die. */
- fatalx("local socket dead");
}
void
@@ -229,24 +205,3 @@ client_handle_winch(struct client_ctx *cctx)
sigwinch = 0;
}
-
-int
-client_process_local(struct client_ctx *cctx, unused char **error)
-{
- struct buffer *b;
- int key;
-
- b = buffer_create(BUFSIZ);
- while ((key = local_key()) != KEYC_NONE)
- input_store16(b, (uint16_t) key);
-
- log_debug("transmitting %zu bytes of input", BUFFER_USED(b));
- if (BUFFER_USED(b) != 0) {
- client_write_server(
- cctx, MSG_KEYS, BUFFER_OUT(b), BUFFER_USED(b));
- }
-
- buffer_destroy(b);
- return (0);
-}
-