Annotation of /trunk/mkinitrd-magellan/busybox/networking/udhcp/common.c
Parent Directory | Revision Log
Revision 532 -
(hide 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)
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 | niro | 532 | /* 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 | } |