Merge pull request #2629 from RedSoxFan/fix-654
Allow spaces in background file path
This commit is contained in:
commit
f5ecc89c68
|
@ -61,8 +61,14 @@ 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);
|
||||
char *ptr = strstr(src, " ") + 1;
|
||||
memmove(ptr + 1, ptr, strlen(ptr) + 1);
|
||||
*ptr = '\\';
|
||||
}
|
||||
if (wordexp(src, &p, 0) != 0 || p.we_wordv[0] == NULL) {
|
||||
struct cmd_results *cmd_res = cmd_results_new(CMD_INVALID, "output",
|
||||
"Invalid syntax (%s)", src);
|
||||
|
@ -71,7 +77,7 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
|
|||
return cmd_res;
|
||||
}
|
||||
free(src);
|
||||
src = strdup(p.we_wordv[0]);
|
||||
src = join_args(p.we_wordv, p.we_wordc);
|
||||
wordfree(&p);
|
||||
if (!src) {
|
||||
wlr_log(WLR_ERROR, "Failed to duplicate string");
|
||||
|
@ -117,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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue