mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
Merge branch 'obsd-master'
This commit is contained in:
61
arguments.c
61
arguments.c
@ -140,23 +140,15 @@ static void
|
||||
args_print_add_value(char **buf, size_t *len, struct args_entry *entry,
|
||||
struct args_value *value)
|
||||
{
|
||||
static const char quoted[] = " #\"';$";
|
||||
char *escaped;
|
||||
int flags;
|
||||
char *escaped;
|
||||
|
||||
if (**buf != '\0')
|
||||
args_print_add(buf, len, " -%c ", entry->flag);
|
||||
else
|
||||
args_print_add(buf, len, "-%c ", entry->flag);
|
||||
|
||||
flags = VIS_OCTAL|VIS_TAB|VIS_NL;
|
||||
if (value->value[strcspn(value->value, quoted)] != '\0')
|
||||
flags |= VIS_DQ;
|
||||
utf8_stravis(&escaped, value->value, flags);
|
||||
if (flags & VIS_DQ)
|
||||
args_print_add(buf, len, "\"%s\"", escaped);
|
||||
else
|
||||
args_print_add(buf, len, "%s", escaped);
|
||||
escaped = args_escape(value->value);
|
||||
args_print_add(buf, len, "%s", escaped);
|
||||
free(escaped);
|
||||
}
|
||||
|
||||
@ -164,21 +156,13 @@ args_print_add_value(char **buf, size_t *len, struct args_entry *entry,
|
||||
static void
|
||||
args_print_add_argument(char **buf, size_t *len, const char *argument)
|
||||
{
|
||||
static const char quoted[] = " #\"';$";
|
||||
char *escaped;
|
||||
int flags;
|
||||
char *escaped;
|
||||
|
||||
if (**buf != '\0')
|
||||
args_print_add(buf, len, " ");
|
||||
|
||||
flags = VIS_OCTAL|VIS_TAB|VIS_NL;
|
||||
if (argument[strcspn(argument, quoted)] != '\0')
|
||||
flags |= VIS_DQ;
|
||||
utf8_stravis(&escaped, argument, flags);
|
||||
if (flags & VIS_DQ)
|
||||
args_print_add(buf, len, "\"%s\"", escaped);
|
||||
else
|
||||
args_print_add(buf, len, "%s", escaped);
|
||||
escaped = args_escape(argument);
|
||||
args_print_add(buf, len, "%s", escaped);
|
||||
free(escaped);
|
||||
}
|
||||
|
||||
@ -218,6 +202,39 @@ args_print(struct args *args)
|
||||
return (buf);
|
||||
}
|
||||
|
||||
/* Escape an argument. */
|
||||
char *
|
||||
args_escape(const char *s)
|
||||
{
|
||||
static const char quoted[] = " #\"';$";
|
||||
char *escaped, *result;
|
||||
int flags;
|
||||
|
||||
if ((strchr(quoted, s[0]) != NULL || s[0] == '~') && s[1] == '\0') {
|
||||
xasprintf(&escaped, "\\%c", s[0]);
|
||||
return (escaped);
|
||||
}
|
||||
|
||||
flags = VIS_OCTAL|VIS_TAB|VIS_NL;
|
||||
if (s[strcspn(s, quoted)] != '\0')
|
||||
flags |= VIS_DQ;
|
||||
utf8_stravis(&escaped, s, flags);
|
||||
|
||||
if (flags & VIS_DQ) {
|
||||
if (*escaped == '~')
|
||||
xasprintf(&result, "\"\\%s\"", escaped);
|
||||
else
|
||||
xasprintf(&result, "\"%s\"", escaped);
|
||||
} else {
|
||||
if (*escaped == '~')
|
||||
xasprintf(&result, "\\%s", escaped);
|
||||
else
|
||||
result = xstrdup(escaped);
|
||||
}
|
||||
free(escaped);
|
||||
return (result);
|
||||
}
|
||||
|
||||
/* Return if an argument is present. */
|
||||
int
|
||||
args_has(struct args *args, u_char ch)
|
||||
|
Reference in New Issue
Block a user