From a65e180e5e5eca77ca13de082f3e16c0402b18af Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" Date: Wed, 16 Dec 2015 19:39:21 +0100 Subject: [PATCH] Discard input at the end of global commands If there is no any match, then the rest of the line is not read, and it means that ed thins it is a new command. --- ed.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/ed.c b/ed.c index bde2c55..9a80eb9 100644 --- a/ed.c +++ b/ed.c @@ -65,28 +65,35 @@ static struct undo udata; static int newcmd; + +static void +discard(void) +{ + int c; + + /* discard until end of line */ + if (repidx < 0 && + ((cmdsiz > 0 && cmdline[cmdsiz-1] != '\n') || cmdsiz == 0)) { + while ((c = getchar()) != '\n' && c != EOF) + /* nothing */; + } +} + static void undo(void); static void error(char *msg) { - int c; - exstatus = 1; lasterr = msg; fputs("?\n", stderr); if (optverbose) fprintf(stderr, "%s\n", msg); - - /* discard until end of line */ - if (repidx < 0 && cmdsiz > 0 && cmdline[cmdsiz-1] != '\n') { - while ((c = getchar()) != '\n' && c != EOF) - /* nothing */; - } - if (!newcmd) undo(); + + discard(); curln = ocurln; longjmp(savesp, 1); } @@ -1293,6 +1300,7 @@ doglobal(void) } docmd(); } + discard(); /* cover the case of not matchingc anything */ } static void