svn commit: trunk/busybox: include libbb util-linux

landley at busybox.net landley at busybox.net
Tue Aug 8 01:39:50 UTC 2006


Author: landley
Date: 2006-08-07 18:39:49 -0700 (Mon, 07 Aug 2006)
New Revision: 15789

Log:
Add shared subtree support, suggested by Vladimir Dronnikov.  Also break out a
few new (unfinished) config options, which I intend to make hidden (but
enabled) when CONFIG_NITPICK is disabled.  Getting the .config infrastructure
to do that is non-obvious, it seems...


Modified:
   trunk/busybox/include/libbb.h
   trunk/busybox/include/platform.h
   trunk/busybox/libbb/mtab_file.c
   trunk/busybox/util-linux/Config.in
   trunk/busybox/util-linux/mount.c


Changeset:
Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2006-08-08 00:47:17 UTC (rev 15788)
+++ trunk/busybox/include/libbb.h	2006-08-08 01:39:49 UTC (rev 15789)
@@ -407,7 +407,7 @@
 #define DEFAULT_SHELL_SHORT_NAME     (bb_default_login_shell+6)
 
 
-extern const char bb_path_mtab_file[];
+extern char bb_path_mtab_file[];
 
 extern int bb_default_error_retval;
 

Modified: trunk/busybox/include/platform.h
===================================================================
--- trunk/busybox/include/platform.h	2006-08-08 00:47:17 UTC (rev 15788)
+++ trunk/busybox/include/platform.h	2006-08-08 01:39:49 UTC (rev 15789)
@@ -228,6 +228,35 @@
 
 #if defined(__linux__)
 #include <sys/mount.h>
+// Make sure we have all the new mount flags we actually try to use.
+#ifndef MS_BIND
+#define MS_BIND        (1<<12)
+#endif
+#ifndef MS_MOVE
+#define MS_MOVE        (1<<13)
+#endif
+#ifndef MS_RECURSIVE
+#define MS_RECURSIVE   (1<<14)
+#endif
+#ifndef MS_SILENT
+#define MS_SILENT      (1<<15)
+#endif
+
+// The shared subtree stuff, which went in around 2.6.15
+#ifndef MS_UNBINDABLE
+#define MS_UNBINDABLE  (1<<17)
+#endif
+#ifndef MS_PRIVATE
+#define MS_PRIVATE     (1<<18)
+#endif
+#ifndef MS_SLAVE
+#define MS_SLAVE       (1<<19)
+#endif
+#ifndef MS_SHARED
+#define MS_SHARED      (1<<20)
+#endif
+
+ 
 #if !defined(BLKSSZGET)
 #define BLKSSZGET _IO(0x12, 104)
 #endif

Modified: trunk/busybox/libbb/mtab_file.c
===================================================================
--- trunk/busybox/libbb/mtab_file.c	2006-08-08 00:47:17 UTC (rev 15788)
+++ trunk/busybox/libbb/mtab_file.c	2006-08-08 01:39:49 UTC (rev 15789)
@@ -13,8 +13,5 @@
 
 /* Busybox mount uses either /proc/mounts or /etc/mtab to
  * get the list of currently mounted filesystems */
-#if defined(CONFIG_FEATURE_MTAB_SUPPORT)
-const char bb_path_mtab_file[] = "/etc/mtab";
-#else
-const char bb_path_mtab_file[] = "/proc/mounts";
-#endif
+char bb_path_mtab_file[] =	USE_FEATURE_MTAB_SUPPORT("/etc/mtab")
+							SKIP_FEATURE_MTAB_SUPPORT("/proc/mounts");

Modified: trunk/busybox/util-linux/Config.in
===================================================================
--- trunk/busybox/util-linux/Config.in	2006-08-08 00:47:17 UTC (rev 15788)
+++ trunk/busybox/util-linux/Config.in	2006-08-08 01:39:49 UTC (rev 15789)
@@ -370,8 +370,25 @@
 	default n
 	depends on CONFIG_MOUNT
 	help
-	 Enable mounting of NFS file systems.
+	  Enable mounting of NFS file systems.
 
+config CONFIG_FEATURE_MOUNT_FLAGS
+	depends on CONFIG_MOUNT
+	bool "Support lots of -o flags in mount."
+	default y
+	help
+	  Without this, mount only supports ro/rw/remount.  With this, it
+	  supports nosuid, suid, dev, nodev, exec, noexec, sync, async, atime,
+	  noatime, diratime, nodiratime, loud, bind, move, shared, slave,
+	  private, unbindable, rshared, rslave, rprivate, and runbindable.
+
+config CONFIG_FEATURE_MOUNT_FSTAB
+	depends on CONFIG_MOUNT
+	bool "Support /etc/fstab and -a"
+	default y
+	help
+	  Support mount all and looking for files in /etc/fstab.
+
 config CONFIG_PIVOT_ROOT
 	bool "pivot_root"
 	default n

Modified: trunk/busybox/util-linux/mount.c
===================================================================
--- trunk/busybox/util-linux/mount.c	2006-08-08 00:47:17 UTC (rev 15788)
+++ trunk/busybox/util-linux/mount.c	2006-08-08 01:39:49 UTC (rev 15789)
@@ -25,17 +25,6 @@
 #include "busybox.h"
 #include <mntent.h>
 
