[PATCH] tools: kwboot: Fix detection of quit esc sequence

Pali Rohár pali at kernel.org
Thu Feb 3 17:45:20 CET 2022


Quit esc sequence may be also in the middle of the read buffer.
Fix the detection for that case.

Signed-off-by: Pali Rohár <pali at kernel.org>
---
 tools/kwboot.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/tools/kwboot.c b/tools/kwboot.c
index 2684f0e75a56..7737188f0d0a 100644
--- a/tools/kwboot.c
+++ b/tools/kwboot.c
@@ -1183,10 +1183,10 @@ kwboot_xmodem(int tty, const void *_img, size_t size, int baudrate)
 static int
 kwboot_term_pipe(int in, int out, const char *quit, int *s)
 {
+	char buf[128];
 	ssize_t nin;
-	char _buf[128], *buf = _buf;
 
-	nin = read(in, buf, sizeof(_buf));
+	nin = read(in, buf, sizeof(buf));
 	if (nin <= 0)
 		return -1;
 
@@ -1194,18 +1194,21 @@ kwboot_term_pipe(int in, int out, const char *quit, int *s)
 		int i;
 
 		for (i = 0; i < nin; i++) {
-			if (*buf == quit[*s]) {
+			if (buf[i] == quit[*s]) {
 				(*s)++;
-				if (!quit[*s])
-					return 0;
-				buf++;
-				nin--;
+				if (!quit[*s]) {
+					nin = i - *s;
+					break;
+				}
 			} else {
-				if (kwboot_write(out, quit, *s) < 0)
+				if (*s > i && kwboot_write(out, quit, *s - i) < 0)
 					return -1;
 				*s = 0;
 			}
 		}
+
+		if (i == nin)
+			nin -= *s;
 	}
 
 	if (kwboot_write(out, buf, nin) < 0)
-- 
2.20.1



More information about the U-Boot mailing list