head 1.4; access; symbols pkgsrc-2026Q1:1.4.0.22 pkgsrc-2026Q1-base:1.4 pkgsrc-2025Q4:1.4.0.20 pkgsrc-2025Q4-base:1.4 pkgsrc-2025Q3:1.4.0.18 pkgsrc-2025Q3-base:1.4 pkgsrc-2025Q2:1.4.0.16 pkgsrc-2025Q2-base:1.4 pkgsrc-2025Q1:1.4.0.14 pkgsrc-2025Q1-base:1.4 pkgsrc-2024Q4:1.4.0.12 pkgsrc-2024Q4-base:1.4 pkgsrc-2024Q3:1.4.0.10 pkgsrc-2024Q3-base:1.4 pkgsrc-2024Q2:1.4.0.8 pkgsrc-2024Q2-base:1.4 pkgsrc-2024Q1:1.4.0.6 pkgsrc-2024Q1-base:1.4 pkgsrc-2023Q4:1.4.0.4 pkgsrc-2023Q4-base:1.4 pkgsrc-2023Q3:1.4.0.2 pkgsrc-2023Q3-base:1.4 pkgsrc-2023Q2:1.3.0.170 pkgsrc-2023Q2-base:1.3 pkgsrc-2023Q1:1.3.0.168 pkgsrc-2023Q1-base:1.3 pkgsrc-2022Q4:1.3.0.166 pkgsrc-2022Q4-base:1.3 pkgsrc-2022Q3:1.3.0.164 pkgsrc-2022Q3-base:1.3 pkgsrc-2022Q2:1.3.0.162 pkgsrc-2022Q2-base:1.3 pkgsrc-2022Q1:1.3.0.160 pkgsrc-2022Q1-base:1.3 pkgsrc-2021Q4:1.3.0.158 pkgsrc-2021Q4-base:1.3 pkgsrc-2021Q3:1.3.0.156 pkgsrc-2021Q3-base:1.3 pkgsrc-2021Q2:1.3.0.154 pkgsrc-2021Q2-base:1.3 pkgsrc-2021Q1:1.3.0.152 pkgsrc-2021Q1-base:1.3 pkgsrc-2020Q4:1.3.0.150 pkgsrc-2020Q4-base:1.3 pkgsrc-2020Q3:1.3.0.148 pkgsrc-2020Q3-base:1.3 pkgsrc-2020Q2:1.3.0.144 pkgsrc-2020Q2-base:1.3 pkgsrc-2020Q1:1.3.0.124 pkgsrc-2020Q1-base:1.3 pkgsrc-2019Q4:1.3.0.146 pkgsrc-2019Q4-base:1.3 pkgsrc-2019Q3:1.3.0.142 pkgsrc-2019Q3-base:1.3 pkgsrc-2019Q2:1.3.0.140 pkgsrc-2019Q2-base:1.3 pkgsrc-2019Q1:1.3.0.138 pkgsrc-2019Q1-base:1.3 pkgsrc-2018Q4:1.3.0.136 pkgsrc-2018Q4-base:1.3 pkgsrc-2018Q3:1.3.0.134 pkgsrc-2018Q3-base:1.3 pkgsrc-2018Q2:1.3.0.132 pkgsrc-2018Q2-base:1.3 pkgsrc-2018Q1:1.3.0.130 pkgsrc-2018Q1-base:1.3 pkgsrc-2017Q4:1.3.0.128 pkgsrc-2017Q4-base:1.3 pkgsrc-2017Q3:1.3.0.126 pkgsrc-2017Q3-base:1.3 pkgsrc-2017Q2:1.3.0.122 pkgsrc-2017Q2-base:1.3 pkgsrc-2017Q1:1.3.0.120 pkgsrc-2017Q1-base:1.3 pkgsrc-2016Q4:1.3.0.118 pkgsrc-2016Q4-base:1.3 pkgsrc-2016Q3:1.3.0.116 pkgsrc-2016Q3-base:1.3 pkgsrc-2016Q2:1.3.0.114 pkgsrc-2016Q2-base:1.3 pkgsrc-2016Q1:1.3.0.112 pkgsrc-2016Q1-base:1.3 pkgsrc-2015Q4:1.3.0.110 pkgsrc-2015Q4-base:1.3 pkgsrc-2015Q3:1.3.0.108 pkgsrc-2015Q3-base:1.3 pkgsrc-2015Q2:1.3.0.106 pkgsrc-2015Q2-base:1.3 pkgsrc-2015Q1:1.3.0.104 pkgsrc-2015Q1-base:1.3 pkgsrc-2014Q4:1.3.0.102 pkgsrc-2014Q4-base:1.3 pkgsrc-2014Q3:1.3.0.100 pkgsrc-2014Q3-base:1.3 pkgsrc-2014Q2:1.3.0.98 pkgsrc-2014Q2-base:1.3 pkgsrc-2014Q1:1.3.0.96 pkgsrc-2014Q1-base:1.3 pkgsrc-2013Q4:1.3.0.94 pkgsrc-2013Q4-base:1.3 pkgsrc-2013Q3:1.3.0.92 pkgsrc-2013Q3-base:1.3 pkgsrc-2013Q2:1.3.0.90 pkgsrc-2013Q2-base:1.3 pkgsrc-2013Q1:1.3.0.88 pkgsrc-2013Q1-base:1.3 pkgsrc-2012Q4:1.3.0.86 pkgsrc-2012Q4-base:1.3 pkgsrc-2012Q3:1.3.0.84 pkgsrc-2012Q3-base:1.3 pkgsrc-2012Q2:1.3.0.82 pkgsrc-2012Q2-base:1.3 pkgsrc-2012Q1:1.3.0.80 pkgsrc-2012Q1-base:1.3 pkgsrc-2011Q4:1.3.0.78 pkgsrc-2011Q4-base:1.3 pkgsrc-2011Q3:1.3.0.76 pkgsrc-2011Q3-base:1.3 pkgsrc-2011Q2:1.3.0.74 pkgsrc-2011Q2-base:1.3 pkgsrc-2011Q1:1.3.0.72 pkgsrc-2011Q1-base:1.3 pkgsrc-2010Q4:1.3.0.70 pkgsrc-2010Q4-base:1.3 pkgsrc-2010Q3:1.3.0.68 pkgsrc-2010Q3-base:1.3 pkgsrc-2010Q2:1.3.0.66 pkgsrc-2010Q2-base:1.3 pkgsrc-2010Q1:1.3.0.64 pkgsrc-2010Q1-base:1.3 pkgsrc-2009Q4:1.3.0.62 pkgsrc-2009Q4-base:1.3 pkgsrc-2009Q3:1.3.0.60 pkgsrc-2009Q3-base:1.3 pkgsrc-2009Q2:1.3.0.58 pkgsrc-2009Q2-base:1.3 pkgsrc-2009Q1:1.3.0.56 pkgsrc-2009Q1-base:1.3 pkgsrc-2008Q4:1.3.0.54 pkgsrc-2008Q4-base:1.3 pkgsrc-2008Q3:1.3.0.52 pkgsrc-2008Q3-base:1.3 cube-native-xorg:1.3.0.50 cube-native-xorg-base:1.3 pkgsrc-2008Q2:1.3.0.48 pkgsrc-2008Q2-base:1.3 cwrapper:1.3.0.46 pkgsrc-2008Q1:1.3.0.44 pkgsrc-2008Q1-base:1.3 pkgsrc-2007Q4:1.3.0.42 pkgsrc-2007Q4-base:1.3 pkgsrc-2007Q3:1.3.0.40 pkgsrc-2007Q3-base:1.3 pkgsrc-2007Q2:1.3.0.38 pkgsrc-2007Q2-base:1.3 pkgsrc-2007Q1:1.3.0.36 pkgsrc-2007Q1-base:1.3 pkgsrc-2006Q4:1.3.0.34 pkgsrc-2006Q4-base:1.3 pkgsrc-2006Q3:1.3.0.32 pkgsrc-2006Q3-base:1.3 pkgsrc-2006Q2:1.3.0.30 pkgsrc-2006Q2-base:1.3 pkgsrc-2006Q1:1.3.0.28 pkgsrc-2006Q1-base:1.3 pkgsrc-2005Q4:1.3.0.26 pkgsrc-2005Q4-base:1.3 pkgsrc-2005Q3:1.3.0.24 pkgsrc-2005Q3-base:1.3 pkgsrc-2005Q2:1.3.0.22 pkgsrc-2005Q2-base:1.3 pkgsrc-2005Q1:1.3.0.20 pkgsrc-2005Q1-base:1.3 pkgsrc-2004Q4:1.3.0.18 pkgsrc-2004Q4-base:1.3 pkgsrc-2004Q3:1.3.0.16 pkgsrc-2004Q3-base:1.3 pkgsrc-2004Q2:1.3.0.14 pkgsrc-2004Q2-base:1.3 pkgsrc-2004Q1:1.3.0.12 pkgsrc-2004Q1-base:1.3 pkgsrc-2003Q4:1.3.0.10 pkgsrc-2003Q4-base:1.3 netbsd-1-6-1:1.3.0.6 netbsd-1-6-1-base:1.3 netbsd-1-6:1.3.0.8 netbsd-1-6-RELEASE-base:1.3 pkgviews:1.3.0.4 pkgviews-base:1.3 buildlink2:1.3.0.2 buildlink2-base:1.3 netbsd-1-5-PATCH003:1.3 netbsd-1-5-PATCH001:1.3 netbsd-1-5-RELEASE:1.3 netbsd-1-4-PATCH003:1.3 netbsd-1-4-PATCH002:1.1 comdex-fall-1999:1.1 netbsd-1-4-PATCH001:1.1 netbsd-1-4-RELEASE:1.1; locks; strict; comment @# @; 1.4 date 2023.09.06.18.34.24; author bouyer; state Exp; branches; next 1.3; commitid kBWMTgASqOMMWJDE; 1.3 date 2000.08.02.17.33.45; author thorpej; state Exp; branches; next 1.2; 1.2 date 2000.08.02.05.02.15; author thorpej; state Exp; branches; next 1.1; 1.1 date 99.04.09.08.33.51; author agc; state Exp; branches; next ; desc @@ 1.4 log @Fix a bug that showed up on netbsd-10: serv_input: read@@3 need 468 got 396 read(2) isn't garanteed to be atomic on unix sockets. Loop on poll()/read() until we read the expected len or get an error. @ text @$NetBSD: patch-ac,v 1.3 2000/08/02 17:33:45 thorpej Exp $ Make this compile on Solaris. Fix a bug where rtty would loop forever if its parent process (such as a shell) were to die and close rtty's standard input. Fix a bug where rtty would exit with messages like serv_input: read@@3 need 468 got 396 when a read on the unix socket returns a partial read. --- rtty.c.orig 2023-09-06 18:23:56.430905709 +0200 +++ rtty.c 2023-09-06 18:24:21.275470294 +0200 @@@@ -34,6 +34,11 @@@@ #include #include #include +#include + +#if (defined(__sun__) && defined(__svr4__)) +#include +#endif #include "rtty.h" #ifdef NEED_BITYPES_H @@@@ -266,13 +271,16 @@@@ static void tty_input(fd) { static enum {base, need_cr, tilde} state = base; + ssize_t cnt; + int readone = 0; u_char buf[1]; #if 0 fcntl(Tty, F_SETFL, fcntl(Tty, F_GETFL, 0)|O_NONBLOCK); #endif - while (1 == read(fd, buf, 1)) { + while (1 == (cnt = read(fd, buf, 1))) { u_char ch = buf[0]; + readone = 1; switch (state) { case base: @@@@ -346,6 +354,14 @@@@ write(Log, buf, 1); } } + + if (readone == 0 && cnt == 0) { + /* + * True EOF -- get out now rather than loop forever. + */ + quit(0); + } + #if 0 fcntl(Tty, F_SETFL, fcntl(Tty, F_GETFL, 0)&~O_NONBLOCK); #endif @@@@ -502,6 +518,33 @@@@ } } +static ssize_t +read_exact(int fd, void *buf, size_t nbytes) +{ + struct pollfd pfd; + ssize_t ret = 0, r; + + while (nbytes > 0) { + pfd.fd = fd; + pfd.events = POLLRDNORM; + pfd.revents = 0; + + switch (poll(&pfd, 1, 1000)) { + case -1: + return -1; + case 0: + return ret; + default: + r = read(fd, buf, nbytes); + if (r < 0) + return r; + ret += r; + nbytes -= r; + break; + } + } +} + static void serv_input(fd) { char passwd[TP_MAXVAR], s[3], *c, *crypt(); @@@@ -521,7 +564,7 @@@@ switch (t) { case TP_DATA: /* FALLTHROUGH */ case TP_NOTICE: - if (i != (nchars = read(fd, T.c, i))) { + if (i != (nchars = read_exact(fd, T.c, i))) { fprintf(stderr, "serv_input: read@@%d need %d got %d\n", fd, i, nchars); server_died(); @@@@ -563,7 +606,7 @@@@ break; case TP_PARITY: if (o & TP_QUERY) { - if (i != (nchars = read(fd, T.c, i))) { + if (i != (nchars = read_exact(fd, T.c, i))) { server_died(); } T.c[i] = '\0'; @ 1.3 log @Put some more duct tape on the last. Should fix a problem reported by Manuel Bouyer. @ text @d1 1 a1 1 $NetBSD: patch-ac,v 1.2 2000/08/02 05:02:15 thorpej Exp $ d8 8 a15 3 --- rtty.c.orig Fri Aug 23 15:25:28 1996 +++ rtty.c Wed Aug 2 10:25:30 2000 @@@@ -35,6 +35,10 @@@@ d18 2 a19 1 d23 1 a23 1 + d26 1 a26 2 # include "bitypes.h" @@@@ -266,13 +270,16 @@@@ d44 1 a44 1 @@@@ -346,6 +353,14 @@@@ d59 52 @ 1.2 log @Fix a bug in the rtty client which would cause the rtty process to loop forever (consuming a lot of CPU) if the parent process (e.g. shell) were to suddenly die -- rtty was not properly checking for the EOF condition. Patch from Andrew Flury . @ text @d1 1 a1 1 $NetBSD: patch-ac,v 1.1 1999/04/09 08:33:51 agc Exp $ d9 1 a9 1 +++ rtty.c Tue Aug 1 21:50:19 2000 d21 2 a22 1 @@@@ -267,11 +271,12 @@@@ d25 2 a27 1 + ssize_t cnt; d35 1 d38 2 a39 1 @@@@ -346,6 +351,14 @@@@ d44 1 a44 1 + if (cnt == 0) { d46 1 a46 1 + * EOF -- get out now rather than loop forever. @ 1.1 log @Make this package work on Solaris. @ text @d1 1 a1 1 $NetBSD$ d5 5 a9 2 --- rtty.c 1999/04/09 08:29:25 1.1 +++ rtty.c 1999/04/09 08:30:06 d21 29 @