Error handling in swaylock daemonize()

Fixes #1741
This commit is contained in:
Drew DeVault 2018-04-05 09:21:39 -04:00
parent 9e89daf213
commit 9939d98454

View file

@ -23,12 +23,34 @@
#include "wlr-layer-shell-unstable-v1-client-protocol.h" #include "wlr-layer-shell-unstable-v1-client-protocol.h"
static void daemonize() { static void daemonize() {
int fds[2];
if (pipe(fds) != 0) {
wlr_log(L_ERROR, "Failed to pipe");
exit(1);
}
if (fork() == 0) { if (fork() == 0) {
close(fds[0]);
int devnull = open("/dev/null", O_RDWR); int devnull = open("/dev/null", O_RDWR);
dup2(STDOUT_FILENO, devnull); dup2(STDOUT_FILENO, devnull);
dup2(STDERR_FILENO, devnull); dup2(STDERR_FILENO, devnull);
chdir("/"); uint8_t success = 0;
if (chdir("/") != 0) {
write(fds[1], &success, 1);
exit(1);
}
success = 1;
if (write(fds[1], &success, 1) != 1) {
exit(1);
}
close(fds[1]);
} else { } else {
close(fds[1]);
uint8_t success;
if (read(fds[0], &success, 1) != 1 || !success) {
wlr_log(L_ERROR, "Failed to daemonize");
exit(1);
}
close(fds[0]);
exit(0); exit(0);
} }
} }