12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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},
- "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, ",")
- }
|