Magellan Linux

Contents of /trunk/mkinitrd-magellan/busybox/networking/udhcp/common.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (show annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 1571 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 /* vi: set sw=4 ts=4: */
2 /* common.c
3 *
4 * Functions for debugging and logging as well as some other
5 * simple helper functions.
6 *
7 * Russ Dill <Russ.Dill@asu.edu> 2001-2003
8 * Rewritten by Vladimir Oleynik <dzo@simtreas.ru> (C) 2003
9 *
10 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
11 */
12
13 #include <syslog.h>
14
15 #include "common.h"
16
17
18 long uptime(void)
19 {
20 struct sysinfo info;
21 sysinfo(&info);
22 return info.uptime;
23 }
24
25 /*
26 * This function makes sure our first socket calls
27 * aren't going to fd 1 (printf badness...) and are
28 * not later closed by daemon()
29 */
30 static inline void sanitize_fds(void)
31 {
32 int fd = xopen(bb_dev_null, O_RDWR);
33 while (fd < 3)
34 fd = dup(fd);
35 close(fd);
36 }
37
38
39 void udhcp_background(const char *pidfile)
40 {
41 #ifdef __uClinux__
42 bb_error_msg("cannot background in uclinux (yet)");
43 #else /* __uClinux__ */
44 int pid_fd;
45
46 /* hold lock during fork. */
47 pid_fd = pidfile_acquire(pidfile);
48 setsid();
49 xdaemon(0, 0);
50 logmode &= ~LOGMODE_STDIO;
51 pidfile_write_release(pid_fd);
52 #endif /* __uClinux__ */
53 }
54
55 void udhcp_start_log_and_pid(const char *pidfile)
56 {
57 int pid_fd;
58
59 /* Make sure our syslog fd isn't overwritten */
60 sanitize_fds();
61
62 /* do some other misc startup stuff while we are here to save bytes */
63 pid_fd = pidfile_acquire(pidfile);
64 pidfile_write_release(pid_fd);
65
66 /* equivelent of doing a fflush after every \n */
67 setlinebuf(stdout);
68
69 if (ENABLE_FEATURE_UDHCP_SYSLOG) {
70 openlog(applet_name, LOG_PID, LOG_LOCAL0);
71 logmode |= LOGMODE_SYSLOG;
72 }
73
74 bb_info_msg("%s (v%s) started", applet_name, BB_VER);
75 }