From: Sören Tempel <[email protected]>

Apart from the -p option, POSIX also mandates an -s option which
suppresses the output of byte counts for the e, E, r, and w command.
From these commands, Busybox ed presently only implements the r and w
commands. This commit ensures that these two command do not output any
bytes counts when the -s option is passed. The shell escape command,
also effected by the -s option, is not implemented by Busybox at the
moment.
---
Instead of introducing a new global variable, this version of the patch
reuses the existing option_mask32 variable.

 editors/ed.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/editors/ed.c b/editors/ed.c
index dfe0f1a77..36b045733 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 "[-p PROMPT] [FILE]"
+//usage:#define ed_trivial_usage "[-p PROMPT] [-s] [FILE]"
 //usage:#define ed_full_usage ""
 
 #include "libbb.h"
@@ -71,6 +71,11 @@ struct globals {
        SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
 } while (0)
 
+#define OPTION_STR "sp:"
+enum {
+       OPT_s = 0x01,
+};
+
 static int bad_nums(int num1, int num2, const char *for_what)
 {
        if ((num1 < 1) || (num2 > lastNum) || (num1 > num2)) {
@@ -458,7 +463,8 @@ static int readLines(const char *file, int num)
         * in the following format:
         * "%d\n", <number of bytes read>
         */
-       printf("%u\n", charCount);
+       if (!(option_mask32 & OPT_s))
+               printf("%u\n", charCount);
        return TRUE;
 }
 
@@ -510,7 +516,8 @@ static int writeLines(const char *file, int num1, int num2)
         * unless the -s option was specified, in the following format:
         * "%d\n", <number of bytes written>
         */
-       printf("%u\n", charCount);
+       if (!(option_mask32 & OPT_s))
+               printf("%u\n", charCount);
        return TRUE;
 }
 
@@ -1005,7 +1012,7 @@ int ed_main(int argc UNUSED_PARAM, char **argv)
        lines.prev = &lines;
 
        prompt = ""; /* no prompt by default */
-       getopt32(argv, "p:", &prompt);
+       getopt32(argv, OPTION_STR, &prompt);
        argv += optind;
 
        if (argv[0]) {
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to