-// These two aren't always defined in old headers
-#ifndef MS_BIND
-#define MS_BIND		4096
-#endif
-#ifndef MS_MOVE
-#define MS_MOVE		8192
-#endif
-#ifndef MS_SILENT
-#define MS_SILENT	32768
-#endif
-
 // Not real flags, but we want to be able to check for this.
 #define MOUNT_NOAUTO    (1<<29)
 #define MOUNT_SWAP      (1<<30)
@@ -43,40 +32,59 @@
  * flags */
 
 struct {
-	const char *name;
+	char *name;
 	long flags;
-} static const mount_options[] = {
-	// NOP flags.
+} static mount_options[] = {
+	// MS_FLAGS set a bit.  ~MS_FLAGS disable that bit.  0 flags are NOPs.
 
-	{"loop", 0},
-	{"defaults", 0},
-	{"quiet", 0},
+	USE_FEATURE_MOUNT_LOOP(
+		{"loop", 0},
+	)
 
-	// vfs flags
+	USE_FEATURE_MOUNT_FSTAB(
+		{"defaults", 0},
+		{"quiet", 0},
+		{"noauto",MOUNT_NOAUTO},
+		{"swap",MOUNT_SWAP},
+	)
 
-	{"ro", MS_RDONLY},
-	{"rw", ~MS_RDONLY},
-	{"nosuid", MS_NOSUID},
-	{"suid", ~MS_NOSUID},
-	{"dev", ~MS_NODEV},
-	{"nodev", MS_NODEV},
-	{"exec", ~MS_NOEXEC},
-	{"noexec", MS_NOEXEC},
-	{"sync", MS_SYNCHRONOUS},
-	{"async", ~MS_SYNCHRONOUS},
-	{"atime", ~MS_NOATIME},
-	{"noatime", MS_NOATIME},
-	{"diratime", ~MS_NODIRATIME},
-	{"nodiratime", MS_NODIRATIME},
-	{"loud", ~MS_SILENT},
+	USE_FEATURE_MOUNT_FLAGS(
+		// vfs flags
+		{"nosuid", MS_NOSUID},
+		{"suid", ~MS_NOSUID},
+		{"dev", ~MS_NODEV},
+		{"nodev", MS_NODEV},
+		{"exec", ~MS_NOEXEC},
+		{"noexec", MS_NOEXEC},
+		{"sync", MS_SYNCHRONOUS},
+		{"async", ~MS_SYNCHRONOUS},
+		{"atime", ~MS_NOATIME},
+		{"noatime", MS_NOATIME},
+		{"diratime", ~MS_NODIRATIME},
+		{"nodiratime", MS_NODIRATIME},
+		{"loud", ~MS_SILENT},
 
-	// action flags
+		// action flags
 
-	{"remount", MS_REMOUNT},
-	{"bind", MS_BIND},
-	{"move", MS_MOVE},
-	{"noauto",MOUNT_NOAUTO},
-	{"swap",MOUNT_SWAP}
+		{"bind", MS_BIND},
+		{"move", MS_MOVE},
+		{"shared", MS_SHARED},
+		{"slave", MS_SLAVE},
+		{"private", MS_PRIVATE},
+		{"unbindable", MS_UNBINDABLE},
+		{"rshared", MS_SHARED|MS_RECURSIVE},
+		{"rslave", MS_SLAVE|MS_RECURSIVE},
+		{"rprivate", MS_SLAVE|MS_RECURSIVE},
+		{"runbindable", MS_UNBINDABLE|MS_RECURSIVE},
+	)
+
+	// Always understood.
+
+	{"ro", MS_RDONLY},        // vfs flag
+	{"rw", ~MS_RDONLY},       // vfs flag
+	{"remount", MS_REMOUNT},  // action flag
+
+
 };
 
 /* Append mount options to string */
@@ -225,9 +233,8 @@
 
 		for(i=0; mount_options[i].flags != MS_REMOUNT; i++)
 			if (mount_options[i].flags > 0)
-				append_mount_options(&(mp->mnt_opts),
-// Shut up about the darn const.  It's not important.  I don't care.
-						(char *)mount_options[i].name);
+// Shut up about the darn const.  It's not important.  I don't care.  (char *)
+				append_mount_options(&(mp->mnt_opts), mount_options[i].name);
 
 		// Remove trailing / (if any) from directory we mounted on
 
@@ -285,8 +292,8 @@
 	// Look at the file.  (Not found isn't a failure for remount, or for
 	// a synthetic filesystem like proc or sysfs.)
 
-	if (stat(mp->mnt_fsname, &st));
-	else if (!(vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE))) {
+	if (!lstat(mp->mnt_fsname, &st) && !(vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE | MS_SHARED | MS_PRIVATE || MS_SLAVE | MS_UNBINDABLE)))
+	{
 		// Do we need to allocate a loopback device for it?
 
 		if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) {
@@ -456,7 +463,7 @@
 	// Open either fstab or mtab
 
 	if (parse_mount_options(cmdopts,0) & MS_REMOUNT)
-		fstabname = (char *)bb_path_mtab_file;  // Again with the evil const.
+		fstabname = bb_path_mtab_file;  // Again with the evil const (char *).
 	else fstabname="/etc/fstab";
 
 	if (!(fstab=setmntent(fstabname,"r")))




More information about the busybox-cvs mailing list