aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2018-04-05 09:21:39 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2018-04-05 09:21:39 -0400
commit9939d98454db32635dd9d0887ac930d7a24440bc (patch)
treea04f638acd08d19528b21345dac64533f29e8669
parentMerge pull request #1734 from swaywm/resize-cmd (diff)
downloadsway-9939d98454db32635dd9d0887ac930d7a24440bc.tar.gz
sway-9939d98454db32635dd9d0887ac930d7a24440bc.tar.zst
sway-9939d98454db32635dd9d0887ac930d7a24440bc.zip
Error handling in swaylock daemonize()
Fixes #1741
-rw-r--r--swaylock/main.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/swaylock/main.c b/swaylock/main.c
index 1d522184..4c6b44c6 100644
--- a/swaylock/main.c
+++ b/swaylock/main.c
@@ -23,12 +23,34 @@
23#include "wlr-layer-shell-unstable-v1-client-protocol.h" 23#include "wlr-layer-shell-unstable-v1-client-protocol.h"
24 24
25static void daemonize() { 25static void daemonize() {
26 int fds[2];
27 if (pipe(fds) != 0) {
28 wlr_log(L_ERROR, "Failed to pipe");
29 exit(1);
30 }
26 if (fork() == 0) { 31 if (fork() == 0) {
32 close(fds[0]);
27 int devnull = open("/dev/null", O_RDWR); 33 int devnull = open("/dev/null", O_RDWR);
28 dup2(STDOUT_FILENO, devnull); 34 dup2(STDOUT_FILENO, devnull);
29 dup2(STDERR_FILENO, devnull); 35 dup2(STDERR_FILENO, devnull);
30 chdir("/"); 36 uint8_t success = 0;
37 if (chdir("/") != 0) {
38 write(fds[1], &success, 1);
39 exit(1);
40 }
41 success = 1;
42 if (write(fds[1], &success, 1) != 1) {
43 exit(1);
44 }
45 close(fds[1]);
31 } else { 46 } else {
47 close(fds[1]);
48 uint8_t success;
49 if (read(fds[0], &success, 1) != 1 || !success) {
50 wlr_log(L_ERROR, "Failed to daemonize");
51 exit(1);
52 }
53 close(fds[0]);
32 exit(0); 54 exit(0);
33 } 55 }
34} 56}