[klibc] [klibc:update-dash] dash: builtin: Move echo space/nl handling into print_escape_str
klibc-bot for Herbert Xu
herbert at gondor.apana.org.au
Sat Mar 28 14:49:05 PDT 2020
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;
}
More information about the klibc
mailing list