[git commit] vi: code shrink

Denys Vlasenko vda.linux at googlemail.com
Fri Feb 6 22:22:49 UTC 2026


commit: https://git.busybox.net/busybox/commit/?id=5de72223957a8bdbda4e7f6cde2273d9331b8b74
branch: https://git.busybox.net/busybox/log/?h=master

function                                             old     new   delta
colon                                               4005    3989     -16

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 editors/vi.c | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/editors/vi.c b/editors/vi.c
index 814a63a7b..13f79ed10 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -2849,16 +2849,16 @@ static void colon(char *buf)
 	}
 	not_implemented(p);
 #else
-	char c, *q, *r;
-	char *fn, cmd[MAX_INPUT_LEN], *args;
-	char *exp = NULL;
-	char *useforce;
+	char cmd[MAX_INPUT_LEN], *args;
 	int cmdlen;
+	char *useforce;
+	char *q, *r;
 	int b, e;
 // check how many addresses we got
 # define GOT_ADDRESS (got & 1)
 # define GOT_RANGE   ((got & 3) == 3)
 	unsigned got;
+	char *exp = NULL; // may hold expand_args() result: if VI_COLON_EXPAND, needs freeing!
 
 	// :3154	// if (-e line 3154) goto it  else stay put
 	// :4,33w! foo	// write a portion of buffer to file "foo"
@@ -2880,8 +2880,6 @@ static void colon(char *buf)
 	if (!*buf || *buf == '"')
 		goto ret;		// ignore empty lines or those starting with '"'
 
-	fn = current_filename;
-
 	// look for optional address(es)  ":." ":1" ":1,9" ":'q,'a" ":%"
 	b = e = -1;
 	got = 0;
@@ -2901,11 +2899,9 @@ static void colon(char *buf)
 
 	// assume the command will want a range, certain commands
 	// (read, substitute) need to adjust these assumptions
-	if (!GOT_ADDRESS) {
-		q = text;			// no addr, use 1,$ for the range
-		r = end - 1;
-	} else {
-		// at least one addr was given, get its details
+	q = text;          // if no addr, use 1,$ for the range
+	r = end - 1;
+	if (GOT_ADDRESS) { // at least one addr was given, get its details
 		int lines;
 		if (e < 0
 		 || e > (lines = count_lines(text, end - 1))
@@ -2971,16 +2967,18 @@ static void colon(char *buf)
 		dot_skip_over_ws();
 	} else if (strncmp(cmd, "edit", cmdlen) == 0) {	// Edit a file
 		int size;
+		char *fn;
 
 		// don't edit, if the current file has been modified
 		if (modified_count && !useforce) {
 			status_line_bold("No write since last change (:%s! overrides)", cmd);
 			goto ret;
 		}
+		fn = current_filename;
 		if (args[0]) {
 			// the user supplied a file name
-			fn = exp = expand_args(args);
-			if (exp == NULL)
+			fn = expand_args(args);
+			if (fn == NULL)
 				goto ret;
 		} else if (current_filename == NULL) {
 			// no user file name, no current name- punt
@@ -3041,6 +3039,7 @@ static void colon(char *buf)
 		go_bottom_and_clear_to_eol();
 		puts("\r");
 		for (; q <= r; q++) {
+			char c;
 			int c_is_no_print;
 
 			c = *q;
@@ -3102,11 +3101,12 @@ static void colon(char *buf)
 		editing = 0;
 	} else if (strncmp(cmd, "read", cmdlen) == 0) {	// read file into text[]
 		int size, num;
+		char *fn = current_filename;
 
 		if (args[0]) {
 			// the user supplied a file name
-			fn = exp = expand_args(args);
-			if (exp == NULL)
+			fn = expand_args(args);
+			if (fn == NULL)
 				goto ret;
 			init_filename(fn);
 		} else if (current_filename == NULL) {
@@ -3195,6 +3195,7 @@ static void colon(char *buf)
 
 # if ENABLE_FEATURE_VI_SEARCH
 	} else if (cmd[0] == 's') {	// substitute a pattern with a replacement pattern
+		char c;
 		char *F, *R, *flags;
 		size_t len_F, len_R;
 		int i;
@@ -3341,6 +3342,7 @@ static void colon(char *buf)
 	) {
 		int size, l;
 		//int forced = FALSE;
+		char *fn = current_filename;
 
 		// is there a file name to write to?
 		if (args[0]) {


More information about the busybox-cvs mailing list