summaryrefslogtreecommitdiff
path: root/networking/udhcp/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/udhcp/common.c')
-rw-r--r--networking/udhcp/common.c45
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);
}