svn commit: trunk/busybox: applets include libbb networking

vda at busybox.net vda at busybox.net
Wed Apr 11 07:04:27 UTC 2007


Author: vda
Date: 2007-04-11 00:04:23 -0700 (Wed, 11 Apr 2007)
New Revision: 18396

Log:
add more convenient defines for [NO]MMU:
"#ifndef BB_NOMMU" is a double negative


Modified:
   trunk/busybox/applets/applets.c
   trunk/busybox/include/libbb.h
   trunk/busybox/include/platform.h
   trunk/busybox/libbb/vfork_daemon_rexec.c
   trunk/busybox/networking/httpd.c
   trunk/busybox/networking/zcip.c


Changeset:
Modified: trunk/busybox/applets/applets.c
===================================================================
--- trunk/busybox/applets/applets.c	2007-04-10 23:32:37 UTC (rev 18395)
+++ trunk/busybox/applets/applets.c	2007-04-11 07:04:23 UTC (rev 18396)
@@ -51,7 +51,7 @@
 
 const struct bb_applet *current_applet;
 const char *applet_name ATTRIBUTE_EXTERNALLY_VISIBLE;
-#ifdef BB_NOMMU
+#if !BB_MMU
 bool re_execed;
 #endif
 
@@ -612,7 +612,7 @@
 {
 	const char *s;
 
-#ifdef BB_NOMMU
+#if !BB_MMU
 	/* NOMMU re-exec trick sets high-order bit in first byte of name */
 	if (argv[0][0] & 0x80) {
 		re_execed = 1;

Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2007-04-10 23:32:37 UTC (rev 18395)
+++ trunk/busybox/include/libbb.h	2007-04-11 07:04:23 UTC (rev 18396)
@@ -269,6 +269,8 @@
 char *xmalloc_readlink_or_warn(const char *path);
 char *xmalloc_realpath(const char *path);
 
+
+//TODO: signal(sid, f) is the same? then why?
 extern void sig_catch(int,void (*)(int));
 //#define sig_ignore(s) (sig_catch((s), SIG_IGN))
 //#define sig_uncatch(s) (sig_catch((s), SIG_DFL))
@@ -278,7 +280,6 @@
 extern void sig_pause(void);
 
 
-
 void xsetgid(gid_t gid);
 void xsetuid(uid_t uid);
 void xchdir(const char *path);
@@ -519,15 +520,14 @@
 
 /* Unlike waitpid, waits ONLY for one process,
  * It's safe to pass negative 'pids' from failed [v]fork -
- * wait4pid will return -1 and ECHILD in errno.
+ * wait4pid will return -1 (and will not clobber [v]fork's errno).
  * IOW: rc = wait4pid(spawn(argv));
  *      if (rc < 0) bb_perror_msg("%s", argv[0]);
  *      if (rc > 0) bb_error_msg("exit code: %d", rc);
  */
+int wait4pid(int pid);
 int wait_pid(int *wstat, int pid);
 int wait_nohang(int *wstat);
-int wait4pid(int pid);
-//TODO: signal(sid, f) is the same? then why?
 #define wait_crashed(w) ((w) & 127)
 #define wait_exitcode(w) ((w) >> 8)
 #define wait_stopsig(w) ((w) >> 8)
@@ -564,7 +564,7 @@
 	DAEMON_CLOSE_EXTRA_FDS = 4,
 	DAEMON_ONLY_SANITIZE = 8, /* internal use */
 };
-#ifndef BB_NOMMU
+#if BB_MMU
   void forkexit_or_rexec(void);
 # define forkexit_or_rexec(argv)            forkexit_or_rexec()
 # define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags)

Modified: trunk/busybox/include/platform.h
===================================================================
--- trunk/busybox/include/platform.h	2007-04-10 23:32:37 UTC (rev 18395)
+++ trunk/busybox/include/platform.h	2007-04-11 07:04:23 UTC (rev 18396)
@@ -212,7 +212,15 @@
  */
 #if defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \
     __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__
-#define BB_NOMMU
+#define BB_MMU 0
+#define BB_NOMMU 1
+#define USE_FOR_NOMMU(...) __VA_ARGS__
+#define USE_FOR_MMU(...)
+#else
+#define BB_MMU 1
+/* BB_NOMMU is not defined in this case! */
+#define USE_FOR_NOMMU(...)
+#define USE_FOR_MMU(...) __VA_ARGS__
 #endif
 
 /* Platforms that haven't got dprintf need to implement fdprintf() in
@@ -232,7 +240,7 @@
 }
 #endif
 
-/* Don't use lchown with glibc older than 2.1.x ... uC-libc lacks it */
+/* Don't use lchown with glibc older than 2.1.x ... uClibc lacks it */
 #if (defined __GLIBC__ && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1) || \
     defined __UC_LIBC__
 # define lchown chown

Modified: trunk/busybox/libbb/vfork_daemon_rexec.c
===================================================================
--- trunk/busybox/libbb/vfork_daemon_rexec.c	2007-04-10 23:32:37 UTC (rev 18395)
+++ trunk/busybox/libbb/vfork_daemon_rexec.c	2007-04-11 07:04:23 UTC (rev 18396)
@@ -107,15 +107,15 @@
 	const struct bb_applet *a = find_applet_by_name(argv[0]);
 
 	if (a && (a->nofork
-#ifndef BB_NOMMU
-		 || a->noexec /* NOEXEC cannot be used on NOMMU */
+#if BB_MMU
+		 || a->noexec /* NOEXEC trick needs fork() */
 #endif
 	)) {
 		int argc = 1;
 		char **pp = argv;
 		while (*++pp)
 			argc++;
-#ifndef BB_NOMMU
+#if BB_MMU
 		if (a->nofork)
 #endif
 		{
@@ -136,7 +136,7 @@
 				applet_name = a->name;
 // what else should we save/restore?
 // TODO: what if applet will mangle argv vector?
-// xargs needs argv untouched because it frees the vector!
+// xargs needs argv untouched because it frees argv[i]!
 // shouldn't we pass a copy?
 				rc = a->main(argc, argv);
 				current_applet = old_a;
@@ -152,29 +152,25 @@
 			option_mask32 = old_m;
 			return rc;
 		}
-#ifndef BB_NOMMU	/* MMU only */
+#if BB_MMU
+		/* MMU only */
 		/* a->noexec is true */
 		rc = fork();
-		if (rc)
-			goto w;
+		if (rc) /* parent or error */
+			return wait4pid(rc);
 		/* child */
 		xfunc_error_retval = EXIT_FAILURE;
 		current_applet = a;
 		run_current_applet_and_exit(argc, argv);
 #endif
 	}
+#endif /* FEATURE_PREFER_APPLETS */
 	rc = spawn(argv);
-#ifndef BB_NOMMU
- w:
-#endif
 	return wait4pid(rc);
-#else /* !FEATURE_PREFER_APPLETS */
-	return wait4pid(spawn(argv));
-#endif
 }
 
 
