summaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
authorLibravatar Christoph Gysin <christoph.gysin@gmail.com>2015-11-25 23:19:08 +0200
committerLibravatar Christoph Gysin <christoph.gysin@gmail.com>2015-11-25 23:19:11 +0200
commite362f871d93df7568267d9a50ff77b63f5300528 (patch)
tree629ad007a5353170bd1a6fdbdb732e8076edc2d9 /sway
parentMerge pull request #251 from sce/criteria_1 (diff)
downloadsway-e362f871d93df7568267d9a50ff77b63f5300528.tar.gz
sway-e362f871d93df7568267d9a50ff77b63f5300528.tar.zst
sway-e362f871d93df7568267d9a50ff77b63f5300528.zip
Call swaybg without invoking a shell
This makes escaping the arguments obsolete. Also avoid dynamic memory allocation for the output id. It only supported ids up to 99. Now we support up to 999, and take 4 bytes off the stack instead.
Diffstat (limited to 'sway')
-rw-r--r--sway/config.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/sway/config.c b/sway/config.c
index 4955c94f..ba88a315 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -334,17 +334,22 @@ void apply_output_config(struct output_config *oc, swayc_t *output) {
334 } 334 }
335 335
336 sway_log(L_DEBUG, "Setting background for output %d to %s", i, oc->background); 336 sway_log(L_DEBUG, "Setting background for output %d to %s", i, oc->background);
337 char *cmd = malloc( 337
338 strlen("swaybg ") + 338 size_t bufsize = 4;
339 (i >= 10 ? 2 : 1) + 339 char output_id[bufsize];
340 strlen(oc->background) + 3 + 340 snprintf(output_id, bufsize, "%d", i);
341 strlen(oc->background_option) + 3 + 341 output_id[bufsize-1] = 0;
342 1); 342
343 sprintf(cmd, "swaybg %d '%s' '%s'", i, oc->background, oc->background_option); 343 char *const cmd[] = {
344 "swaybg",
345 output_id,
346 oc->background,
347 oc->background_option,
348 NULL,
349 };
344 if (fork() == 0) { 350 if (fork() == 0) {
345 execl("/bin/sh", "/bin/sh", "-c", cmd, (void *)NULL); 351 execvp(cmd[0], cmd);
346 } 352 }
347 free(cmd);
348 } 353 }
349} 354}
350 355