tools: kwboot: properly quit when read() returns 0
authorWilly Tarreau <w@1wt.eu>
Tue, 3 Jul 2018 16:10:31 +0000 (12:10 -0400)
committerStefan Roese <sr@denx.de>
Tue, 7 Aug 2018 08:53:52 +0000 (10:53 +0200)
When kwboot is attached to a terminal which disappears such as one
connected via an unplugged USB cable, read() returns 0, making kwboot
loop until a key is pressed in the terminal. The only case where read()
may return 0 here is when the terminal is closed anyway, so let's
properly handle this one and report is similar to other errors.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Stefan Roese <sr@denx.de>
tools/kwboot.c

index 0a770602885661cc07e5eff4c12dce957d9c27af..50ae2b4b77b1e3702b92f884979bc7808893e479 100644 (file)
@@ -182,7 +182,7 @@ kwboot_tty_recv(int fd, void *buf, size_t len, int timeo)
                }
 
                n = read(fd, buf, len);
-               if (n < 0)
+               if (n <= 0)
                        goto out;
 
                buf = (char *)buf + n;
@@ -466,7 +466,7 @@ kwboot_term_pipe(int in, int out, char *quit, int *s)
        char _buf[128], *buf = _buf;
 
        nin = read(in, buf, sizeof(buf));
-       if (nin < 0)
+       if (nin <= 0)
                return -1;
 
        if (quit) {