[git commit] ash: make interactive ^C break out of PS2 mode

Denys Vlasenko vda.linux at googlemail.com
Mon Nov 16 12:09:37 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=4ac35a30db0c9badd9895c5eaa1d4d3a118b5259
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Based on patch by Joachim Nilsson <troglobit at gmail.com>

function                                             old     new   delta
pgetc                                                570     547     -23

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index 674a41bd3..d1ca3451d 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -10593,7 +10593,7 @@ preadfd(void)
 
 	g_parsefile->next_to_pgetc = buf;
 #if ENABLE_FEATURE_EDITING
- retry:
+ /* retry: */
 	if (!iflag || g_parsefile->pf_fd != STDIN_FILENO)
 		nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
 	else {
@@ -10615,15 +10615,14 @@ preadfd(void)
 		if (nr == 0) {
 			/* ^C pressed, "convert" to SIGINT */
 			write(STDOUT_FILENO, "^C", 2);
+			raise(SIGINT);
 			if (trap[SIGINT]) {
 				buf[0] = '\n';
 				buf[1] = '\0';
-				raise(SIGINT);
 				return 1;
 			}
 			exitstatus = 128 + SIGINT;
-			bb_putchar('\n');
-			goto retry;
+			return -1;
 		}
 		if (nr < 0) {
 			if (errno == 0) {


More information about the busybox-cvs mailing list