tools: kwboot: Fix detection of quit esc sequence
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@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
		
							parent
							
								
									f99a169c19
								
							
						
					
					
						commit
						de7514046e
					
				|  | @ -1183,10 +1183,10 @@ kwboot_xmodem(int tty, const void *_img, size_t size, int baudrate) | ||||||
| static int | static int | ||||||
| kwboot_term_pipe(int in, int out, const char *quit, int *s) | kwboot_term_pipe(int in, int out, const char *quit, int *s) | ||||||
| { | { | ||||||
|  | 	char buf[128]; | ||||||
| 	ssize_t nin; | 	ssize_t nin; | ||||||
| 	char _buf[128], *buf = _buf; |  | ||||||
| 
 | 
 | ||||||
| 	nin = read(in, buf, sizeof(_buf)); | 	nin = read(in, buf, sizeof(buf)); | ||||||
| 	if (nin <= 0) | 	if (nin <= 0) | ||||||
| 		return -1; | 		return -1; | ||||||
| 
 | 
 | ||||||
|  | @ -1194,18 +1194,21 @@ kwboot_term_pipe(int in, int out, const char *quit, int *s) | ||||||
| 		int i; | 		int i; | ||||||
| 
 | 
 | ||||||
| 		for (i = 0; i < nin; i++) { | 		for (i = 0; i < nin; i++) { | ||||||
| 			if (*buf == quit[*s]) { | 			if (buf[i] == quit[*s]) { | ||||||
| 				(*s)++; | 				(*s)++; | ||||||
| 				if (!quit[*s]) | 				if (!quit[*s]) { | ||||||
| 					return 0; | 					nin = i - *s; | ||||||
| 				buf++; | 					break; | ||||||
| 				nin--; | 				} | ||||||
| 			} else { | 			} else { | ||||||
| 				if (kwboot_write(out, quit, *s) < 0) | 				if (*s > i && kwboot_write(out, quit, *s - i) < 0) | ||||||
| 					return -1; | 					return -1; | ||||||
| 				*s = 0; | 				*s = 0; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		if (i == nin) | ||||||
|  | 			nin -= *s; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (kwboot_write(out, buf, nin) < 0) | 	if (kwboot_write(out, buf, nin) < 0) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue