From f9fa0e553613e914e4e60d34291923396e40fb59 Mon Sep 17 00:00:00 2001 From: pancake Date: Mon, 24 Nov 2014 03:10:29 +0100 Subject: [PATCH] Fix ^C issue with nullcmd repeat issue (reported by @jfrankowski) --- libr/cons/dietline.c | 2 ++ libr/core/cmd.c | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libr/cons/dietline.c b/libr/cons/dietline.c index fa890b44e5..1fd8967e5f 100644 --- a/libr/cons/dietline.c +++ b/libr/cons/dietline.c @@ -397,6 +397,7 @@ R_API char *r_line_readline_cb(RLineReadCallback cb, void *user) { printf ("\x1b[0K\r%s%s", I.prompt, I.buffer.data); fflush (stdout); } + r_cons_singleton()->breaked = R_FALSE; for (;;) { #if 0 if (I.echo) { @@ -486,6 +487,7 @@ R_API char *r_line_readline_cb(RLineReadCallback cb, void *user) { eprintf ("^C\n"); I.buffer.index = I.buffer.length = 0; *I.buffer.data = '\0'; + r_cons_singleton()->breaked = R_TRUE; goto _end; case 4: // ^D if (!I.buffer.data[0]) { /* eof */ diff --git a/libr/core/cmd.c b/libr/core/cmd.c index 6b33757b73..1d4cd00444 100644 --- a/libr/core/cmd.c +++ b/libr/core/cmd.c @@ -50,8 +50,12 @@ static void cmd_debug_reg(RCore *core, const char *str); static int r_core_cmd_nullcallback(void *data) { RCore *core = (RCore*) data; + if (core->cons->breaked) { + core->cons->breaked = R_FALSE; + return 0; + } if (!core->cmdrepeat) return 0; - r_core_cmd_repeat (core, 1); + r_core_cmd_repeat (core, R_TRUE); return 1; }