From 7e93eb3bec4952d084d7e485284456c13b60ad4e Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Mon, 20 Apr 2015 17:42:26 +0200 Subject: [PATCH] make it possible to use --enable-fs more than once Change add_fsname_auto() to join multiple --enable-fs options. Note: "all" always wins, and "--enable-fs foo,all,bar" results in fsauto_names = "all" too. Signed-off-by: Oleg Nesterov Signed-off-by: Pavel Emelyanov --- mount.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/mount.c b/mount.c index 970da995b..b6930db41 100644 --- a/mount.c +++ b/mount.c @@ -1365,6 +1365,7 @@ static struct fstype fstypes[32] = { }, }; +static char fsauto_all[] = "all"; static char *fsauto_names; static bool css_contains(const char *css, const char *str) @@ -1391,7 +1392,7 @@ static bool fsname_is_auto(const char *name) if (!fsauto_names) return false; - if (strcmp(fsauto_names, "all") == 0) + if (fsauto_names == fsauto_all) return true; return css_contains(fsauto_names, name); @@ -1399,8 +1400,21 @@ static bool fsname_is_auto(const char *name) bool add_fsname_auto(const char *names) { - xfree(fsauto_names); - fsauto_names = xstrdup(names); + char *old = fsauto_names; + + if (old == fsauto_all) + return true; + + if (css_contains(names, fsauto_all)) + fsauto_names = fsauto_all; + else if (!old) + fsauto_names = xstrdup(names); + else { + fsauto_names = NULL; + asprintf(&fsauto_names, "%s,%s", old, names); + } + + xfree(old); return fsauto_names != NULL; }