diff options
author | jh <jh@FreeBSD.org> | 2011-03-23 17:56:38 +0000 |
---|---|---|
committer | jh <jh@FreeBSD.org> | 2011-03-23 17:56:38 +0000 |
commit | fc3bd08464304e1545289cff932b2d056014abd5 (patch) | |
tree | 2c1f0cd42fb2d7c9f07f52f6f6abae75bb3bdfe9 /sys/kern/vfs_mount.c | |
parent | c84b8f6e0c78ee33159cffed66726666e210f53a (diff) | |
download | FreeBSD-src-fc3bd08464304e1545289cff932b2d056014abd5.zip FreeBSD-src-fc3bd08464304e1545289cff932b2d056014abd5.tar.gz |
Recognize "ro", "rdonly", "norw", "rw" and "noro" as equal options in
vfs_equalopts(). This allows vfs_sanitizeopts() to filter redundant
occurrences of these options. It was possible that for example both "ro"
and "rw" options became active concurrently.
PR: kern/133614
Discussed on: freebsd-hackers
MFC after: 1 month
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r-- | sys/kern/vfs_mount.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index afb4109..b1d8112 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -175,6 +175,27 @@ vfs_deleteopt(struct vfsoptlist *opts, const char *name) } } +static int +vfs_isopt_ro(const char *opt) +{ + + if (strcmp(opt, "ro") == 0 || strcmp(opt, "rdonly") == 0 || + strcmp(opt, "norw") == 0) + return (1); + else + return (0); +} + +static int +vfs_isopt_rw(const char *opt) +{ + + if (strcmp(opt, "rw") == 0 || strcmp(opt, "noro") == 0) + return (1); + else + return (0); +} + /* * Check if options are equal (with or without the "no" prefix). */ @@ -203,6 +224,11 @@ vfs_equalopts(const char *opt1, const char *opt2) if (strncmp(opt2, "no", 2) == 0 && strcmp(opt1, opt2 + 2) == 0) return (1); } + /* "ro" / "rdonly" / "norw" / "rw" / "noro" */ + if ((vfs_isopt_ro(opt1) || vfs_isopt_rw(opt1)) && + (vfs_isopt_ro(opt2) || vfs_isopt_rw(opt2))) + return (1); + return (0); } |