diff options
Diffstat (limited to 'networking')
-rw-r--r-- | networking/inetd.c | 10 | ||||
-rw-r--r-- | networking/udhcp/common.c | 45 |
2 files changed, 18 insertions, 37 deletions
diff --git a/networking/inetd.c b/networking/inetd.c index 4faa4203a..fd72aa726 100644 --- a/networking/inetd.c +++ b/networking/inetd.c @@ -1212,7 +1212,7 @@ static void goaway(int sig ATTRIBUTE_UNUSED) } (void) close(sep->se_fd); } - (void) unlink(_PATH_INETDPID); + remove_pidfile(_PATH_INETDPID); exit(0); } @@ -1301,13 +1301,7 @@ int inetd_main(int argc, char *argv[]) setgroups(1, &gid); } - { - FILE *fp = fopen(_PATH_INETDPID, "w"); - if (fp != NULL) { - fprintf(fp, "%u\n", getpid()); - fclose(fp); - } - } + write_pidfile(_PATH_INETDPID); if (getrlimit(RLIMIT_NOFILE, &rlim_ofile) < 0) { bb_perror_msg("getrlimit"); diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c index 7b2e19c42..46cc0348f 100644 --- a/networking/udhcp/common.c +++ b/networking/udhcp/common.c @@ -22,47 +22,35 @@ long uptime(void) return info.uptime; } - +#if ENABLE_FEATURE_PIDFILE static const char *saved_pidfile; static void pidfile_delete(void) { if (saved_pidfile) - unlink(saved_pidfile); + remove_pidfile(saved_pidfile); } +#endif -static int pidfile_acquire(const char *pidfile) +static void create_pidfile(const char *pidfile) { - int pid_fd; - if (!pidfile) return -1; + if (!pidfile) + return; - pid_fd = open(pidfile, O_CREAT|O_WRONLY|O_TRUNC, 0644); - if (pid_fd < 0) { - bb_perror_msg("cannot open pidfile %s", pidfile); - } else { - /* lockf(pid_fd, F_LOCK, 0); */ - if (!saved_pidfile) - atexit(pidfile_delete); - saved_pidfile = pidfile; + if (!write_pidfile(pidfile)) { + bb_perror_msg("cannot create pidfile %s", pidfile); + return; } - - return pid_fd; -} - -static void pidfile_write_release(int pid_fd) -{ - if (pid_fd < 0) return; - - fdprintf(pid_fd, "%d\n", getpid()); - /* lockf(pid_fd, F_UNLCK, 0); */ - close(pid_fd); +#if ENABLE_FEATURE_PIDFILE + /* lockf(pid_fd, F_LOCK, 0); */ + if (!saved_pidfile) + atexit(pidfile_delete); + saved_pidfile = pidfile; +#endif } - void udhcp_make_pidfile(const char *pidfile) { - int pid_fd; - /* Make sure fd 0,1,2 are open */ bb_sanitize_stdio(); @@ -70,8 +58,7 @@ void udhcp_make_pidfile(const char *pidfile) setlinebuf(stdout); /* Create pidfile */ - pid_fd = pidfile_acquire(pidfile); - pidfile_write_release(pid_fd); + create_pidfile(pidfile); bb_info_msg("%s (v%s) started", applet_name, BB_VER); } |