diff options
Diffstat (limited to 'networking/udhcp/common.c')
-rw-r--r-- | networking/udhcp/common.c | 45 |
1 files changed, 16 insertions, 29 deletions
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c index 7b2e19c..46cc034 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); } |