Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/list-mount.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

extern crate mnt;

use mnt::get_mount;
use mnt::mount::get_mount;
use std::env::args;
use std::path::{Path, PathBuf};

Expand Down
2 changes: 1 addition & 1 deletion examples/list-submounts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

extern crate mnt;

use mnt::{get_submounts, VecMountEntry};
use mnt::mount::{get_submounts, VecMountEntry};
use std::env::args;
use std::path::{Path, PathBuf};

Expand Down
44 changes: 34 additions & 10 deletions src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,21 +61,45 @@ pub enum LineError {
InvalidFreq(String),
MissingPassno,
InvalidPassno(String),
MissingId,
InvalidId(String),
MissingParentId,
InvalidParentId(String),
MissingMajMin,
InvalidMajMin(String),
MissingRoot,
InvalidRoot(String),
MissingOptional,
InvalidOptional(String),
MissingSuperOptions,
InvalidSuperOptions(String),
}

impl fmt::Display for LineError {
fn fmt(&self, out: &mut fmt::Formatter) -> fmt::Result {
let desc: Cow<_> = match *self {
LineError::MissingSpec => "Missing field #1 (spec)".into(),
LineError::MissingFile => "Missing field #2 (file)".into(),
LineError::InvalidFilePath(ref f) => format!("Bad field #2 (file) value (not absolute path): {}", f).into(),
LineError::InvalidFile(ref f) => format!("Bad field #2 (file) value: {}", f).into(),
LineError::MissingVfstype => "Missing field #3 (vfstype)".into(),
LineError::MissingMntops => "Missing field #4 (mntops)".into(),
LineError::MissingFreq => "Missing field #5 (freq)".into(),
LineError::InvalidFreq(ref f) => format!("Bad field #5 (dump) value: {}", f).into(),
LineError::MissingPassno => "Missing field #6 (passno)".into(),
LineError::InvalidPassno(ref f) => format!("Bad field #6 (passno) value: {}", f).into(),
LineError::MissingSpec => "Missing field: spec".into(),
LineError::MissingFile => "Missing field: file".into(),
LineError::InvalidFilePath(ref f) => format!("Bad 'file' field value (not absolute path): {}", f).into(),
LineError::InvalidFile(ref f) => format!("Bad 'file' field value: {}", f).into(),
LineError::MissingVfstype => "Missing field: vfstype".into(),
LineError::MissingMntops => "Missing field: mntops".into(),
LineError::MissingFreq => "Missing field: freq".into(),
LineError::InvalidFreq(ref f) => format!("Bad 'dump' field value: {}", f).into(),
LineError::MissingPassno => "Missing field: passno".into(),
LineError::InvalidPassno(ref f) => format!("Bad 'passno' field value: {}", f).into(),
LineError::MissingId => "Missing field: id".into(),
LineError::InvalidId(ref f) => format!("Bad 'id' field value: {}", f).into(),
LineError::MissingParentId => "Missing field: parent id".into(),
LineError::InvalidParentId(ref f) => format!("Bad 'parent id' field value: {}", f).into(),
LineError::MissingMajMin => "Missing field: maj:min".into(),
LineError::InvalidMajMin(ref f) => format!("Bad 'maj:min' field value: {}", f).into(),
LineError::MissingRoot => "Missing field: root".into(),
LineError::InvalidRoot(ref f) => format!("Bad 'root' field value: {}", f).into(),
LineError::MissingOptional => "Missing field: optional".into(),
LineError::InvalidOptional(ref f) => format!("Bad 'optional' field value: {}", f).into(),
LineError::MissingSuperOptions => "Missing field: superoptions".into(),
LineError::InvalidSuperOptions(ref f) => format!("Bad 'superoptions' field value: {}", f).into(),
};
write!(out, "Line parsing: {}", desc)
}
Expand Down
43 changes: 41 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,46 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.

pub use error::*;
pub use parse::*;

mod error;
mod parse;
pub mod mount;
pub mod mountinfo;

use std::str::FromStr;

#[derive(Clone, PartialEq, Eq, Debug)]
pub enum MntOps {
Atime(bool),
DirAtime(bool),
RelAtime(bool),
Dev(bool),
Exec(bool),
Suid(bool),
Write(bool),
Extra(String),
}

impl FromStr for MntOps {
type Err = LineError;

fn from_str(token: &str) -> Result<MntOps, LineError> {
Ok(match token {
"atime" => MntOps::Atime(true),
"noatime" => MntOps::Atime(false),
"diratime" => MntOps::DirAtime(true),
"nodiratime" => MntOps::DirAtime(false),
"relatime" => MntOps::RelAtime(true),
"norelatime" => MntOps::RelAtime(false),
"dev" => MntOps::Dev(true),
"nodev" => MntOps::Dev(false),
"exec" => MntOps::Exec(true),
"noexec" => MntOps::Exec(false),
"suid" => MntOps::Suid(true),
"nosuid" => MntOps::Suid(false),
"rw" => MntOps::Write(true),
"ro" => MntOps::Write(false),
// TODO: Replace with &str
extra => MntOps::Extra(extra.to_string()),
})
}
}
38 changes: 1 addition & 37 deletions src/parse.rs → src/mount.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
extern crate libc;

use error::*;
use MntOps;
use self::libc::c_int;
use std::cmp::Ordering;
use std::convert::{AsRef, From};
Expand All @@ -35,43 +36,6 @@ pub enum DumpField {

pub type PassField = Option<c_int>;

#[derive(Clone, PartialEq, Eq, Debug)]
pub enum MntOps {
Atime(bool),
DirAtime(bool),
RelAtime(bool),
Dev(bool),
Exec(bool),
Suid(bool),
Write(bool),
Extra(String),
}

impl FromStr for MntOps {
type Err = LineError;

fn from_str(token: &str) -> Result<MntOps, LineError> {
Ok(match token {
"atime" => MntOps::Atime(true),
"noatime" => MntOps::Atime(false),
"diratime" => MntOps::DirAtime(true),
"nodiratime" => MntOps::DirAtime(false),
"relatime" => MntOps::RelAtime(true),
"norelatime" => MntOps::RelAtime(false),
"dev" => MntOps::Dev(true),
"nodev" => MntOps::Dev(false),
"exec" => MntOps::Exec(true),
"noexec" => MntOps::Exec(false),
"suid" => MntOps::Suid(true),
"nosuid" => MntOps::Suid(false),
"rw" => MntOps::Write(true),
"ro" => MntOps::Write(false),
// TODO: Replace with &str
extra => MntOps::Extra(extra.to_string()),
})
}
}

#[derive(Clone, Debug)]
pub enum MountParam<'a> {
Spec(&'a str),
Expand Down
Loading