Skip to content

Commit 04dbde1

Browse files
committed
Move mount option methods to reuse them
1 parent 16e20c1 commit 04dbde1

2 files changed

Lines changed: 125 additions & 120 deletions

File tree

src/mnt/fuse_pure.rs

Lines changed: 3 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ use crate::SessionACL;
4242
use crate::dev_fuse::DevFuse;
4343
use crate::mnt::is_mounted;
4444
use crate::mnt::mount_options::MountOption;
45+
use crate::mnt::mount_options::MountOptionGroup;
46+
use crate::mnt::mount_options::option_group;
47+
use crate::mnt::mount_options::option_to_flag;
4548
use crate::mnt::mount_options::option_to_string;
4649

4750
const FUSERMOUNT_BIN: &str = "fusermount";
@@ -503,123 +506,3 @@ fn fuse_mount_sys(
503506
) -> Result<Option<DevFuse>, Error> {
504507
Ok(None)
505508
}
506-
507-
#[cfg(any(target_os = "linux", target_os = "macos"))]
508-
#[derive(PartialEq)]
509-
pub(crate) enum MountOptionGroup {
510-
KernelOption,
511-
KernelFlag,
512-
Fusermount,
513-
}
514-
515-
#[cfg(any(target_os = "linux", target_os = "macos"))]
516-
pub(crate) fn option_group(option: &MountOption) -> MountOptionGroup {
517-
match option {
518-
MountOption::FSName(_) => MountOptionGroup::Fusermount,
519-
MountOption::Subtype(_) => MountOptionGroup::Fusermount,
520-
MountOption::CUSTOM(_) => MountOptionGroup::KernelOption,
521-
MountOption::AutoUnmount => MountOptionGroup::Fusermount,
522-
MountOption::Dev => MountOptionGroup::KernelFlag,
523-
MountOption::NoDev => MountOptionGroup::KernelFlag,
524-
MountOption::Suid => MountOptionGroup::KernelFlag,
525-
MountOption::NoSuid => MountOptionGroup::KernelFlag,
526-
MountOption::RO => MountOptionGroup::KernelFlag,
527-
MountOption::RW => MountOptionGroup::KernelFlag,
528-
MountOption::Exec => MountOptionGroup::KernelFlag,
529-
MountOption::NoExec => MountOptionGroup::KernelFlag,
530-
MountOption::Atime => MountOptionGroup::KernelFlag,
531-
MountOption::NoAtime => MountOptionGroup::KernelFlag,
532-
MountOption::DirSync => MountOptionGroup::KernelFlag,
533-
MountOption::Sync => MountOptionGroup::KernelFlag,
534-
MountOption::Async => MountOptionGroup::KernelFlag,
535-
MountOption::DefaultPermissions => MountOptionGroup::KernelOption,
536-
}
537-
}
538-
539-
#[cfg(target_os = "linux")]
540-
pub(crate) fn option_to_flag(option: &MountOption) -> io::Result<nix::mount::MsFlags> {
541-
match option {
542-
MountOption::Dev => Ok(nix::mount::MsFlags::empty()), // There is no option for dev. It's the absence of NoDev
543-
MountOption::NoDev => Ok(nix::mount::MsFlags::MS_NODEV),
544-
MountOption::Suid => Ok(nix::mount::MsFlags::empty()),
545-
MountOption::NoSuid => Ok(nix::mount::MsFlags::MS_NOSUID),
546-
MountOption::RW => Ok(nix::mount::MsFlags::empty()),
547-
MountOption::RO => Ok(nix::mount::MsFlags::MS_RDONLY),
548-
MountOption::Exec => Ok(nix::mount::MsFlags::empty()),
549-
MountOption::NoExec => Ok(nix::mount::MsFlags::MS_NOEXEC),
550-
MountOption::Atime => Ok(nix::mount::MsFlags::empty()),
551-
MountOption::NoAtime => Ok(nix::mount::MsFlags::MS_NOATIME),
552-
MountOption::Async => Ok(nix::mount::MsFlags::empty()),
553-
MountOption::Sync => Ok(nix::mount::MsFlags::MS_SYNCHRONOUS),
554-
MountOption::DirSync => Ok(nix::mount::MsFlags::MS_DIRSYNC),
555-
option => Err(io::Error::new(
556-
io::ErrorKind::InvalidInput,
557-
format!("Invalid mount option for flag conversion: {option:?}"),
558-
)),
559-
}
560-
}
561-
562-
#[cfg(target_os = "macos")]
563-
pub(crate) fn option_to_flag(option: &MountOption) -> io::Result<nix::mount::MntFlags> {
564-
match option {
565-
MountOption::Dev => Ok(nix::mount::MntFlags::empty()), // There is no option for dev. It's the absence of NoDev
566-
MountOption::NoDev => Ok(nix::mount::MntFlags::MNT_NODEV),
567-
MountOption::Suid => Ok(nix::mount::MntFlags::empty()),
568-
MountOption::NoSuid => Ok(nix::mount::MntFlags::MNT_NOSUID),
569-
MountOption::RW => Ok(nix::mount::MntFlags::empty()),
570-
MountOption::RO => Ok(nix::mount::MntFlags::MNT_RDONLY),
571-
MountOption::Exec => Ok(nix::mount::MntFlags::empty()),
572-
MountOption::NoExec => Ok(nix::mount::MntFlags::MNT_NOEXEC),
573-
MountOption::Atime => Ok(nix::mount::MntFlags::empty()),
574-
MountOption::NoAtime => Ok(nix::mount::MntFlags::MNT_NOATIME),
575-
MountOption::Async => Ok(nix::mount::MntFlags::empty()),
576-
MountOption::Sync => Ok(nix::mount::MntFlags::MNT_SYNCHRONOUS),
577-
option => Err(io::Error::new(
578-
io::ErrorKind::InvalidInput,
579-
format!("Invalid mount option for flag conversion: {option:?}"),
580-
)),
581-
}
582-
}
583-
584-
#[cfg_attr(
585-
any(
586-
target_os = "freebsd",
587-
target_os = "dragonfly",
588-
target_os = "openbsd",
589-
target_os = "netbsd"
590-
),
591-
allow(dead_code)
592-
)]
593-
#[cfg(any(
594-
target_os = "freebsd",
595-
target_os = "dragonfly",
596-
target_os = "openbsd",
597-
target_os = "netbsd"
598-
))]
599-
pub(crate) fn option_to_flag(option: &MountOption) -> io::Result<nix::mount::MntFlags> {
600-
match option {
601-
MountOption::Dev => Ok(nix::mount::MntFlags::empty()),
602-
#[cfg(target_os = "freebsd")]
603-
MountOption::NoDev => Err(io::Error::new(
604-
io::ErrorKind::Unsupported,
605-
"NoDev option is not supported on FreeBSD",
606-
)),
607-
#[cfg(not(target_os = "freebsd"))]
608-
MountOption::NoDev => Ok(nix::mount::MntFlags::MNT_NODEV),
609-
MountOption::Suid => Ok(nix::mount::MntFlags::empty()),
610-
MountOption::NoSuid => Ok(nix::mount::MntFlags::MNT_NOSUID),
611-
MountOption::RW => Ok(nix::mount::MntFlags::empty()),
612-
MountOption::RO => Ok(nix::mount::MntFlags::MNT_RDONLY),
613-
MountOption::Exec => Ok(nix::mount::MntFlags::empty()),
614-
MountOption::NoExec => Ok(nix::mount::MntFlags::MNT_NOEXEC),
615-
MountOption::Atime => Ok(nix::mount::MntFlags::empty()),
616-
MountOption::NoAtime => Ok(nix::mount::MntFlags::MNT_NOATIME),
617-
MountOption::Async => Ok(nix::mount::MntFlags::MNT_ASYNC),
618-
MountOption::Sync => Ok(nix::mount::MntFlags::MNT_SYNCHRONOUS),
619-
MountOption::DirSync => Ok(nix::mount::MntFlags::MNT_SYNCHRONOUS),
620-
option => Err(io::Error::new(
621-
io::ErrorKind::InvalidInput,
622-
format!("Invalid mount option for flag conversion: {option:?}"),
623-
)),
624-
}
625-
}

