Additional fixes for the BusyBox mount -at option to support
authorJohn Bowler <jbowler@nslu2-linux.org>
Fri, 13 May 2005 08:04:52 +0000 (08:04 +0000)
committerJohn Bowler <jbowler@nslu2-linux.org>
Fri, 13 May 2005 08:04:52 +0000 (08:04 +0000)
syntax using in the sysvinit package.  Adds support for a
list of file system types to mount and for negation of this
list.

BKrev: 42845fa40IHXR-jA_i0GaeOUlxfkoQ

packages/busybox/busybox-1.00/mount-all-type.patch
packages/busybox/busybox-1.00/openslug/defconfig
packages/busybox/busybox_1.00.bb

index e69de29..476094a 100644 (file)
@@ -0,0 +1,84 @@
+--- busybox-1.00/.pc/mount-all-type.patch/util-linux/mount.c   2004-08-02 17:14:02.000000000 -0700
++++ busybox-1.00/util-linux/mount.c    2005-05-13 00:17:19.054232796 -0700
+@@ -364,6 +364,56 @@
+       exit(EXIT_SUCCESS);
+ }
++/* Does this file system type, from /etc/fstab, match the given
++ * -t option value?
++ */
++static int match_fs(const char *option, const char *type)
++{
++      const int len = strlen(type);
++      const int no = option[0] == 'n' && option[1] == 'o';
++      const char *optp = option;
++
++      if (len > 0) do {
++              const char *match = strstr(optp, type);
++
++              if (match == NULL) {
++                      /* No match, but if the option string starts 'no' no match
++                       * means yes.
++                       */
++                      return no;
++              }
++
++              /* Match, may be partial, check for end-of-type in option string. */
++              if (match[len] == 0 || match[len] == ',') {
++                      /* Ok, check for type or notype. */
++                      if (match == option) {
++                              /* Exact match at start (can't be 'no') */
++                              return 1;
++                      }
++                      if (match > option+1) {
++                              if (match[-1] == ',') {
++                                      /* Exact match in middle, might be 'no' */
++                                      return !no;
++                              }
++                              if (match == option+2 && no) {
++                                      /* Exact match to 'notype' at start. */
++                                      return 0;
++                              }
++                              if (match > option+2 && match[-3] == ',' &&
++                                              match[-2] == 'n' && match[-1] == 'o') {
++                                      return 0;
++                              }
++                      }
++              }
++
++              /* Look for another match. */
++              optp = match+1;
++      } while (1);
++
++      /* zero length type in fstab (impossible?), don't match it. */
++      return 0;
++}
++
+ extern int mount_main(int argc, char **argv)
+ {
+       struct stat statbuf;
+@@ -371,6 +421,7 @@
+       char *extra_opts;
+       int flags = 0;
+       char *filesystemType = "auto";
++      char *filesystemOption = 0;
+       int got_filesystemType = 0;
+       char *device = xmalloc(PATH_MAX);
+       char *directory = xmalloc(PATH_MAX);
+@@ -393,6 +444,7 @@
+                       break;
+               case 't':
+                       filesystemType = optarg;
++                      filesystemOption = optarg;
+                       got_filesystemType = 1;
+                       break;
+               case 'w':
+@@ -460,6 +512,8 @@
+                       strcpy(device, m->mnt_fsname);
+                       strcpy(directory, m->mnt_dir);
++                      if (all && filesystemOption != 0 && !match_fs(filesystemOption, m->mnt_type))
++                              continue;
+                       filesystemType = bb_xstrdup(m->mnt_type);
+                 singlemount:
+                       extra_opts = string_flags;
index 3ccf0ca..9985eb5 100644 (file)
@@ -231,7 +231,7 @@ CONFIG_GREP=y
 CONFIG_FEATURE_GREP_EGREP_ALIAS=y
 CONFIG_FEATURE_GREP_FGREP_ALIAS=y
 CONFIG_FEATURE_GREP_CONTEXT=y
-CONFIG_XARGS=y
+# CONFIG_XARGS is not set
 # CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
 # CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
 # CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
index 35bb2cc..8f55c87 100644 (file)
@@ -10,7 +10,7 @@ HOMEPAGE = "http://www.busybox.net"
 LICENSE = "GPL"
 SECTION = "base"
 PRIORITY = "required"
-PR = "r18"
+PR = "r19"
 
 SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
            file://add-getkey-applet.patch;patch=1 \