From 4a13ca98e18cea4acc8d605653d0ee8425e34f59 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Thu, 28 Jan 2016 22:10:06 -0600 Subject: Add SIGWINCH support to top, and implement -o and -n in pgrep/pkill. --- lib/interestingtimes.c | 15 ++++++++++----- lib/net.c | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/interestingtimes.c b/lib/interestingtimes.c index 93e2ec52..c4ea2c27 100644 --- a/lib/interestingtimes.c +++ b/lib/interestingtimes.c @@ -67,10 +67,14 @@ int scan_key_getsize(char *scratch, int miliwait, unsigned *xx, unsigned *yy) { int key; - while (512&(key = scan_key(scratch, miliwait))) { - if (key<0) break; - if (xx) *xx = (key>>10)&1023; - if (yy) *yy = (key>>20)&1023; + if (512&(key = scan_key(scratch, miliwait))) { + if (key>0) { + if (xx) *xx = (key>>10)&1023; + if (yy) *yy = (key>>20)&1023; + toys.signal = SIGWINCH; + + return -3; + } } return key; @@ -195,7 +199,8 @@ int scan_key(char *scratch, int miliwait) // Read 1 byte so we don't overshoot sequence match. (We can deviate // and fail to match, but match consumes entire buffer.) - if (1 != read(0, scratch+1+*scratch, 1)) return -1; + if (toys.signal || 1 != read(0, scratch+1+*scratch, 1)) + return toys.signal ? -3 : -1; ++*scratch; } diff --git a/lib/net.c b/lib/net.c index facb0968..2e72b268 100644 --- a/lib/net.c +++ b/lib/net.c @@ -49,6 +49,7 @@ int xpoll(struct pollfd *fds, int nfds, int timeout) for (;;) { if (0>(i = poll(fds, nfds, timeout))) { + if (toys.signal) return i; if (errno != EINTR && errno != ENOMEM) perror_exit("xpoll"); else if (timeout>0) timeout--; } else return i; -- cgit v1.2.3