diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-09-28 19:04:21 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2007-09-28 19:04:21 +0000 |
commit | 599046168820193686960a1a89411bb4f878daf5 (patch) | |
tree | f9b6787932bf885f0290fd1821cacf584a8e387f | |
parent | 109873bdf876ca019ef30376d33d751472feb1a1 (diff) | |
download | rtmux-599046168820193686960a1a89411bb4f878daf5.tar.gz rtmux-599046168820193686960a1a89411bb4f878daf5.tar.bz2 rtmux-599046168820193686960a1a89411bb4f878daf5.zip |
Add client_flush to flush output when transient commands are called.
-rw-r--r-- | client.c | 27 | ||||
-rw-r--r-- | tmux.h | 3 |
2 files changed, 28 insertions, 2 deletions
@@ -1,4 +1,4 @@ -/* $Id: client.c,v 1.7 2007-09-27 20:53:13 nicm Exp $ */ +/* $Id: client.c,v 1.8 2007-09-28 19:04:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -125,6 +125,31 @@ retry: } int +client_flush(struct client_ctx *cctx) +{ + struct pollfd pfd; + + /* XXX error response! */ + while (BUFFER_USED(cctx->srv_out) > 0) { + pfd.fd = cctx->srv_fd; + pfd.events = POLLIN|POLLOUT; + + if (poll(&pfd, 1, INFTIM) == -1) { + if (errno == EAGAIN || errno == EINTR) + continue; + fatal("poll failed"); + } + + if (buffer_poll(&pfd, cctx->srv_in, cctx->srv_out) != 0) { + log_warnx("lost server"); + return (1); + } + } + + return (0); +} + +int client_main(struct client_ctx *cctx) { struct pollfd pfds[2]; @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.18 2007-09-27 10:09:37 nicm Exp $ */ +/* $Id: tmux.h,v 1.19 2007-09-28 19:04:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -455,6 +455,7 @@ int op_list_windows(char *, int, char **); /* client.c */ int client_init(char *, struct client_ctx *, int); +int client_flush(struct client_ctx *); int client_main(struct client_ctx *); void client_write_server(struct client_ctx *, enum hdrtype, void *, size_t); void client_fill_sessid(struct sessid *, char [MAXNAMELEN]); |