diff --git a/src/libstd/io/fs.rs b/src/libstd/io/fs.rs index 725d3b10def85..3d6bb96063ee1 100644 --- a/src/libstd/io/fs.rs +++ b/src/libstd/io/fs.rs @@ -1274,7 +1274,7 @@ mod test { error!(result, "couldn't recursively mkdir"); error!(result, "couldn't create directory"); - error!(result, "mode=FilePermission { bits: 448 }"); + error!(result, "mode=0700"); error!(result, format!("path={}", file.display())); }) diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index 905012b7bf33a..c7996c549f474 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -1797,7 +1797,6 @@ pub struct UnstableFileStat { bitflags!( #[doc="A set of permissions for a file or directory is represented by a set of flags which are or'd together."] - #[deriving(Show)] flags FilePermission: u32 { static UserRead = 0o400, static UserWrite = 0o200, @@ -1836,6 +1835,14 @@ impl Default for FilePermission { fn default() -> FilePermission { FilePermission::empty() } } +impl fmt::Show for FilePermission { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.fill = '0'; + formatter.width = Some(4); + (&self.bits as &fmt::Octal).fmt(formatter) + } +} + #[cfg(test)] mod tests { use super::{IoResult, Reader, MemReader, NoProgress, InvalidInput}; @@ -1937,4 +1944,18 @@ mod tests { let mut r = MemReader::new(Vec::from_slice(b"hello, world!")); assert_eq!(r.push_at_least(5, 1, &mut buf).unwrap_err().kind, InvalidInput); } + + #[test] + fn test_show() { + use super::*; + + assert_eq!(format!("{}", UserRead), "0400".to_string()); + assert_eq!(format!("{}", UserFile), "0644".to_string()); + assert_eq!(format!("{}", UserExec), "0755".to_string()); + assert_eq!(format!("{}", UserRWX), "0700".to_string()); + assert_eq!(format!("{}", GroupRWX), "0070".to_string()); + assert_eq!(format!("{}", OtherRWX), "0007".to_string()); + assert_eq!(format!("{}", AllPermissions), "0777".to_string()); + assert_eq!(format!("{}", UserRead | UserWrite | OtherWrite), "0602".to_string()); + } }