From: Sören Tempel <soeren+...@soeren-tempel.net>

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 <soeren+...@soeren-tempel.net>
---
 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
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to