mirror of git://git.suckless.org/sbase
Ensure commands are followed by a blank
POSIX.1-2017 demands in Shell & Utilities under 'Commands in ed': The e, E, f, r, and w commands shall take an optional file parameter, separated from the command letter by one or more <blank> characters. Ensure at least one <blank> character (as defined for the POSIX locale) is present or error out. Signed-off-by: Rene Kita <mail@rkta.de>
This commit is contained in:
parent
67a00c86f9
commit
95b9603975
22
ed.c
22
ed.c
|
@ -474,6 +474,24 @@ skipblank(void)
|
||||||
back(c);
|
back(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ensureblank(void)
|
||||||
|
{
|
||||||
|
char c;
|
||||||
|
|
||||||
|
switch ((c = input())) {
|
||||||
|
case ' ':
|
||||||
|
case '\t':
|
||||||
|
skipblank();
|
||||||
|
case '\n':
|
||||||
|
back(c);
|
||||||
|
case EOF:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
error("unknown command");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
getnum(void)
|
getnum(void)
|
||||||
{
|
{
|
||||||
|
@ -1145,10 +1163,12 @@ repeat:
|
||||||
case 'w':
|
case 'w':
|
||||||
trunc = 1;
|
trunc = 1;
|
||||||
case 'W':
|
case 'W':
|
||||||
|
ensureblank();
|
||||||
deflines(nextln(0), lastln);
|
deflines(nextln(0), lastln);
|
||||||
dowrite(getfname(cmd), trunc);
|
dowrite(getfname(cmd), trunc);
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
|
ensureblank();
|
||||||
if (nlines > 1)
|
if (nlines > 1)
|
||||||
goto bad_address;
|
goto bad_address;
|
||||||
deflines(lastln, lastln);
|
deflines(lastln, lastln);
|
||||||
|
@ -1260,6 +1280,7 @@ repeat:
|
||||||
quit();
|
quit();
|
||||||
break;
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
|
ensureblank();
|
||||||
if (nlines > 0)
|
if (nlines > 0)
|
||||||
goto unexpected;
|
goto unexpected;
|
||||||
if (back(input()) != '\n')
|
if (back(input()) != '\n')
|
||||||
|
@ -1271,6 +1292,7 @@ repeat:
|
||||||
case 'E':
|
case 'E':
|
||||||
modflag = 0;
|
modflag = 0;
|
||||||
case 'e':
|
case 'e':
|
||||||
|
ensureblank();
|
||||||
if (nlines > 0)
|
if (nlines > 0)
|
||||||
goto unexpected;
|
goto unexpected;
|
||||||
if (modflag)
|
if (modflag)
|
||||||
|
|
Loading…
Reference in New Issue