diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2018-09-14 08:51:01 -0400 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2018-09-14 08:51:01 -0400 |
commit | 17fe8924f24a9445447dbb3d5a1f775c94203048 (patch) | |
tree | bbb36fed5e7f9a49aab8f4aea3fd72ad814f8076 /sway/commands | |
parent | 1cf737489db68312556d0a215c17e93a573b283f (diff) |
Address ianyfan's comments
wordexp p is now initialized to {0} to prevent a segfault on wordfree
in the failure case.
File paths with single quotes and double quotes are now supported. The
quote can either be wrapped in the other quote or escaped with three
backslashes.
Additionally to make passing file paths with double quotes to swaybg
easier, instead of enclosing the path given to swaybg in quotes, all
spaces, single quotes, and double quotes in the resulting path are now
escaped with a single backslash.
Diffstat (limited to 'sway/commands')
-rw-r--r-- | sway/commands/output/background.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sway/commands/output/background.c b/sway/commands/output/background.c index 2ff5f0d7..9e370d43 100644 --- a/sway/commands/output/background.c +++ b/sway/commands/output/background.c @@ -61,7 +61,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { "Missing background scaling mode."); } - wordexp_t p; + wordexp_t p = {0}; char *src = join_args(argv, j); while (strstr(src, " ")) { src = realloc(src, strlen(src) + 2); @@ -123,6 +123,22 @@ struct cmd_results *output_cmd_background(int argc, char **argv) { } free(src); } else { + // Escape spaces and quotes in the final path for swaybg + for (size_t i = 0; i < strlen(src); i++) { + switch (src[i]) { + case ' ': + case '\'': + case '\"': + src = realloc(src, strlen(src) + 2); + memmove(src + i + 1, src + i, strlen(src + i) + 1); + *(src + i) = '\\'; + i++; + break; + default: + break; + } + } + output->background = src; output->background_option = strdup(mode); } |