diff options
author | Tom Rini <trini@konsulko.com> | 2023-04-03 16:45:41 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-04-03 16:45:41 -0400 |
commit | 288fe30a2367b8d0e3f416493150a38ebaa88459 (patch) | |
tree | 1f841eb95d9ceeda4aa3255fb1132a0342f9b19a /common/cli.c | |
parent | fd4ed6b7e83ec3aea9a2ce21baea8ca9676f40dd (diff) | |
parent | 9876c8c147144db2c120fcc9ffa6de27f6894441 (diff) |
Merge branch 'next'
Signed-off-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'common/cli.c')
-rw-r--r-- | common/cli.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/common/cli.c b/common/cli.c index 9451e6a1426..3916a7b10a7 100644 --- a/common/cli.c +++ b/common/cli.c @@ -8,6 +8,8 @@ * JinHua Luo, GuangDong Linux Center, <luo.jinhua@gd-linux.com> */ +#define pr_fmt(fmt) "cli: %s: " fmt, __func__ + #include <common.h> #include <bootstage.h> #include <cli.h> @@ -20,6 +22,7 @@ #include <malloc.h> #include <asm/global_data.h> #include <dm/ofnode.h> +#include <linux/errno.h> #ifdef CONFIG_CMDLINE /* @@ -129,16 +132,26 @@ int run_command_list(const char *cmd, int len, int flag) int run_commandf(const char *fmt, ...) { va_list args; - char cmd[128]; - int i, ret; + int nbytes; va_start(args, fmt); - i = vsnprintf(cmd, sizeof(cmd), fmt, args); + /* + * Limit the console_buffer space being used to CONFIG_SYS_CBSIZE, + * because its last byte is used to fit the replacement of \0 by \n\0 + * in underlying hush parser + */ + nbytes = vsnprintf(console_buffer, CONFIG_SYS_CBSIZE, fmt, args); va_end(args); - ret = run_command(cmd, 0); - - return ret; + if (nbytes < 0) { + pr_debug("I/O internal error occurred.\n"); + return -EIO; + } else if (nbytes >= CONFIG_SYS_CBSIZE) { + pr_debug("'fmt' size:%d exceeds the limit(%d)\n", + nbytes, CONFIG_SYS_CBSIZE); + return -ENOSPC; + } + return run_command(console_buffer, 0); } /****************************************************************************/ |