From: Denys Vlasenko Date: Mon, 21 Jan 2019 12:49:28 +0000 (+0100) Subject: sed: code shrink X-Git-Tag: 1_31_0~196 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=4906faafab9760bd2d3ed1c6eb11def9efdc438c;p=oweals%2Fbusybox.git sed: code shrink function old new delta parse_file_cmd 115 94 -21 Signed-off-by: Denys Vlasenko --- 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)