Merge branch 'master' of git://git.denx.de/u-boot
[oweals/u-boot.git] / common / cli_simple.c
index 353ceeb7349ac144521a3838f5d66cbc2d479299..358e9b7fe11f28ccc473744bbc6fac932757f8bf 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2000
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -5,13 +6,14 @@
  * Add to readline cmdline-editing by
  * (C) Copyright 2005
  * JinHua Luo, GuangDong Linux Center, <luo.jinhua@gd-linux.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <bootretry.h>
 #include <cli.h>
+#include <command.h>
+#include <console.h>
+#include <env.h>
 #include <linux/ctype.h>
 
 #define DEBUG_PARSER   0       /* set to 1 to debug */
@@ -57,7 +59,7 @@ int cli_simple_parse_line(char *line, char *argv[])
        return nargs;
 }
 
-static void process_macros(const char *input, char *output)
+void cli_simple_process_macros(const char *input, char *output)
 {
        char c, prev;
        const char *varname_start = NULL;
@@ -68,7 +70,7 @@ static void process_macros(const char *input, char *output)
        /* 1 = waiting for '(' or '{' */
        /* 2 = waiting for ')' or '}' */
        /* 3 = waiting for '''  */
-       char *output_start = output;
+       char __maybe_unused *output_start = output;
 
        debug_parser("[PROCESS_MACROS] INPUT len %zd: \"%s\"\n", strlen(input),
                     input);
@@ -130,7 +132,7 @@ static void process_macros(const char *input, char *output)
                                envname[i] = 0;
 
                                /* Get its value */
-                               envval = getenv(envname);
+                               envval = env_get(envname);
 
                                /* Copy into the line if it exists */
                                if (envval != NULL)
@@ -167,7 +169,7 @@ static void process_macros(const char *input, char *output)
  * WARNING:
  *
  * We must create a temporary copy of the command since the command we get
- * may be the result from getenv(), which returns a pointer directly to
+ * may be the result from env_get(), which returns a pointer directly to
  * the environment data, which may change magicly when the command we run
  * creates or modifies environment variables (like "bootp" does).
  */
@@ -236,7 +238,7 @@ int cli_simple_run_command(const char *cmd, int flag)
                debug_parser("token: \"%s\"\n", token);
 
                /* find macros in this token and replace them */
-               process_macros(token, finaltoken);
+               cli_simple_process_macros(token, finaltoken);
 
                /* Extract arguments */
                argc = cli_simple_parse_line(finaltoken, argv);
@@ -258,7 +260,7 @@ int cli_simple_run_command(const char *cmd, int flag)
 
 void cli_simple_loop(void)
 {
-       static char lastcommand[CONFIG_SYS_CBSIZE] = { 0, };
+       static char lastcommand[CONFIG_SYS_CBSIZE + 1] = { 0, };
 
        int len;
        int flag;
@@ -275,7 +277,8 @@ void cli_simple_loop(void)
 
                flag = 0;       /* assume no special flags for now */
                if (len > 0)
-                       strcpy(lastcommand, console_buffer);
+                       strlcpy(lastcommand, console_buffer,
+                               CONFIG_SYS_CBSIZE + 1);
                else if (len == 0)
                        flag |= CMD_FLAG_REPEAT;
 #ifdef CONFIG_BOOT_RETRY_TIME