about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/redox/ext/fs.rs2
-rw-r--r--src/libstd/sys/redox/fs.rs9
2 files changed, 7 insertions, 4 deletions
diff --git a/src/libstd/sys/redox/ext/fs.rs b/src/libstd/sys/redox/ext/fs.rs
index 45ad7c092de..2914fafa94c 100644
--- a/src/libstd/sys/redox/ext/fs.rs
+++ b/src/libstd/sys/redox/ext/fs.rs
@@ -216,7 +216,7 @@ impl MetadataExt for fs::Metadata {
     }
 }
 
-/*
+/* TODO
 /// Add special unix types (block/char device, fifo and socket)
 #[stable(feature = "file_type_ext", since = "1.5.0")]
 pub trait FileTypeExt {
diff --git a/src/libstd/sys/redox/fs.rs b/src/libstd/sys/redox/fs.rs
index 1a96ac2f2ea..df2926565f7 100644
--- a/src/libstd/sys/redox/fs.rs
+++ b/src/libstd/sys/redox/fs.rs
@@ -386,9 +386,12 @@ pub fn rename(_old: &Path, _new: &Path) -> io::Result<()> {
     unimplemented!();
 }
 
-pub fn set_perm(_p: &Path, _perm: FilePermissions) -> io::Result<()> {
-    ::sys_common::util::dumb_print(format_args!("Set perm\n"));
-    unimplemented!();
+pub fn set_perm(p: &Path, perm: FilePermissions) -> io::Result<()> {
+    let mut options = OpenOptions::new();
+    options.read(true);
+    let file = File::open(p, &options)?;
+    cvt(libc::fcntl(file.0.raw(), libc::F_SETMODE, perm.mode as usize))?;
+    Ok(())
 }
 
 pub fn rmdir(p: &Path) -> io::Result<()> {