git.y1.nz

mtm

Ncurses-based terminal multiplexer
download: https://git.y1.nz/archives/mtm.tar.gz
Files | Log | Refs

commit 45cbf5efa741edd26a56fbf2daead4b62ff6dbbf
parent 9f903b14505bbd4a5af81f39eaa06dd4ce6b586b
Author: Rob King <jking@deadpixi.com>
Date:   Sun, 19 Feb 2017 14:35:20 -0600

Make view writes nonblocking.

We don't want a broken program that doesn't read its input
to deadlock the whole shebang.

Diffstat:
Mmtm.c16+++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/mtm.c b/mtm.c @@ -15,6 +15,7 @@ */ #include <errno.h> +#include <fcntl.h> #include <locale.h> #include <pty.h> #include <pwd.h> @@ -33,12 +34,6 @@ #define TOPAIR(fg, bg) (monochrome? 0 : (((fg) * 8) | (bg))) #define USAGE "usage: mtm [-m] [-e MILLISECONDS] [-c KEY]" -#ifdef __GNUC__ -#define UNUSED __attribute__((__unused__)) -#else -#define UNUSED -#endif - typedef enum{ HORIZONTAL, VERTICAL, @@ -145,7 +140,7 @@ fixcursor(void) } void -callback(tmt_msg_t m, struct TMT *v UNUSED, const void *r UNUSED, void *p) +callback(tmt_msg_t m, struct TMT *v, const void *r, void *p) { switch (m){ case TMT_MSG_UPDATE: drawview((NODE *)p, false); break; @@ -180,6 +175,7 @@ newview(NODE *p, int y, int x, int h, int w) } FD_SET(n->pt, &fds); + fcntl(n->pt, F_SETFL, O_NONBLOCK); nfds = n->pt > nfds? n->pt : nfds; return n; } @@ -379,8 +375,10 @@ getinput(NODE *n, fd_set *f) ssize_t r = read(n->pt, iobuf, BUFSIZ); if (r > 0) tmt_writemb(n->vt, iobuf, r); - else if (r < 0) - return errno == EINTR? true : (deletenode(n), false); + else if (r < 0){ + if (errno != EINTR && errno != EWOULDBLOCK) + return deletenode(n), false; + } } return true; }

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.