From: Sören Tempel <[email protected]>
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.
Support for the remaining -s option will be added in a separate commit
since it requires a general restructuring of error handling in Busybox
ed.
Signed-off-by: Sören Tempel <[email protected]>
---
editors/ed.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/editors/ed.c b/editors/ed.c
index 0d96d263c..a54a0b0a6 100644
--- a/editors/ed.c
+++ b/editors/ed.c
@@ -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 )
@@ -790,7 +792,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]))
@@ -994,6 +996,8 @@ static void doCommands(void)
int ed_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ed_main(int argc UNUSED_PARAM, char **argv)
{
+ int opt;
+
INIT_G();
bufSize = INITBUF_SIZE;
@@ -1002,8 +1006,15 @@ int ed_main(int argc UNUSED_PARAM, char **argv)
lines.next = &lines;
lines.prev = &lines;
- if (argv[1]) {
- fileName = xstrdup(argv[1]);
+ opt = getopt32(argv, "p:", &prompt);
+ if (!(opt & 0x01))
+ prompt = ""; /* no prompt by default */
+
+ argc -= optind;
+ argv += optind;
+
+ if (argc >= 1) {
+ fileName = xstrdup(argv[0]);
if (!readLines(fileName, 1)) {
return EXIT_SUCCESS;
}
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox