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:
parent
579894bfd2
commit
bfd8738154
14
editors/ed.c
14
editors/ed.c
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user