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.
This commit is contained in:
Roberto E. Vargas Caballero 2015-12-16 19:39:21 +01:00 committed by sin
parent d1bef890ea
commit a65e180e5e
1 changed files with 17 additions and 9 deletions

26
ed.c
View File

@ -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