]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cli.c
env in ram
[z180-stamp.git] / avr / cli.c
index 44cf5b8260b6aaca8283ae30d0f7d7fb8988d09d..be5df40deb6c2d393d59ef7799eb53b862f42940 100644 (file)
--- a/avr/cli.c
+++ b/avr/cli.c
@@ -181,11 +181,11 @@ static int cli_run_command(const char *cmd, int flag)
        if (!cmd || !*cmd)
                return -1;      /* empty command */
 
-
-       cmdbuf = xmalloc(strlen(cmd) + 1);
+       cmdbuf = strdup(cmd);
        finaltoken = xmalloc(CONFIG_SYS_CBSIZE);
+       if (!finaltoken)
+               return -1;      /* not enough memory */
 
-       strcpy(cmdbuf, cmd);
        str = cmdbuf;
 
        /* Process separators and check for invalid
@@ -232,7 +232,7 @@ static int cli_run_command(const char *cmd, int flag)
                        continue;
                }
 
-               if (cmd_process(flag, argc, argv, &repeatable))
+               if (cmd_process(flag, argc, argv, &repeatable) != CMD_RET_SUCCESS)
                        rc = -1;
 
                /* Did the user stop this? */
@@ -296,15 +296,10 @@ int run_command_list(const char *cmd, int len)
 
 /****************************************************************************/
 
-#define DYN_BUFFER 1
 
 void cli_loop(void)
 {
-#if DYN_BUFFER
        char *lastcommand = NULL;
-#else
-       static char lastcommand[CONFIG_SYS_CBSIZE];
-#endif
        int len;
        int flag;
        int rc = 1;
@@ -314,15 +309,8 @@ void cli_loop(void)
 
                flag = 0;       /* assume no special flags for now */
                if (len > 0) {
-#if DYN_BUFFER
-                       lastcommand = (char *) xrealloc(lastcommand, len+1);
-                       if (lastcommand != NULL) {
-                               strncpy(lastcommand, console_buffer, len+1);
-                               lastcommand[len] = '\0';
-                       }
-#else
-                       strcpy(lastcommand, console_buffer);
-#endif
+                       free (lastcommand);
+                       lastcommand = strdup(console_buffer);
                } else if (len == 0)
                        flag |= CMD_FLAG_REPEAT;
 
@@ -333,18 +321,14 @@ void cli_loop(void)
 
                if (rc <= 0) {
                        /* invalid command or not repeatable, forget it */
-#if DYN_BUFFER
                        free(lastcommand);
                        lastcommand = NULL;
-#else
-                       lastcommand[0] = 0;
-#endif
                }
        }
 }
 
 
-int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        int i;
        (void) cmdtp;
@@ -358,12 +342,12 @@ int do_run(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                arg = getenv(argv[i]);
                if (arg == NULL) {
                        printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[i]);
-                       return 1;
+                       return CMD_RET_FAILURE;
                }
 
                if (run_command(arg, flag) != 0)
-                       return 1;
+                       return CMD_RET_FAILURE;
        }
-       return 0;
+       return CMD_RET_SUCCESS;
 }