diff --git a/src/shellmatta.c b/src/shellmatta.c index 087c893..c9bdd68 100644 --- a/src/shellmatta.c +++ b/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); diff --git a/src/shellmatta_utils.c b/src/shellmatta_utils.c index 7ee44e7..2b67f1d 100644 --- a/src/shellmatta_utils.c +++ b/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';