Am 1. März 2021 00:47:16 MEZ schrieb Sean Anderson <sean...@gmail.com>: >This adds some complexity, since we need to know how big the arguments >are >ahead of time instead of finding out when we print them.
Why do you want to add complexity? Where is the documentation update? Best regards Heinrich > >Signed-off-by: Sean Anderson <sean...@gmail.com> >--- > > cmd/echo.c | 33 ++++++++++++++++++++++++++------- > 1 file changed, 26 insertions(+), 7 deletions(-) > >diff --git a/cmd/echo.c b/cmd/echo.c >index fda844ee9d..8f20e635ce 100644 >--- a/cmd/echo.c >+++ b/cmd/echo.c >@@ -6,11 +6,16 @@ > > #include <common.h> > #include <command.h> >+#include <malloc.h> >+ >+DECLARE_GLOBAL_DATA_PTR; > > static int do_echo(struct cmd_tbl *cmdtp, int flag, int argc, > char *const argv[]) > { >- int i = 1; >+ char *result; >+ int j, i = 1; >+ size_t result_size, arglens[CONFIG_SYS_MAXARGS]; > bool space = false; > bool newline = true; > >@@ -21,18 +26,32 @@ static int do_echo(struct cmd_tbl *cmdtp, int flag, >int argc, > } > } > >+ result_size = 1 + newline; /* \0 + \n */ >+ result_size += argc - i - 1; /* spaces */ >+ for (j = i; j < argc; ++j) { >+ arglens[j] = strlen(argv[j]); >+ result_size += arglens[j]; >+ } >+ >+ result = malloc(result_size); >+ if (!result) >+ return CMD_RET_FAILURE; >+ gd->cmd_result = result; >+ > for (; i < argc; ++i) { >- if (space) { >- putc(' '); >- } >- puts(argv[i]); >+ if (space) >+ *result++ = ' '; >+ >+ memcpy(result, argv[i], arglens[i]); >+ result += arglens[i]; > space = true; > } > > if (newline) >- putc('\n'); >+ *result++ = '\n'; >+ *result = '\0'; > >- return 0; >+ return CMD_RET_SUCCESS; > } > > U_BOOT_CMD(