aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/output
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-09-14 08:51:01 -0400
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2018-09-14 08:51:01 -0400
commit17fe8924f24a9445447dbb3d5a1f775c94203048 (patch)
treebbb36fed5e7f9a49aab8f4aea3fd72ad814f8076 /sway/commands/output
parentEscape spaces in background file path (diff)
downloadsway-17fe8924f24a9445447dbb3d5a1f775c94203048.tar.gz
sway-17fe8924f24a9445447dbb3d5a1f775c94203048.tar.zst
sway-17fe8924f24a9445447dbb3d5a1f775c94203048.zip
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/output')
-rw-r--r--sway/commands/output/background.c18
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) {
61 "Missing background scaling mode."); 61 "Missing background scaling mode.");
62 } 62 }
63 63
64 wordexp_t p; 64 wordexp_t p = {0};
65 char *src = join_args(argv, j); 65 char *src = join_args(argv, j);
66 while (strstr(src, " ")) { 66 while (strstr(src, " ")) {
67 src = realloc(src, strlen(src) + 2); 67 src = realloc(src, strlen(src) + 2);
@@ -123,6 +123,22 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
123 } 123 }
124 free(src); 124 free(src);
125 } else { 125 } else {
126 // Escape spaces and quotes in the final path for swaybg
127 for (size_t i = 0; i < strlen(src); i++) {
128 switch (src[i]) {
129 case ' ':
130 case '\'':
131 case '\"':
132 src = realloc(src, strlen(src) + 2);
133 memmove(src + i + 1, src + i, strlen(src + i) + 1);
134 *(src + i) = '\\';
135 i++;
136 break;
137 default:
138 break;
139 }
140 }
141
126 output->background = src; 142 output->background = src;
127 output->background_option = strdup(mode); 143 output->background_option = strdup(mode);
128 } 144 }