From bfd8738154747d16f66ccfde3036dc21d39c7cec Mon Sep 17 00:00:00 2001 From: Sören Tempel Date: Sun, 21 Nov 2021 12:24:45 +0100 Subject: 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 Signed-off-by: Denys Vlasenko --- editors/ed.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/editors/ed.c b/editors/ed.c index 14540e5..18faba5 100644 --- a/editors/ed.c +++ b/editors/ed.c @@ -18,7 +18,7 @@ //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 "" #include "libbb.h" @@ -48,6 +48,7 @@ struct globals { char *bufBase; char *bufPtr; char *fileName; + const char *prompt; LINE lines; smallint dirty; int marks[26]; @@ -57,6 +58,7 @@ struct globals { #define bufBase (G.bufBase ) #define bufPtr (G.bufPtr ) #define fileName (G.fileName ) +#define prompt (G.prompt ) #define curNum (G.curNum ) #define lastNum (G.lastNum ) #define bufUsed (G.bufUsed ) @@ -793,7 +795,7 @@ static void doCommands(void) * 0 on ctrl-C, * >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) return; while (len && isspace(buf[--len])) @@ -1005,8 +1007,12 @@ int ed_main(int argc UNUSED_PARAM, char **argv) lines.next = &lines; lines.prev = &lines; - if (argv[1]) { - fileName = xstrdup(argv[1]); + prompt = ""; /* no prompt by default */ + getopt32(argv, "p:", &prompt); + argv += optind; + + if (argv[0]) { + fileName = xstrdup(argv[0]); if (!readLines(fileName, 1)) { return EXIT_SUCCESS; } -- cgit v1.1