-#ifdef BB_NOMMU
+#if !BB_MMU
 void forkexit_or_rexec(char **argv)
 {
 	pid_t pid;
@@ -210,7 +206,6 @@
 #define forkexit_or_rexec(argv) forkexit_or_rexec()
 #endif
 
-
 /* Due to a #define in libbb.h on MMU systems we actually have 1 argument -
  * char **argv "vanishes" */
 void bb_daemonize_or_rexec(int flags, char **argv)

Modified: trunk/busybox/networking/httpd.c
===================================================================
--- trunk/busybox/networking/httpd.c	2007-04-10 23:32:37 UTC (rev 18395)
+++ trunk/busybox/networking/httpd.c	2007-04-11 07:04:23 UTC (rev 18396)
@@ -986,7 +986,7 @@
  *    since httpd is run from inetd (and it can't run standalone
  *    in uClinux).
  */
-#ifdef BB_NOMMU
+#if !BB_MMU
 	pid = vfork();
 #else
 	pid = fork();

Modified: trunk/busybox/networking/zcip.c
===================================================================
--- trunk/busybox/networking/zcip.c	2007-04-10 23:32:37 UTC (rev 18395)
+++ trunk/busybox/networking/zcip.c	2007-04-11 07:04:23 UTC (rev 18396)
@@ -220,7 +220,7 @@
 		}
 	}
 	// On NOMMU reexec early (or else we will rerun things twice)
-#ifdef BB_NOMMU
+#if !BB_MMU
 	if (!FOREGROUND)
 		bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv);
 #endif
@@ -268,7 +268,7 @@
 
 	// daemonize now; don't delay system startup
 	if (!FOREGROUND) {
-#ifndef BB_NOMMU
+#if BB_MMU
 		bb_daemonize(DAEMON_CHDIR_ROOT);
 #endif
 		bb_info_msg("start, interface %s", intf);




More information about the busybox-cvs mailing list