src/mnt/mount_options.rs

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,14 @@ impl MountOption {
9898
}
9999
}
100100

101+
#[allow(dead_code)]
102+
#[derive(PartialEq)]
103+
pub(crate) enum MountOptionGroup {
104+
KernelOption,
105+
KernelFlag,
106+
Fusermount,
107+
}
108+
101109
pub(crate) fn check_option_conflicts(options: &Config) -> Result<(), io::Error> {
102110
let mut options_set = HashSet::new();
103111
options_set.extend(options.mount_options.iter().cloned());
@@ -165,6 +173,120 @@ pub(crate) fn option_to_string(option: &MountOption) -> String {
165173
}
166174
}
167175

176+
#[allow(dead_code)]
177+
pub(crate) fn option_group(option: &MountOption) -> MountOptionGroup {
178+
match option {
179+
MountOption::FSName(_) => MountOptionGroup::Fusermount,
180+
MountOption::Subtype(_) => MountOptionGroup::Fusermount,
181+
MountOption::CUSTOM(_) => MountOptionGroup::KernelOption,
182+
MountOption::AutoUnmount => MountOptionGroup::Fusermount,
183+
MountOption::Dev => MountOptionGroup::KernelFlag,
184+
MountOption::NoDev => MountOptionGroup::KernelFlag,
185+
MountOption::Suid => MountOptionGroup::KernelFlag,
186+
MountOption::NoSuid => MountOptionGroup::KernelFlag,
187+
MountOption::RO => MountOptionGroup::KernelFlag,
188+
MountOption::RW => MountOptionGroup::KernelFlag,
189+
MountOption::Exec => MountOptionGroup::KernelFlag,
190+
MountOption::NoExec => MountOptionGroup::KernelFlag,
191+
MountOption::Atime => MountOptionGroup::KernelFlag,
192+
MountOption::NoAtime => MountOptionGroup::KernelFlag,
193+
MountOption::DirSync => MountOptionGroup::KernelFlag,
194+
MountOption::Sync => MountOptionGroup::KernelFlag,
195+
MountOption::Async => MountOptionGroup::KernelFlag,
196+
MountOption::DefaultPermissions => MountOptionGroup::KernelOption,
197+
}
198+
}
199+
200+
#[cfg(target_os = "linux")]
201+
#[allow(dead_code)]
202+
pub(crate) fn option_to_flag(option: &MountOption) -> io::Result<nix::mount::MsFlags> {
203+
match option {
204+
MountOption::Dev => Ok(nix::mount::MsFlags::empty()), // There is no option for dev. It's the absence of NoDev
205+
MountOption::NoDev => Ok(nix::mount::MsFlags::MS_NODEV),
206+
MountOption::Suid => Ok(nix::mount::MsFlags::empty()),
207+
MountOption::NoSuid => Ok(nix::mount::MsFlags::MS_NOSUID),
208+
MountOption::RW => Ok(nix::mount::MsFlags::empty()),
209+
MountOption::RO => Ok(nix::mount::MsFlags::MS_RDONLY),
210+
MountOption::Exec => Ok(nix::mount::MsFlags::empty()),
211+
MountOption::NoExec => Ok(nix::mount::MsFlags::MS_NOEXEC),
212+
MountOption::Atime => Ok(nix::mount::MsFlags::empty()),
213+
MountOption::NoAtime => Ok(nix::mount::MsFlags::MS_NOATIME),
214+
MountOption::Async => Ok(nix::mount::MsFlags::empty()),
215+
MountOption::Sync => Ok(nix::mount::MsFlags::MS_SYNCHRONOUS),
216+
MountOption::DirSync => Ok(nix::mount::MsFlags::MS_DIRSYNC),
217+
option => Err(io::Error::new(
218+
io::ErrorKind::InvalidInput,
219+
format!("Invalid mount option for flag conversion: {option:?}"),
220+
)),
221+
}
222+
}
223+
224+
#[cfg(target_os = "macos")]
225+
#[allow(dead_code)]
226+
pub(crate) fn option_to_flag(option: &MountOption) -> io::Result<nix::mount::MntFlags> {
227+
match option {
228+
MountOption::Dev => Ok(nix::mount::MntFlags::empty()), // There is no option for dev. It's the absence of NoDev
229+
MountOption::NoDev => Ok(nix::mount::MntFlags::MNT_NODEV),
230+
MountOption::Suid => Ok(nix::mount::MntFlags::empty()),
231+
MountOption::NoSuid => Ok(nix::mount::MntFlags::MNT_NOSUID),
232+
MountOption::RW => Ok(nix::mount::MntFlags::empty()),
233+
MountOption::RO => Ok(nix::mount::MntFlags::MNT_RDONLY),
234+
MountOption::Exec => Ok(nix::mount::MntFlags::empty()),
235+
MountOption::NoExec => Ok(nix::mount::MntFlags::MNT_NOEXEC),
236+
MountOption::Atime => Ok(nix::mount::MntFlags::empty()),
237+
MountOption::NoAtime => Ok(nix::mount::MntFlags::MNT_NOATIME),
238+
MountOption::Async => Ok(nix::mount::MntFlags::empty()),
239+
MountOption::Sync => Ok(nix::mount::MntFlags::MNT_SYNCHRONOUS),
240+
option => Err(io::Error::new(
241+
io::ErrorKind::InvalidInput,
242+
format!("Invalid mount option for flag conversion: {option:?}"),
243+
)),
244+
}
245+
}
246+
247+
#[cfg_attr(
248+
any(
249+
target_os = "freebsd",
250+
target_os = "dragonfly",
251+
target_os = "openbsd",
252+
target_os = "netbsd"
253+
),
254+
allow(dead_code)
255+
)]
256+
#[cfg(any(
257+
target_os = "freebsd",
258+
target_os = "dragonfly",
259+
target_os = "openbsd",
260+
target_os = "netbsd"
261+
))]
262+
pub(crate) fn option_to_flag(option: &MountOption) -> io::Result<nix::mount::MntFlags> {
263+
match option {
264+
MountOption::Dev => Ok(nix::mount::MntFlags::empty()),
265+
#[cfg(target_os = "freebsd")]
266+
MountOption::NoDev => Err(io::Error::new(
267+
io::ErrorKind::Unsupported,
268+
"NoDev option is not supported on FreeBSD",
269+
)),
270+
#[cfg(not(target_os = "freebsd"))]
271+
MountOption::NoDev => Ok(nix::mount::MntFlags::MNT_NODEV),
272+
MountOption::Suid => Ok(nix::mount::MntFlags::empty()),
273+
MountOption::NoSuid => Ok(nix::mount::MntFlags::MNT_NOSUID),
274+
MountOption::RW => Ok(nix::mount::MntFlags::empty()),
275+
MountOption::RO => Ok(nix::mount::MntFlags::MNT_RDONLY),
276+
MountOption::Exec => Ok(nix::mount::MntFlags::empty()),
277+
MountOption::NoExec => Ok(nix::mount::MntFlags::MNT_NOEXEC),
278+
MountOption::Atime => Ok(nix::mount::MntFlags::empty()),
279+
MountOption::NoAtime => Ok(nix::mount::MntFlags::MNT_NOATIME),
280+
MountOption::Async => Ok(nix::mount::MntFlags::MNT_ASYNC),
281+
MountOption::Sync => Ok(nix::mount::MntFlags::MNT_SYNCHRONOUS),
282+
MountOption::DirSync => Ok(nix::mount::MntFlags::MNT_SYNCHRONOUS),
283+
option => Err(io::Error::new(
284+
io::ErrorKind::InvalidInput,
285+
format!("Invalid mount option for flag conversion: {option:?}"),
286+
)),
287+
}
288+
}
289+
168290
#[cfg(test)]
169291
mod test {
170292
use crate::mnt::mount_options::*;

0 commit comments

Comments
 (0)