diff options
author | gVisor bot <gvisor-bot@google.com> | 2019-11-19 00:30:13 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-11-19 00:30:13 +0000 |
commit | a98f44c8726eeec97e8b1e43978dd40d04d0b705 (patch) | |
tree | 1b5df7276711e391c2b0cbbf11e556fe6e75399a /pkg | |
parent | 34cd8270b2bb1e8381a78dfe28a6e05a6a6c4229 (diff) | |
parent | ef6f93625457c166628fc9de57c15d986ae83159 (diff) |
Merge release-20191114.0-15-gef6f936 (automated)
Diffstat (limited to 'pkg')
-rwxr-xr-x | pkg/sentry/vfs/filesystem_impl_util.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/pkg/sentry/vfs/filesystem_impl_util.go b/pkg/sentry/vfs/filesystem_impl_util.go new file mode 100755 index 000000000..465e610e0 --- /dev/null +++ b/pkg/sentry/vfs/filesystem_impl_util.go @@ -0,0 +1,43 @@ +// Copyright 2019 The gVisor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vfs + +import ( + "strings" +) + +// GenericParseMountOptions parses a comma-separated list of options of the +// form "key" or "key=value", where neither key nor value contain commas, and +// returns it as a map. If str contains duplicate keys, then the last value +// wins. For example: +// +// str = "key0=value0,key1,key2=value2,key0=value3" -> map{'key0':'value3','key1':'','key2':'value2'} +// +// GenericParseMountOptions is not appropriate if values may contain commas, +// e.g. in the case of the mpol mount option for tmpfs(5). +func GenericParseMountOptions(str string) map[string]string { + m := make(map[string]string) + for _, opt := range strings.Split(str, ",") { + if len(opt) > 0 { + res := strings.SplitN(opt, "=", 2) + if len(res) == 2 { + m[res[0]] = res[1] + } else { + m[opt] = "" + } + } + } + return m +} |