|
@@ -3,62 +3,23 @@
|
|
|
package mount
|
|
|
|
|
|
import (
|
|
|
- "strings"
|
|
|
"syscall"
|
|
|
)
|
|
|
|
|
|
-// Parse fstab type mount options into mount() flags
|
|
|
-// and device specific data
|
|
|
-func parseOptions(options string) (int, string) {
|
|
|
- var (
|
|
|
- flag int
|
|
|
- data []string
|
|
|
- )
|
|
|
-
|
|
|
- flags := map[string]struct {
|
|
|
- clear bool
|
|
|
- flag int
|
|
|
- }{
|
|
|
- "defaults": {false, 0},
|
|
|
- "ro": {false, syscall.MS_RDONLY},
|
|
|
- "rw": {true, syscall.MS_RDONLY},
|
|
|
- "suid": {true, syscall.MS_NOSUID},
|
|
|
- "nosuid": {false, syscall.MS_NOSUID},
|
|
|
- "dev": {true, syscall.MS_NODEV},
|
|
|
- "nodev": {false, syscall.MS_NODEV},
|
|
|
- "exec": {true, syscall.MS_NOEXEC},
|
|
|
- "noexec": {false, syscall.MS_NOEXEC},
|
|
|
- "sync": {false, syscall.MS_SYNCHRONOUS},
|
|
|
- "async": {true, syscall.MS_SYNCHRONOUS},
|
|
|
- "dirsync": {false, syscall.MS_DIRSYNC},
|
|
|
- "remount": {false, syscall.MS_REMOUNT},
|
|
|
- "mand": {false, syscall.MS_MANDLOCK},
|
|
|
- "nomand": {true, syscall.MS_MANDLOCK},
|
|
|
- "atime": {true, syscall.MS_NOATIME},
|
|
|
- "noatime": {false, syscall.MS_NOATIME},
|
|
|
- "diratime": {true, syscall.MS_NODIRATIME},
|
|
|
- "nodiratime": {false, syscall.MS_NODIRATIME},
|
|
|
- "bind": {false, syscall.MS_BIND},
|
|
|
- "rbind": {false, syscall.MS_BIND | syscall.MS_REC},
|
|
|
- "private": {false, syscall.MS_PRIVATE},
|
|
|
- "relatime": {false, syscall.MS_RELATIME},
|
|
|
- "norelatime": {true, syscall.MS_RELATIME},
|
|
|
- "strictatime": {false, syscall.MS_STRICTATIME},
|
|
|
- "nostrictatime": {true, syscall.MS_STRICTATIME},
|
|
|
- }
|
|
|
-
|
|
|
- for _, o := range strings.Split(options, ",") {
|
|
|
- // If the option does not exist in the flags table then it is a
|
|
|
- // data value for a specific fs type
|
|
|
- if f, exists := flags[o]; exists {
|
|
|
- if f.clear {
|
|
|
- flag &= ^f.flag
|
|
|
- } else {
|
|
|
- flag |= f.flag
|
|
|
- }
|
|
|
- } else {
|
|
|
- data = append(data, o)
|
|
|
- }
|
|
|
- }
|
|
|
- return flag, strings.Join(data, ",")
|
|
|
-}
|
|
|
+const (
|
|
|
+ RDONLY = syscall.MS_RDONLY
|
|
|
+ NOSUID = syscall.MS_NOSUID
|
|
|
+ NODEV = syscall.MS_NODEV
|
|
|
+ NOEXEC = syscall.MS_NOEXEC
|
|
|
+ SYNCHRONOUS = syscall.MS_SYNCHRONOUS
|
|
|
+ DIRSYNC = syscall.MS_DIRSYNC
|
|
|
+ REMOUNT = syscall.MS_REMOUNT
|
|
|
+ MANDLOCK = syscall.MS_MANDLOCK
|
|
|
+ NOATIME = syscall.MS_NOATIME
|
|
|
+ NODIRATIME = syscall.MS_NODIRATIME
|
|
|
+ BIND = syscall.MS_BIND
|
|
|
+ RBIND = syscall.MS_BIND | syscall.MS_REC
|
|
|
+ PRIVATE = syscall.MS_PRIVATE
|
|
|
+ RELATIME = syscall.MS_RELATIME
|
|
|
+ STRICTATIME = syscall.MS_STRICTATIME
|
|
|
+)
|