From 044050423418803fc9765b6b19656b78d1f455cf Mon Sep 17 00:00:00 2001 From: Marian Durkovic Date: Sun, 3 Dec 2006 19:44:54 +0000 Subject: [PATCH] Implement shell-style escaping also for double quotes and fix bugs. --- src/input/vlm.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/input/vlm.c b/src/input/vlm.c index 045fb6f741..c4cdfc84f8 100644 --- a/src/input/vlm.c +++ b/src/input/vlm.c @@ -257,27 +257,29 @@ static const char quotes[] = "\"'"; /** * FindCommandEnd: look for the end of a possibly quoted string * @return NULL on mal-formatted string, - * pointer paste the last character otherwise. + * pointer past the last character otherwise. */ static const char *FindCommandEnd (const char *psz_sent) { const char quote = strchr (quotes, psz_sent[0]) ? psz_sent[0] : 0; char c; + if (quote) + psz_sent++; // skip opening quote + while ((c = *psz_sent) != '\0') { if ((quote == '"') && (c == '\\')) { + psz_sent++; // move past backslash if (*psz_sent == '\0') return NULL; // cannot escape "nothing" - - psz_sent++; // skips escaped character } else if (c == quote) // non-escaped matching quote return psz_sent + 1; else - if (isblank (c)) // non-escaped blank + if ((!quote) && isspace(c)) // non-escaped blank return psz_sent; psz_sent++; @@ -315,23 +317,20 @@ static int Unescape (char *out, const char *in) { switch (c = *in++) { - case 'n': - *out++ = '\n'; + case '"': + *out++ = '"'; continue; - case 't': - *out++ = '\t'; + case '\\': + *out++ = '\\'; continue; - case 'r': - *out++ = '\r'; - continue; + case '\0': // should never happen + *out = '\0'; + return -1; } - - // Only allow printable ASCII characters - // (in particular, no nul nor extended characters) - if (c < 32) - return -1; + /* None of the special cases - copy the backslash */ + *out++ = '\\'; } *out++ = c; } @@ -359,7 +358,7 @@ static int ExecuteCommand( vlm_t *p_vlm, const char *psz_command, { const char *psz_temp; - if(isblank (*psz_command)) + if(isspace (*psz_command)) { psz_command++; continue; -- 2.39.5