[git commit] libbb: match_fstype() is unreadable in the extreme, fixing it

Denys Vlasenko vda.linux at googlemail.com
Sun Jan 29 23:45:05 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=35b54a3c247235b1bffe2a22784a1d5be10267f3
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 include/libbb.h      |  2 +-
 libbb/match_fstype.c | 20 ++++++++------------
 util-linux/mount.c   |  2 +-
 util-linux/umount.c  |  4 ++--
 4 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/include/libbb.h b/include/libbb.h
index 07fe20d..b054e05 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1312,8 +1312,8 @@ const struct hwtype *get_hwtype(const char *name) FAST_FUNC;
 const struct hwtype *get_hwntype(int type) FAST_FUNC;
 
 
+extern int fstype_matches(const char *fstype, const char *comma_list) FAST_FUNC;
 #ifdef HAVE_MNTENT_H
-extern int match_fstype(const struct mntent *mt, const char *fstypes) FAST_FUNC;
 extern struct mntent *find_mount_point(const char *name, int subdir_too) FAST_FUNC;
 #endif
 extern void erase_mtab(const char * name) FAST_FUNC;
diff --git a/libbb/match_fstype.c b/libbb/match_fstype.c
index b066b42..6046bc6 100644
--- a/libbb/match_fstype.c
+++ b/libbb/match_fstype.c
@@ -12,34 +12,30 @@
 
 #include "libbb.h"
 
-#ifdef HAVE_MNTENT_H
-
-int FAST_FUNC match_fstype(const struct mntent *mt, const char *t_fstype)
+int FAST_FUNC fstype_matches(const char *fstype, const char *comma_list)
 {
 	int match = 1;
 
-	if (!t_fstype)
+	if (!comma_list)
 		return match;
 
-	if (t_fstype[0] == 'n' && t_fstype[1] == 'o') {
+	if (comma_list[0] == 'n' && comma_list[1] == 'o') {
 		match--;
-		t_fstype += 2;
+		comma_list += 2;
 	}
 
 	while (1) {
-		char *after_mnt_type = is_prefixed_with(t_fstype, mt->mnt_type);
+		char *after_mnt_type = is_prefixed_with(comma_list, fstype);
 		if (after_mnt_type
 		 && (*after_mnt_type == '\0' || *after_mnt_type == ',')
 		) {
 			return match;
 		}
-		t_fstype = strchr(t_fstype, ',');
-		if (!t_fstype)
+		comma_list = strchr(comma_list, ',');
+		if (!comma_list)
 			break;
-		t_fstype++;
+		comma_list++;
 	}
 
 	return !match;
 }
-
-#endif /* HAVE_MNTENT_H */
diff --git a/util-linux/mount.c b/util-linux/mount.c
index 4f5dced..f0245f7 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -2312,7 +2312,7 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
 				bb_error_msg_and_die(bb_msg_you_must_be_root);
 
 			// Does type match? (NULL matches always)
-			if (!match_fstype(mtcur, fstype))
+			if (!fstype_matches(mtcur->mnt_type, fstype))
 				continue;
 
 			// Skip noauto and swap anyway
diff --git a/util-linux/umount.c b/util-linux/umount.c
index 78eef57..c958fd5 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -125,8 +125,8 @@ int umount_main(int argc UNUSED_PARAM, char **argv)
 	} else {
 		setup_common_bufsiz();
 		while (getmntent_r(fp, &me, bb_common_bufsiz1, COMMON_BUFSIZE)) {
-			/* Match fstype if passed */
-			if (!match_fstype(&me, fstype))
+			/* Match fstype (fstype==NULL matches always) */
+			if (!fstype_matches(me.mnt_type, fstype))
 				continue;
 			m = xzalloc(sizeof(*m));
 			m->next = mtl;


More information about the busybox-cvs mailing list