[git commit] sed: code shrink

Denys Vlasenko vda.linux at googlemail.com
Mon Jan 21 12:49:28 UTC 2019


commit: https://git.busybox.net/busybox/commit/?id=4906faafab9760bd2d3ed1c6eb11def9efdc438c
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
parse_file_cmd                                       115      94     -21

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

diff --git a/editors/sed.c b/editors/sed.c
index cddb0c732..bb39de149 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -371,25 +371,25 @@ static int get_address(const char *my_str, int *linenum, regex_t ** regex)
 /* Grab a filename.  Whitespace at start is skipped, then goes to EOL. */
 static int parse_file_cmd(/*sed_cmd_t *sed_cmd,*/ const char *filecmdstr, char **retval)
 {
-	int start = 0, idx, hack = 0;
+	const char *start;
+	const char *eol;
 
 	/* Skip whitespace, then grab filename to end of line */
-	while (isspace(filecmdstr[start]))
-		start++;
-	idx = start;
-	while (filecmdstr[idx] && filecmdstr[idx] != '\n')
-		idx++;
-
-	/* If lines glued together, put backslash back. */
-	if (filecmdstr[idx] == '\n')
-		hack = 1;
-	if (idx == start)
+	start = skip_whitespace(filecmdstr);
+	eol = strchrnul(start, '\n');
+	if (eol == start)
 		bb_error_msg_and_die("empty filename");
-	*retval = xstrndup(filecmdstr+start, idx-start+hack+1);
-	if (hack)
-		(*retval)[idx-start] = '\\';
 
-	return idx;
+	if (*eol) {
+		/* If lines glued together, put backslash back. */
+		*retval = xstrndup(start, eol-start + 1);
+		(*retval)[eol-start] = '\\';
+	} else {
+		/* eol is NUL */
+		*retval = xstrdup(start);
+	}
+
+	return eol - filecmdstr;
 }
 
 static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)


More information about the busybox-cvs mailing list