ソースを参照

Merge branch 'develop' into feature/add_tests_#5

prozessorkern 5 年 前
コミット
fc8a34dd1c
2 ファイル変更18 行追加6 行削除
  1. 17 5
      src/shellmatta.c
  2. 1 1
      src/shellmatta_utils.c

+ 17 - 5
src/shellmatta.c

@@ -193,6 +193,7 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t     handle,
 {
     shellmatta_cmd_t        *cmd;
     uint8_t                 cmdExecuted = 0u;
+    uint32_t                cmdLen;
     shellmatta_retCode_t    ret = SHELLMATTA_OK;
     shellmatta_instance_t   *inst = (shellmatta_instance_t*)handle;
 
@@ -225,16 +226,27 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t     handle,
                 history_storeCmd(inst);
                 history_reset(inst);
 
+                /** -# determine the cmd len (chars until first space or \0 is found */
+                cmdLen = 0u;
+                while(      (cmdLen <   inst->inputCount)
+                        &&  (' '    !=  inst->buffer[cmdLen])
+                        &&  ('\0'   !=  inst->buffer[cmdLen]))
+                {
+                    cmdLen ++;
+                }
+
                 /** -# search for a matching command */
                 while (NULL != cmd)
                 {
-                    /* only compare the length of the command -1 (to avoid comparing the \0 */
-                    if (    (0 == strncmp(  inst->buffer,
+                    /** -# compare command string and length */
+                    if (    ((0 == strncmp( inst->buffer,
                                             cmd->cmd,
-                                            strlen(cmd->cmd)))
-                        ||  (0 == strncmp(  inst->buffer,
+                                            cmdLen))
+                            && (cmdLen == strlen(cmd->cmd)))
+                        ||  ((0 == strncmp( inst->buffer,
                                             cmd->cmdAlias,
-                                            strlen(cmd->cmdAlias))))
+                                            cmdLen))
+                            && (cmdLen == strlen(cmd->cmdAlias))))
                     {
                         inst->write("\r\n", 2u);
 

+ 1 - 1
src/shellmatta_utils.c

@@ -145,7 +145,7 @@ void utils_forwardCursor(shellmatta_instance_t *inst, uint32_t length)
     char   terminalCmd[16];
     size_t size;
 
-    length = SHELLMATTA_MAX (length, (inst->inputCount - inst->cursor));
+    length = SHELLMATTA_MIN (length, (inst->inputCount - inst->cursor));
     if (length > 0u)
     {
         terminalCmd[0]  = '\e';