Thanks for your comments, I must admit that I never really looked at
the remove_file code.

I tried to follow your recommandations and here is another version which
uses open/dprintf for writepidfile and a simple unlink for removepidfile.

Let me know how it is.

-- 
Stéphane Billiart                      http://perso.orange.fr/billiart/
diff -ruN busybox.orig/Config.in busybox/Config.in
--- busybox.orig/Config.in      2007-02-11 17:21:35.000000000 -0500
+++ busybox/Config.in   2007-03-26 19:21:05.000000000 -0400
@@ -141,6 +141,13 @@
          Don't enable this unless you have a really good reason to clean
          things up manually.
 
+config FEATURE_PIDFILE
+       bool "Support writing pidfiles"
+       default n
+       help
+         This option makes some applets (crond, syslogd and inetd) write
+         a pidfile in /var/run. Some applications rely on them
+
 config FEATURE_SUID
        bool "Support for SUID/SGID handling"
        default n
diff -ruN busybox.orig/include/libbb.h busybox/include/libbb.h
--- busybox.orig/include/libbb.h        2007-03-26 19:16:09.000000000 -0400
+++ busybox/include/libbb.h     2007-03-26 19:39:49.000000000 -0400
@@ -542,6 +542,14 @@
 extern void llist_free(llist_t *elm, void (*freeit)(void *data));
 extern llist_t* llist_rev(llist_t *list);
 
+#if ENABLE_FEATURE_PIDFILE
+int writepidfile(const char *path);
+#define removepidfile(f) ((void)unlink(f))
+#else
+#define writepidfile(f) ((void)0)
+#define removepidfile(f) ((void)0)
+#endif
+
 enum {
        LOGMODE_NONE = 0,
        LOGMODE_STDIO = 1<<0,
diff -ruN busybox.orig/libbb/Kbuild busybox/libbb/Kbuild
--- busybox.orig/libbb/Kbuild   2007-03-19 19:41:04.000000000 -0400
+++ busybox/libbb/Kbuild        2007-03-26 19:21:05.000000000 -0400
@@ -61,6 +61,7 @@
 lib-y += perror_msg_and_die.o
 lib-y += perror_nomsg.o
 lib-y += perror_nomsg_and_die.o
+lib-y += pidfile.o
 lib-y += process_escape_sequence.o
 lib-y += procps.o
 lib-y += read.o
diff -ruN busybox.orig/libbb/pidfile.c busybox/libbb/pidfile.c
--- busybox.orig/libbb/pidfile.c        1969-12-31 19:00:00.000000000 -0500
+++ busybox/libbb/pidfile.c     2007-03-26 20:20:26.000000000 -0400
@@ -0,0 +1,22 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * pid file routines
+ *
+ * Copyright (C) 2007 by Stephane Billiart <[EMAIL PROTECTED]>
+ *
+ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
+ */
+#include "libbb.h"
+
+#if ENABLE_FEATURE_PIDFILE
+int writepidfile(const char *path)
+{
+       int pid_fd = open(path, O_WRONLY|O_CREAT|O_EXCL);
+       if (pid_fd == -1) {
+               return 1;
+       }
+       fdprintf(pid_fd, "%d\n", getpid());
+       close(pid_fd);
+       return 0;
+}
+#endif
diff -ruN busybox.orig/miscutils/crond.c busybox/miscutils/crond.c
--- busybox.orig/miscutils/crond.c      2007-03-26 10:46:41.000000000 -0400
+++ busybox/miscutils/crond.c   2007-03-26 19:21:05.000000000 -0400
@@ -185,6 +185,7 @@
                int rescan = 60;
                short sleep_time = 60;
 
+               writepidfile("/var/run/crond.pid");
                for (;;) {
                        sleep((sleep_time + 1) - (short) (time(NULL) % 
sleep_time));
 
diff -ruN busybox.orig/networking/inetd.c busybox/networking/inetd.c
--- busybox.orig/networking/inetd.c     2007-03-26 10:46:39.000000000 -0400
+++ busybox/networking/inetd.c  2007-03-26 19:21:05.000000000 -0400
@@ -1212,7 +1212,7 @@
                }
                (void) close(sep->se_fd);
        }
-       (void) unlink(_PATH_INETDPID);
+       removepidfile(_PATH_INETDPID);
        exit(0);
 }
 
@@ -1301,13 +1301,7 @@
                setgroups(1, &gid);
        }
 
-       {
-               FILE *fp = fopen(_PATH_INETDPID, "w");
-               if (fp != NULL) {
-                       fprintf(fp, "%u\n", getpid());
-                       fclose(fp);
-               }
-       }
+       writepidfile(_PATH_INETDPID);
 
        if (getrlimit(RLIMIT_NOFILE, &rlim_ofile) < 0) {
                bb_perror_msg("getrlimit");
diff -ruN busybox.orig/sysklogd/syslogd.c busybox/sysklogd/syslogd.c
--- busybox.orig/sysklogd/syslogd.c     2007-03-26 10:46:40.000000000 -0400
+++ busybox/sysklogd/syslogd.c  2007-03-26 19:21:05.000000000 -0400
@@ -519,6 +519,7 @@
        signal(SIGALRM, do_mark);
        alarm(G.markInterval);
 #endif
+       removepidfile("/var/run/syslogd.pid");
 
        memset(&sunx, 0, sizeof(sunx));
        sunx.sun_family = AF_UNIX;
@@ -645,6 +646,7 @@
                bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
        }
        umask(0);
+       writepidfile("/var/run/syslogd.pid");
        do_syslogd();
        /* return EXIT_SUCCESS; */
 }
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to