summaryrefslogtreecommitdiffstats
path: root/arguments.c
diff options
context:
space:
mode:
authornicm <nicm>2017-01-18 10:00:50 +0000
committernicm <nicm>2017-01-18 10:00:50 +0000
commit4bb5a1d6a7d1cbf2aa3647afeab270f1afa5d4a7 (patch)
treee6121ae52657077fec580a7266269bf7b68c8bdd /arguments.c
parent649c0d8e91e799981f4e41d4268a3470512c8412 (diff)
Run arguments through vis() as well when printing them.
Diffstat (limited to 'arguments.c')
-rw-r--r--arguments.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/arguments.c b/arguments.c
index 2aedd7ce..c4c8e891 100644
--- a/arguments.c
+++ b/arguments.c
@@ -22,6 +22,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <vis.h>
#include "tmux.h"
@@ -130,9 +131,10 @@ char *
args_print(struct args *args)
{
size_t len;
- char *buf;
- int i;
+ char *buf, *escaped;
+ int i, flags;
struct args_entry *entry;
+ static const char quoted[] = " #\"';$";
len = 1;
buf = xcalloc(1, len);
@@ -156,20 +158,32 @@ args_print(struct args *args)
args_print_add(&buf, &len, " -%c ", entry->flag);
else
args_print_add(&buf, &len, "-%c ", entry->flag);
- if (strchr(entry->value, ' ') != NULL)
- args_print_add(&buf, &len, "\"%s\"", entry->value);
+
+ flags = VIS_OCTAL|VIS_TAB|VIS_NL;
+ if (entry->value[strcspn(entry->value, quoted)] != '\0')
+ flags |= VIS_DQ;
+ stravis(&escaped, entry->value, flags);
+ if (flags & VIS_DQ)
+ args_print_add(&buf, &len, "\"%s\"", escaped);
else
- args_print_add(&buf, &len, "%s", entry->value);
+ args_print_add(&buf, &len, "%s", escaped);
+ free(escaped);
}
/* And finally the argument vector. */
for (i = 0; i < args->argc; i++) {
if (*buf != '\0')
args_print_add(&buf, &len, " ");
- if (strchr(args->argv[i], ' ') != NULL)
- args_print_add(&buf, &len, "\"%s\"", args->argv[i]);
+
+ flags = VIS_OCTAL|VIS_TAB|VIS_NL;
+ if (args->argv[i][strcspn(args->argv[i], quoted)] != '\0')
+ flags |= VIS_DQ;
+ stravis(&escaped, args->argv[i], flags);
+ if (flags & VIS_DQ)
+ args_print_add(&buf, &len, "\"%s\"", escaped);
else
- args_print_add(&buf, &len, "%s", args->argv[i]);
+ args_print_add(&buf, &len, "%s", escaped);
+ free(escaped);
}
return (buf);