From: Karol Lewandowski Date: Thu, 3 Nov 2011 09:02:31 +0000 (+0100) Subject: mount: handle list of comma-separated fs types in -t option X-Git-Tag: 1_20_0~164 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b5ebe5fdb3a520114fc4f956687e2c51f3b81429;p=oweals%2Fbusybox.git mount: handle list of comma-separated fs types in -t option Allows one to specify list of filesystem types to be tried when mounting particular device. E.g. mount -t vfat,ext2 ... Signed-off-by: Karol Lewandowski Signed-off-by: Denys Vlasenko --- diff --git a/util-linux/mount.c b/util-linux/mount.c index fddd7fba9..f94b6e643 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -38,7 +38,7 @@ //usage: ) //usage: "\n -r Read-only mount" //usage: "\n -w Read-write mount (default)" -//usage: "\n -t FSTYPE Filesystem type" +//usage: "\n -t FSTYPE[,...] Filesystem type(s)" //usage: "\n -O OPT Mount only filesystems with option OPT (-a only)" //usage: "\n-o OPT:" //usage: IF_FEATURE_MOUNT_LOOP( @@ -1827,7 +1827,16 @@ static int singlemount(struct mntent *mp, int ignore_busy) // If we know the fstype (or don't need to), jump straight // to the actual mount. if (mp->mnt_type || (vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE))) { - rc = mount_it_now(mp, vfsflags, filteropts); + char *next; + for (;;) { + next = mp->mnt_type ? strchr(mp->mnt_type, ',') : NULL; + if (next) + *next = '\0'; + rc = mount_it_now(mp, vfsflags, filteropts); + if (rc == 0 || !next) + break; + mp->mnt_type = next + 1; + } } else { // Loop through filesystem types until mount succeeds // or we run out @@ -1844,7 +1853,7 @@ static int singlemount(struct mntent *mp, int ignore_busy) for (fl = fslist; fl; fl = fl->link) { mp->mnt_type = fl->data; rc = mount_it_now(mp, vfsflags, filteropts); - if (!rc) + if (rc == 0) break; } }