diff options
author | Alan Somers <asomers@FreeBSD.org> | 2017-09-05 19:28:35 +0000 |
---|---|---|
committer | Alan Somers <asomers@FreeBSD.org> | 2017-09-05 19:28:35 +0000 |
commit | 0a7b460e7017217496633dbe71c4119cf66782dd (patch) | |
tree | 3c1bc9d5591a6f616d417613c650bbf4076bf553 /cddl/compat/opensolaris/misc | |
parent | 1a11bb8f76916f91b15d957a90c7ee89a3c6a710 (diff) | |
download | src-0a7b460e7017217496633dbe71c4119cf66782dd.tar.gz src-0a7b460e7017217496633dbe71c4119cf66782dd.zip |
Honor all options of "zfs mount -o"
The existing code in zmount incorrectly parses the comma-delimited option
string. The result is that nmount only honors the last option. AFAICT the
parsing has been broken ever since ZFS's initial import in change 168404.
PR: 222078
Reviewed by: avg
MFC after: 3 weeks
Sponsored by: Spectra Logic Corp
Differential Revision: https://reviews.freebsd.org/D12232
Notes
Notes:
svn path=/head/; revision=323193
Diffstat (limited to 'cddl/compat/opensolaris/misc')
-rw-r--r-- | cddl/compat/opensolaris/misc/zmount.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/cddl/compat/opensolaris/misc/zmount.c b/cddl/compat/opensolaris/misc/zmount.c index d46b378ea92a..3c965b05d8b3 100644 --- a/cddl/compat/opensolaris/misc/zmount.c +++ b/cddl/compat/opensolaris/misc/zmount.c @@ -74,7 +74,7 @@ zmount(const char *spec, const char *dir, int mflag, char *fstype, char *dataptr, int datalen, char *optptr, int optlen) { struct iovec *iov; - char *optstr, *os, *p; + char *optstr, *os, *p, *tofree; int iovlen, rv; assert(spec != NULL); @@ -87,7 +87,7 @@ zmount(const char *spec, const char *dir, int mflag, char *fstype, assert(optptr != NULL); assert(optlen > 0); - optstr = strdup(optptr); + tofree = optstr = strdup(optptr); assert(optstr != NULL); iov = NULL; @@ -98,11 +98,9 @@ zmount(const char *spec, const char *dir, int mflag, char *fstype, build_iovec(&iov, &iovlen, "fspath", __DECONST(char *, dir), (size_t)-1); build_iovec(&iov, &iovlen, "from", __DECONST(char *, spec), (size_t)-1); - for (p = optstr; p != NULL; strsep(&p, ",/ ")) { - if (*p != '\0') - build_iovec(&iov, &iovlen, p, NULL, (size_t)-1); - } + while ((p = strsep(&optstr, ",/")) != NULL) + build_iovec(&iov, &iovlen, p, NULL, (size_t)-1); rv = nmount(iov, iovlen, 0); - free(optstr); + free(tofree); return (rv); } |