X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fmware%2Fparser.c;h=2197d8482391b8616ab23fcb755078440ece50c0;hb=4072b28a98d392ad14cea12d8b4ca1377c7b7a43;hp=217cc6c113420b8610d54309e2bee286645a2cad;hpb=8ad8e5d325736480a881a7f30bd757f96b87376e;p=bertos.git diff --git a/bertos/mware/parser.c b/bertos/mware/parser.c index 217cc6c1..2197d848 100644 --- a/bertos/mware/parser.c +++ b/bertos/mware/parser.c @@ -89,17 +89,31 @@ DECLARE_HASHTABLE_STATIC(commands, CONFIG_MAX_COMMANDS_NUMBER, get_key_from_comm * \return True if a word was extracted, false if we got to the end * of the string without extracting any word. */ -static bool get_word(const char **begin, const char **end) +bool get_word(const char **begin, const char **end) { const char *cur = *end; + bool open_quote = false; while ((*cur == ' ' || *cur == '\t') && *cur) ++cur; + if (*cur == '"') + open_quote = true; + *begin = cur; - while ((*cur != ' ' && *cur != '\t') && *cur) + if (open_quote) + { ++cur; + while (*cur != '"' && *cur) + ++cur; + if (*cur != '"') + return false; + ++cur; + } + else + while ((*cur != ' ' && *cur != '\t') && *cur) + ++cur; *end = cur; @@ -139,6 +153,12 @@ static bool parseArgs(const char *fmt, const char *input, parms argv[]) case 's': (*argv).str.p = begin; (*argv).str.sz = end - begin; + /* Remove the quotes from argument */ + if (*begin == '"' && *(end - 1) == '"') + { + (*argv).str.p += 1; + (*argv).str.sz -= 2; + } argv++; break;