- patch from Denis Vlasenko to add and use bb_xdaemon()
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -275,8 +275,7 @@ start_stop_daemon_main(int argc, char **argv) | |
| } | |
| *--argv = startas; | |
| if (opt & SSD_OPT_BACKGROUND) { | |
| - | if (daemon(0, 0) == -1) |
| - | bb_perror_msg_and_die ("unable to fork"); |
| + | bb_xdaemon(0, 0); |
| setsid(); | |
| } | |
| if (opt & SSD_OPT_MAKEPID) { | |
| @@ -146,6 +146,7 @@ extern void bb_fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN; | |
| extern void xstat(const char *filename, struct stat *buf); | |
| extern int bb_xsocket(int domain, int type, int protocol); | |
| + | extern void bb_xdaemon(int nochdir, int noclose); |
| #define BB_GETOPT_ERROR 0x80000000UL | |
| extern const char *bb_opt_complementally; | |
| @@ -30,7 +30,7 @@ LIBBB-y:= \ | |
| trim.c u_signal_names.c vdprintf.c verror_msg.c \ | |
| vherror_msg.c vperror_msg.c wfopen.c xconnect.c xgetcwd.c xstat.c \ | |
| xgethostbyname.c xgethostbyname2.c xreadlink.c xregcomp.c xgetlarg.c \ | |
| - | bb_xsocket.c \ |
| + | bb_xsocket.c bb_xdaemon.c \ |
| get_terminal_width_height.c fclose_nonstdin.c fflush_stdout_and_exit.c \ | |
| getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ | |
| perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \ | |
| @@ -0,0 +1,17 @@ | |
| + | /* vi: set sw=4 ts=4: */ |
| + | /* |
| + | * bb_xdaemon.c - a daemon() which dies on failure with error message |
| + | * |
| + | * Copyright (C) 2006 Denis Vlasenko |
| + | * |
| + | * Licensed under LGPL, see file docs/lesser.txt in this tarball for details. |
| + | */ |
| + | #include <unistd.h> |
| + | #include "libbb.h" |
| + | |
| + | void bb_xdaemon(int nochdir, int noclose) |
| + | { |
| + | if (daemon(nochdir, noclose)) |
| + | bb_perror_msg_and_die("daemon"); |
| + | } |
| + | |
| @@ -1,3 +1,4 @@ | |
| + | /* vi: set sw=4 ts=4: */ |
| /* | |
| * crond -d[#] -c <crondir> -f -b | |
| * | |
| @@ -213,9 +214,7 @@ int crond_main(int ac, char **av) | |
| /* reexec for vfork() do continue parent */ | |
| vfork_daemon_rexec(1, 0, ac, av, "-f"); | |
| #else /* uClinux */ | |
| - | if (daemon(1, 0) < 0) { |
| - | bb_perror_msg_and_die("daemon"); |
| - | } |
| + | bb_xdaemon(1, 0); |
| #endif /* uClinux */ | |
| } | |
| @@ -40,8 +40,7 @@ int watchdog_main(int argc, char **argv) | |
| if (optind < argc - 1 || argc == 1) | |
| bb_show_usage(); | |
| - | if (daemon(0, 1) < 0) |
| - | bb_perror_msg_and_die("Failed forking watchdog daemon"); |
| + | bb_xdaemon(0, 1); |
| signal(SIGHUP, watchdog_shutdown); | |
| signal(SIGINT, watchdog_shutdown); | |
| @@ -5,6 +5,7 @@ | |
| * Copyright (C) 2005 Roberto A. Foglietta ([email protected]) | |
| * Copyright (C) 2005 Odd Arild Olsen (oao at fibula dot no) | |
| * Copyright (C) 2003 Paul Sheer | |
| + | * |
| * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | |
| * | |
| * Odd Arild Olsen started out with the sheerdns [1] of Paul Sheer and rewrote | |
| @@ -408,9 +409,7 @@ int dnsd_main(int argc, char **argv) | |
| /* reexec for vfork() do continue parent */ | |
| vfork_daemon_rexec(1, 0, argc, argv, "-d"); | |
| #else /* uClinux */ | |
| - | if (daemon(1, 0) < 0) { |
| - | bb_perror_msg_and_die("daemon"); |
| - | } |
| + | bb_xdaemon(1, 0); |
| #endif /* uClinuvx */ | |
| dnsentryinit(is_verbose()); | |
| @@ -1,3 +1,4 @@ | |
| + | /* vi: set sw=4 ts=4: */ |
| /* | |
| * httpd implementation for busybox | |
| * | |
| @@ -2114,8 +2115,7 @@ int httpd_main(int argc, char *argv[]) | |
| #if !ENABLE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY | |
| # if !DEBUG | |
| - | if (daemon(1, 0) < 0) /* don`t change curent directory */ |
| - | bb_perror_msg_and_die("daemon"); |
| + | bb_xdaemon(1, 0); /* don`t change curent directory */ |
| # endif | |
| return miniHttpd(server); | |
| #else | |
| @@ -1314,7 +1314,7 @@ inetd_main (int argc, char *argv[]) | |
| /* reexec for vfork() do continue parent */ | |
| vfork_daemon_rexec (0, 0, argc, argv, "-f"); | |
| #else | |
| - | daemon (0, 0); |
| + | daemon (0, 0); /* bb_xdaemon? */ |
| #endif /* uClinux */ | |
| } else { | |
| setsid (); | |
| @@ -1802,3 +1802,4 @@ daytime_dg (int s, servtab_t *sep ATTRIBUTE_UNUSED) | |
| (void) sendto (s, buffer, strlen (buffer), 0, &sa, sizeof (sa)); | |
| } | |
| #endif /* CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME */ | |
| + | /* vi: set sw=4 ts=4: */ |
| @@ -1,4 +1,4 @@ | |
| - | /* vi:set ts=4:*/ |
| + | /* vi: set sw=4 ts=4: */ |
| /* | |
| * Simple telnet server | |
| * Bjorn Wesen, Axis Communications AB ([email protected]) | |
| @@ -469,9 +469,7 @@ telnetd_main(int argc, char **argv) | |
| bb_perror_msg_and_die("listen"); | |
| } | |
| - | if (daemon(0, 0) < 0) |
| - | bb_perror_msg_and_die("daemon"); |
| - | |
| + | bb_xdaemon(0, 0); |
| maxfd = master_fd; | |
| #endif /* CONFIG_FEATURE_TELNETD_INETD */ | |
| @@ -121,8 +121,7 @@ int klogd_main(int argc, char **argv) | |
| #if defined(__uClinux__) | |
| vfork_daemon_rexec(0, 1, argc, argv, "-n"); | |
| #else /* __uClinux__ */ | |
| - | if (daemon(0, 1) < 0) |
| - | bb_perror_msg_and_die("daemon"); |
| + | bb_xdaemon(0, 1); |
| #endif /* __uClinux__ */ | |
| } | |
| doKlogd(console_log_level); | |
| @@ -673,8 +673,7 @@ int syslogd_main(int argc, char **argv) | |
| #if defined(__uClinux__) | |
| vfork_daemon_rexec(0, 1, argc, argv, "-n"); | |
| #else /* __uClinux__ */ | |
| - | if(daemon(0, 1) < 0) |
| - | bb_perror_msg_and_die("daemon"); |
| + | bb_xdaemon(0, 1); |
| #endif /* __uClinux__ */ | |
| } | |
| doSyslogd(); | |