ed: add support for -p command-line option as mandated by POSIX

The POSIX.1-2008 specification of ed(1) mandates two command-line
options: -p (for specifying a prompt string) and -s (to suppress writing
of byte counts). This commit adds support for the former. Furthermore,
it also changes the default prompt string to an empty string (instead
of ": ") since this is also mandated by POSIX:

	-p string Use string as the prompt string when in command mode.
	          By default, there shall be no prompt string.

function                                             old     new   delta
ed_main                                              112     144     +32
packed_usage                                       34074   34097     +23
doCommands                                          1889    1887      -2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 55/-2)              Total: 53 bytes

Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Sören Tempel 2021-11-21 12:24:45 +01:00 committed by Denys Vlasenko
parent 579894bfd2
commit bfd8738154

View File

@ -18,7 +18,7 @@
//applet:IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP)) //applet:IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
//usage:#define ed_trivial_usage "[FILE]" //usage:#define ed_trivial_usage "[-p PROMPT] [FILE]"
//usage:#define ed_full_usage "" //usage:#define ed_full_usage ""
#include "libbb.h" #include "libbb.h"
@ -48,6 +48,7 @@ struct globals {
char *bufBase; char *bufBase;
char *bufPtr; char *bufPtr;
char *fileName; char *fileName;
const char *prompt;
LINE lines; LINE lines;
smallint dirty; smallint dirty;
int marks[26]; int marks[26];
@ -57,6 +58,7 @@ struct globals {
#define bufBase (G.bufBase ) #define bufBase (G.bufBase )
#define bufPtr (G.bufPtr ) #define bufPtr (G.bufPtr )
#define fileName (G.fileName ) #define fileName (G.fileName )
#define prompt (G.prompt )
#define curNum (G.curNum ) #define curNum (G.curNum )
#define lastNum (G.lastNum ) #define lastNum (G.lastNum )
#define bufUsed (G.bufUsed ) #define bufUsed (G.bufUsed )
@ -793,7 +795,7 @@ static void doCommands(void)
* 0 on ctrl-C, * 0 on ctrl-C,
* >0 length of input string, including terminating '\n' * >0 length of input string, including terminating '\n'
*/ */
len = read_line_input(NULL, ": ", buf, sizeof(buf)); len = read_line_input(NULL, prompt, buf, sizeof(buf));
if (len <= 0) if (len <= 0)
return; return;
while (len && isspace(buf[--len])) while (len && isspace(buf[--len]))
@ -1005,8 +1007,12 @@ int ed_main(int argc UNUSED_PARAM, char **argv)
lines.next = &lines; lines.next = &lines;
lines.prev = &lines; lines.prev = &lines;
if (argv[1]) { prompt = ""; /* no prompt by default */
fileName = xstrdup(argv[1]); getopt32(argv, "p:", &prompt);
argv += optind;
if (argv[0]) {
fileName = xstrdup(argv[0]);
if (!readLines(fileName, 1)) { if (!readLines(fileName, 1)) {
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }