Merge pull request #2635 from RedSoxFan/fix-bg-special

Handle shell special characters in bg file path
master
emersion 6 years ago committed by GitHub
commit 0f0d0c7f9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -391,14 +391,12 @@ struct cmd_results *config_command(char *exec) {
// Var replacement, for all but first argument of set // Var replacement, for all but first argument of set
// TODO commands // TODO commands
for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) { for (i = handler->handle == cmd_set ? 2 : 1; i < argc; ++i) {
if (*argv[i] == '\"' || *argv[i] == '\'') {
strip_quotes(argv[i]);
}
argv[i] = do_var_replacement(argv[i]); argv[i] = do_var_replacement(argv[i]);
unescape_string(argv[i]); unescape_string(argv[i]);
} }
// Strip quotes for first argument.
// TODO This part needs to be handled much better
if (argc>1 && (*argv[1] == '\"' || *argv[1] == '\'')) {
strip_quotes(argv[1]);
}
if (handler->handle) { if (handler->handle) {
results = handler->handle(argc-1, argv+1); results = handler->handle(argc-1, argv+1);
} else { } else {
@ -422,11 +420,6 @@ struct cmd_results *config_subcommand(char **argv, int argc,
char *input = argv[0] ? argv[0] : "(empty)"; char *input = argv[0] ? argv[0] : "(empty)";
return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command"); return cmd_results_new(CMD_INVALID, input, "Unknown/invalid command");
} }
// Strip quotes for first argument.
// TODO This part needs to be handled much better
if (argc > 1 && (*argv[1] == '\"' || *argv[1] == '\'')) {
strip_quotes(argv[1]);
}
if (handler->handle) { if (handler->handle) {
return handler->handle(argc - 1, argv + 1); return handler->handle(argc - 1, argv + 1);
} }

@ -123,19 +123,13 @@ struct cmd_results *output_cmd_background(int argc, char **argv) {
} }
free(src); free(src);
} else { } else {
// Escape spaces and quotes in the final path for swaybg // Escape double quotes in the final path for swaybg
for (size_t i = 0; i < strlen(src); i++) { for (size_t i = 0; i < strlen(src); i++) {
switch (src[i]) { if (src[i] == '"') {
case ' ': src = realloc(src, strlen(src) + 2);
case '\'': memmove(src + i + 1, src + i, strlen(src + i) + 1);
case '\"': *(src + i) = '\\';
src = realloc(src, strlen(src) + 2); i++;
memmove(src + i + 1, src + i, strlen(src + i) + 1);
*(src + i) = '\\';
i++;
break;
default:
break;
} }
} }

@ -237,7 +237,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) {
wlr_log(WLR_DEBUG, "Setting background for output %d to %s", wlr_log(WLR_DEBUG, "Setting background for output %d to %s",
output_i, oc->background); output_i, oc->background);
size_t len = snprintf(NULL, 0, "%s %d %s %s %s", size_t len = snprintf(NULL, 0, "%s %d \"%s\" %s %s",
config->swaybg_command ? config->swaybg_command : "swaybg", config->swaybg_command ? config->swaybg_command : "swaybg",
output_i, oc->background, oc->background_option, output_i, oc->background, oc->background_option,
oc->background_fallback ? oc->background_fallback : ""); oc->background_fallback ? oc->background_fallback : "");
@ -246,7 +246,7 @@ void apply_output_config(struct output_config *oc, struct sway_output *output) {
wlr_log(WLR_DEBUG, "Unable to allocate swaybg command"); wlr_log(WLR_DEBUG, "Unable to allocate swaybg command");
return; return;
} }
snprintf(command, len + 1, "%s %d %s %s %s", snprintf(command, len + 1, "%s %d \"%s\" %s %s",
config->swaybg_command ? config->swaybg_command : "swaybg", config->swaybg_command ? config->swaybg_command : "swaybg",
output_i, oc->background, oc->background_option, output_i, oc->background, oc->background_option,
oc->background_fallback ? oc->background_fallback : ""); oc->background_fallback ? oc->background_fallback : "");

Loading…
Cancel
Save