tttyread: test for EOF while reading tty - st - [fork] customized build of st, … | |
git clone git://src.adamsgaard.dk/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 | |
tttyread: 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 | |
t@@ -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 |