klibc-bot for Herbert Xu
2020-Mar-28 21:49 UTC
[klibc] [klibc:update-dash] dash: builtin: Move echo space/nl handling into print_escape_str
Commit-ID: 8f2448fc5da9bdcdbfabb501a8af0912cc2f181d Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=8f2448fc5da9bdcdbfabb501a8af0912cc2f181d Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Sun, 25 Mar 2018 15:55:40 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Sat, 28 Mar 2020 21:42:54 +0000 [klibc] dash: builtin: Move echo space/nl handling into print_escape_str [ dash commit 325a460c7942aa79bb97303e129980db8afd177c ] Currently echocmd uses print_escape_str to do everything apart from printing the spaces/newlines separating its arguments. This patch moves the actual printing into print_escape_str as well using the format parameter. Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/bltin/printf.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/usr/dash/bltin/printf.c b/usr/dash/bltin/printf.c index fe055fd2..5fa0f5db 100644 --- a/usr/dash/bltin/printf.c +++ b/usr/dash/bltin/printf.c @@ -105,6 +105,8 @@ static int print_escape_str(const char *f, int *param, int *array, char *s) len = q - p; total = len - 1; + q[-1] = (!!((f[1] - 's') | done) - 1) & f[2]; + total += !!q[-1]; if (f[1] == 's') goto easy; @@ -461,21 +463,22 @@ check_conversion(const char *s, const char *ep) int echocmd(int argc, char **argv) { + const char *lastfmt = snlfmt; int nonl; - nonl = *++argv ? equal(*argv, "-n") : 0; - argv += nonl; + if (*++argv && equal(*argv, "-n")) { + argv++; + lastfmt = "%s"; + } do { - int c; + const char *fmt = "%s "; + char *s = *argv; - if (likely(*argv)) - nonl += print_escape_str("%s", NULL, NULL, *argv++); - if (likely((nonl + !*argv) > 1)) - break; + if (!s || !*++argv) + fmt = lastfmt; - c = *argv ? ' ' : '\n'; - out1c(c); - } while (*argv); + nonl = print_escape_str(fmt, NULL, NULL, s ?: nullstr); + } while (!nonl && *argv); return 0; }
Possibly Parallel Threads
- [klibc:update-dash] builtin: Move echo space/nl handling into print_escape_str
- [klibc:update-dash] [BUILTIN] Simplify echo command
- [klibc:update-dash] dash: [BUILTIN] Simplify echo command
- [klibc:update-dash] builtin: Fix echo -n early termination
- [klibc:update-dash] dash: builtin: Fix echo -n early termination