Introduction
Introduction Statistics Contact Development Disclaimer Help
ttyread: test for EOF while reading tty - st - simple terminal
git clone git://git.suckless.org/st
Log
Files
Refs
README
LICENSE
---
commit e52319cc7d153e4f59b38c4fb4c0556e118d4775
parent 21e0d6e8b8d20903494386e7e6f43201b3761154
Author: Roberto E. Vargas Caballero <[email protected]>
Date: Fri, 10 Apr 2020 22:25:46 +0200
ttyread: test for EOF while reading tty
When a read operation returns 0 then it means that we arrived to the end of the
file, and new reads will return 0 unless you do some other operation such as
lseek(). This case happens with USB-232 adapters when they are unplugged.
Diffstat:
M st.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
---
diff --git a/st.c b/st.c
@@ -823,17 +823,24 @@ ttyread(void)
int ret;
/* append read bytes to unprocessed bytes */
- if ((ret = read(cmdfd, buf+buflen, LEN(buf)-buflen)) < 0)
- die("couldn't read from shell: %s\n", strerror(errno));
- buflen += ret;
+ ret = read(cmdfd, buf+buflen, LEN(buf)-buflen);
- written = twrite(buf, buflen, 0);
- buflen -= written;
- /* keep any uncomplete utf8 char for the next call */
- if (buflen > 0)
- memmove(buf, buf + written, buflen);
+ switch (ret) {
+ case 0:
+ fputs("Found EOF in input\n", stderr);
+ exit(0);
+ case -1:
+ die("couldn't read from shell: %s\n", strerror(errno));
+ default:
+ buflen += ret;
+ written = twrite(buf, buflen, 0);
+ buflen -= written;
+ /* keep any uncomplete utf8 char for the next call */
+ if (buflen > 0)
+ memmove(buf, buf + written, buflen);
+ return ret;
- return ret;
+ }
}
void
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.