setsid();
/* Notify parent it's safe to exit as we've detached. */
close(sidpipe[0]);
- write(sidpipe[1], &buf, 1);
+ if (write(sidpipe[1], &buf, 1) != 1)
+ logger(LOG_ERR, "write: %s", strerror(errno));
close(sidpipe[1]);
close_fds();
break;
signal_reset();
/* Wait for child to detach */
close(sidpipe[1]);
- read(sidpipe[0], &buf, 1);
+ if (read(sidpipe[0], &buf, 1) != 1)
+ logger(LOG_ERR, "read: %s", strerror(errno));
close(sidpipe[0]);
break;
}
}
p = *line + last;
memset(p, 0, BUFSIZ);
- fgets(p, BUFSIZ, fp);
+ if (fgets(p, BUFSIZ, fp) == NULL)
+ break;
last += strlen(p);
if (last && (*line)[last - 1] == '\n') {
(*line)[last - 1] = '\0';
read_pid(const char *pidfile)
{
FILE *fp;
- pid_t pid = 0;
+ pid_t pid;
if ((fp = fopen(pidfile, "r")) == NULL) {
errno = ENOENT;
return 0;
}
- fscanf(fp, "%d", &pid);
+ if (fscanf(fp, "%d", &pid) != 1)
+ pid = 0;
fclose(fp);
return pid;
goto abort;
}
- chdir("/");
+ if (chdir("/") == -1)
+ logger(LOG_ERR, "chdir `/': %s", strerror(errno));
umask(022);
if (sig != 0 && !(options->options & DHCPCD_DAEMONISED)) {
#include <errno.h>
#include <signal.h>
#include <string.h>
+#include <syslog.h>
#include <unistd.h>
#include "common.h"
{
int serrno = errno;
- write(signal_pipe[1], &sig, sizeof(sig));
+ if (write(signal_pipe[1], &sig, sizeof(sig)) != sizeof(sig))
+ syslog(LOG_ERR, "write signal %d: %s", sig, strerror(errno));
/* Restore errno */
errno = serrno;
}