From c04accdb558b3d850c09ae1be3ad7f71b41db7c7 Mon Sep 17 00:00:00 2001 From: prozessorkern Date: Sun, 1 Mar 2020 17:53:27 +0100 Subject: [PATCH] close #30 added overwritable help command parameter and fixed some compiler issues (some of them only appeared when compiling with optimization) --- example/main.c | 22 ++++++++++++-- makefile | 4 +-- src/shellmatta.c | 4 +-- src/shellmatta_utils.c | 7 ++++- src/shellmatta_utils.h | 30 ++++++++++++++++++- .../test_utils_clearInput.cpp | 2 ++ .../shellmatta_utils/test_utils_eraseLine.cpp | 2 +- .../test_utils_restoreCursorPos.cpp | 2 +- .../test_utils_saveCursorPos.cpp | 4 +-- .../test_utils_terminateInput.cpp | 2 +- 10 files changed, 65 insertions(+), 14 deletions(-) diff --git a/example/main.c b/example/main.c index ee75d29..1ec4f35 100644 --- a/example/main.c +++ b/example/main.c @@ -52,6 +52,9 @@ static shellmatta_retCode_t doSome(shellmatta_handle_t handle, const char *argum shellmatta_write(handle, "blubb\r\n", 7u); + (void)arguments; + (void)length; + return SHELLMATTA_OK; } shellmatta_cmd_t doSomeCmd = {"adoSome2", "adof2", "Function does something", "use me, please", doSome, NULL}; @@ -62,6 +65,9 @@ static shellmatta_retCode_t removeCmdFct(shellmatta_handle_t handle, const char shellmatta_removeCmd(handle, &doSomeCmd); + (void)arguments; + (void)length; + return SHELLMATTA_OK; } shellmatta_cmd_t removeCommand = {"remove", "r", "Function removes a command", "", removeCmdFct, NULL}; @@ -71,6 +77,10 @@ static shellmatta_retCode_t quit(shellmatta_handle_t handle, const char *argumen { exitRequest = true; + (void)handle; + (void)arguments; + (void)length; + return SHELLMATTA_OK; } shellmatta_cmd_t quitCommand = {"quit", "q", "Function quits the shell", "", quit, NULL}; @@ -83,17 +93,23 @@ shellmatta_retCode_t writeFct(const char* data, uint32_t length) return SHELLMATTA_OK; } -int main(void) +int main(int argc, char **argv) { static char buffer[1024]; static char historyBuffer[4096]; static shellmatta_instance_t instance; - f = open("/dev/pts/3", O_RDWR | O_SYNC); + if(2 != argc) + { + printf("%s \n", argv[0u]); + return -1; + } + + f = open(argv[1u], O_RDWR | O_SYNC); if (f < 0) { - printf("failure %d\n", errno); + printf("failure opening device %s %d\n", argv[1u], errno); return f; } diff --git a/makefile b/makefile index 60371c7..9e9626e 100644 --- a/makefile +++ b/makefile @@ -43,8 +43,8 @@ UNITTEST_CPPOBJ := $(patsubst %.cpp,$(OBJ_DIR)%.o,$(UNITTEST_SOURCES)) INTEGRATIONTEST_CPPOBJ := $(patsubst %.cpp,$(OBJ_DIR)%.o,$(INTEGRATIONTEST_SOURCES)) -CFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror -pedantic -TESTFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror -fprofile-arcs -ftest-coverage -pedantic +CFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -pedantic -DSHELLMATTA_HELP_ALIAS=\"?\" +TESTFLAGS := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -fprofile-arcs -ftest-coverage -pedantic TESTLFLAGS := -fprofile-arcs -Wl,--allow-multiple-definition DEPEND = -MT $@ -MF "$(@:%.o=%.d)" -MG -MM diff --git a/src/shellmatta.c b/src/shellmatta.c index 90da1d6..6cf615f 100644 --- a/src/shellmatta.c +++ b/src/shellmatta.c @@ -260,8 +260,8 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t handle, uint8_t cmdExecuted = 0u; uint32_t cmdLen; char *tempString; - char *argumentString; - uint32_t argumentLength; + char *argumentString = NULL; + uint32_t argumentLength = 0u; uint32_t byteCounter; uint32_t idx; diff --git a/src/shellmatta_utils.c b/src/shellmatta_utils.c index 9dc68d0..d350e06 100644 --- a/src/shellmatta_utils.c +++ b/src/shellmatta_utils.c @@ -327,7 +327,12 @@ static shellmatta_retCode_t helpCmdFct(shellmatta_handle_t handle, const char *a return ret; } -shellmatta_cmd_t helpCmd = {(char*)"help", (char*)"h", (char*)"Print this help text", (char*)"help", helpCmdFct, NULL}; +shellmatta_cmd_t helpCmd = { SHELLMATTA_HELP_COMMAND + , SHELLMATTA_HELP_ALIAS + , SHELLMATTA_HELP_HELP_TEXT + , SHELLMATTA_HELP_USAGE_TEXT + , helpCmdFct + , NULL}; /** * @brief terminates an input and prints the prompt again diff --git a/src/shellmatta_utils.h b/src/shellmatta_utils.h index 9c3a5e4..8478f19 100644 --- a/src/shellmatta_utils.h +++ b/src/shellmatta_utils.h @@ -22,7 +22,7 @@ #include "shellmatta.h" #include - +/* some helper macros */ #define SHELLMATTA_MIN(a,b) (((a) > (b)) ? (b) : (a)) #define SHELLMATTA_MAX(a,b) (((a) < (b)) ? (b) : (a)) #define SHELLMATTA_PRINT_BUFFER(buffer,cnt,fct) \ @@ -40,10 +40,38 @@ extern shellmatta_cmd_t helpCmd; #define SHELLMATTA_MAGIC 0x5101E110u +/*! \brief overwritable output buffer size */ #ifndef SHELLMATTA_OUTPUT_BUFFER_SIZE #define SHELLMATTA_OUTPUT_BUFFER_SIZE 128u #endif +/*! @defgroup Shellmatta Help command overwrites + * @{ + * overwritable help command parameters - the help command is built in and cannot be removed, but you can change + * the command, alias and help texts by defining them in your build process + * To change the settings set one of these defines: + * #SHELLMATTA_HELP_COMMAND to overwrite the help command + * #SHELLMATTA_HELP_ALIAS to overwrite the help alias + * #SHELLMATTA_HELP_HELP_TEXT to overwrite the help text + * #SHELLMATTA_HELP_USAGE_TEXT to overwrite the usage text + * e.g. use _-DSHELLMATTA_HELP_ALIAS=\"?\"_ as compile option to change the alias to ? + */ +#ifndef SHELLMATTA_HELP_COMMAND +#define SHELLMATTA_HELP_COMMAND (char*)"help" /*!< help command */ +#endif +#ifndef SHELLMATTA_HELP_ALIAS +#define SHELLMATTA_HELP_ALIAS (char*)"h" /*!< help command alias */ +#endif +#ifndef SHELLMATTA_HELP_HELP_TEXT +#define SHELLMATTA_HELP_HELP_TEXT (char*)"Print this help text" /*!< help command help text */ +#endif +#ifndef SHELLMATTA_HELP_USAGE_TEXT +#define SHELLMATTA_HELP_USAGE_TEXT (char*)"help" /*!< help command usage text */ +#endif +/*! + * @} + */ + void utils_writeEcho( shellmatta_instance_t *inst, const char *data, uint32_t length); diff --git a/test/unittest/shellmatta_utils/test_utils_clearInput.cpp b/test/unittest/shellmatta_utils/test_utils_clearInput.cpp index 0c730cc..e89e3df 100644 --- a/test/unittest/shellmatta_utils/test_utils_clearInput.cpp +++ b/test/unittest/shellmatta_utils/test_utils_clearInput.cpp @@ -4,6 +4,8 @@ static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { + (void)data; + (void)length; return SHELLMATTA_OK; } diff --git a/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp b/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp index 305a876..44ef550 100644 --- a/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp +++ b/test/unittest/shellmatta_utils/test_utils_eraseLine.cpp @@ -9,7 +9,7 @@ static uint32_t write_length; static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { write_callCnt ++; - strncpy(write_data, data, length); + memcpy(write_data, data, length); write_length = length; return SHELLMATTA_OK; } diff --git a/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp b/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp index 7ebb0eb..ebaab0e 100644 --- a/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp +++ b/test/unittest/shellmatta_utils/test_utils_restoreCursorPos.cpp @@ -9,7 +9,7 @@ static uint32_t write_length; static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { write_callCnt ++; - strncpy(write_data, data, length); + memcpy(write_data, data, length); write_length = length; return SHELLMATTA_OK; } diff --git a/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp b/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp index 8bc1c0e..0365883 100644 --- a/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp +++ b/test/unittest/shellmatta_utils/test_utils_saveCursorPos.cpp @@ -3,13 +3,13 @@ #include static uint32_t write_callCnt = 0u; -static char write_data[10]; +static char write_data[10u]; static uint32_t write_length; static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { write_callCnt ++; - strncpy(write_data, data, length); + memcpy(write_data, data, length); write_length = length; return SHELLMATTA_OK; } diff --git a/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp b/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp index 04211cc..bea41e2 100644 --- a/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp +++ b/test/unittest/shellmatta_utils/test_utils_terminateInput.cpp @@ -9,7 +9,7 @@ static uint32_t write_idx; static shellmatta_retCode_t writeFct(const char* data, uint32_t length) { write_callCnt ++; - strncpy(&write_data[write_idx], data, length); + memcpy(&write_data[write_idx], data, length); write_idx += length; return SHELLMATTA_OK; }