iconv: fix missing bounds checking for shift_jis decoding
[musl.git] / src / legacy / daemon.c
blob1568b1dcb7517bf0cf1ccb0b094b2dde2f88c59c
1 #define _GNU_SOURCE
2 #include <fcntl.h>
3 #include <unistd.h>
5 int daemon(int nochdir, int noclose)
7 if (!nochdir && chdir("/"))
8 return -1;
9 if (!noclose) {
10 int fd, failed = 0;
11 if ((fd = open("/dev/null", O_RDWR)) < 0) return -1;
12 if (dup2(fd, 0) < 0 || dup2(fd, 1) < 0 || dup2(fd, 2) < 0)
13 failed++;
14 if (fd > 2) close(fd);
15 if (failed) return -1;
18 switch(fork()) {
19 case 0: break;
20 case -1: return -1;
21 default: _exit(0);
24 if (setsid() < 0) return -1;
26 switch(fork()) {
27 case 0: break;
28 case -1: return -1;
29 default: _exit(0);
32 return 0;