diff options
author | Daniel Carl <danielcarl@gmx.de> | 2014-06-05 00:45:53 +0200 |
---|---|---|
committer | Daniel Carl <danielcarl@gmx.de> | 2014-06-05 00:45:53 +0200 |
commit | be73f0a23d2a7346f9282351783eba4a6e05dc50 (patch) | |
tree | 20b6c51689f6590613eadd23d5ec16a1bd09b7a0 | |
parent | 62c038f0f79a2b25fdec503b688b27a63116c857 (diff) |
Allow to escape all expandable chars.
The expandable chars are always allowed to be escaped by a \ if the expansion
type is active.
-rw-r--r-- | src/ex.c | 13 | ||||
-rw-r--r-- | src/util.c | 10 |
2 files changed, 11 insertions, 12 deletions
@@ -645,25 +645,20 @@ static gboolean parse_lhs(const char **input, ExArg *arg) static gboolean parse_rhs(const char **input, ExArg *arg) { int expflags, flags; - const char *quoteable; if (!*input || !**input) { return false; } - if (arg->flags & EX_FLAG_EXP) { - expflags = UTIL_EXP_TILDE|UTIL_EXP_DOLLAR|UTIL_EXP_SPECIAL; - quoteable = "|~$%\\"; - } else { - expflags = 0; - quoteable = "|\\"; - } + expflags = (arg->flags & EX_FLAG_EXP) + ? UTIL_EXP_TILDE|UTIL_EXP_DOLLAR|UTIL_EXP_SPECIAL + : 0; flags = expflags; /* get char until the end of command */ while (**input && **input != '\n' && **input != '|') { /* check for expansion placeholder */ - util_parse_expansion(input, arg->rhs, flags, quoteable); + util_parse_expansion(input, arg->rhs, flags, "|\\"); if (VB_IS_SEPARATOR(**input)) { /* add tilde expansion for next loop needs to be first char or to @@ -352,7 +352,7 @@ char *util_expand(const char *src, int expflags) int flags = expflags; while (**input) { - util_parse_expansion(input, dst, flags, "~$%\\"); + util_parse_expansion(input, dst, flags, "\\"); if (VB_IS_SEPARATOR(**input)) { /* after space the tilde expansion is allowed */ flags = expflags; @@ -379,7 +379,7 @@ char *util_expand(const char *src, int expflags) * @input: String pointer with the content to be parsed. * @str: GString that will be filled with expanded content. * @flags Flags that determine which expansion are processed. - * @quoteable String of chars that are allowed to be escaped by \. + * @quoteable String of chars that are additionally escapable by \. * Returns true if input started with expandable pattern. */ gboolean util_parse_expansion(const char **input, GString *str, int flags, @@ -471,7 +471,11 @@ gboolean util_parse_expansion(const char **input, GString *str, int flags, if (!*input) { /* if input ends here - use only the quote char */ g_string_append_c(str, quote); - } else if (strchr(quoteable, **input)) { + } else if (strchr(quoteable, **input) + || (flags & UTIL_EXP_TILDE && **input == '~') + || (flags & UTIL_EXP_DOLLAR && **input == '$') + || (flags & UTIL_EXP_SPECIAL && **input == '%') + ) { /* escaped char becomes only char */ g_string_append_c(str, **input); } else { |