diff options
| author | Jeremy Soller <jackpot51@gmail.com> | 2016-11-25 18:23:19 -0700 |
|---|---|---|
| committer | Jeremy Soller <jackpot51@gmail.com> | 2016-11-25 18:23:19 -0700 |
| commit | 3a1bb2ba26a85bbea4c9be813a9a13d48ab448ac (patch) | |
| tree | 963d3eba52845d2e604d629d927e9db8e0bf919f /src/libstd/sys | |
| parent | 6733074c847767fd3e0425fcefb73226bde1f6a1 (diff) | |
| download | rust-3a1bb2ba26a85bbea4c9be813a9a13d48ab448ac.tar.gz rust-3a1bb2ba26a85bbea4c9be813a9a13d48ab448ac.zip | |
Use O_DIRECTORY
Diffstat (limited to 'src/libstd/sys')
| -rw-r--r-- | src/libstd/sys/redox/fs.rs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/libstd/sys/redox/fs.rs b/src/libstd/sys/redox/fs.rs index 2b0ab361492..0e51da711c9 100644 --- a/src/libstd/sys/redox/fs.rs +++ b/src/libstd/sys/redox/fs.rs @@ -339,7 +339,8 @@ impl DirBuilder { } pub fn mkdir(&self, p: &Path) -> io::Result<()> { - cvt(libc::mkdir(p.to_str().unwrap(), self.mode))?; + let fd = cvt(libc::open(p.to_str().unwrap(), libc::O_CREAT | libc::O_DIRECTORY | libc::O_EXCL | (self.mode as usize & 0o777)))?; + let _ = libc::close(fd); Ok(()) } @@ -372,11 +373,12 @@ impl fmt::Debug for File { pub fn readdir(p: &Path) -> io::Result<ReadDir> { let root = Arc::new(p.to_path_buf()); - let mut options = OpenOptions::new(); - options.read(true); - let fd = File::open(p, &options)?; + + let fd = cvt(open(p.to_str().unwrap(), libc::O_CLOEXEC | libc::O_RDONLY | libc::O_DIRECTORY))?; + let file = FileDesc::new(fd); let mut data = Vec::new(); - fd.read_to_end(&mut data)?; + file.read_to_end(&mut data)?; + Ok(ReadDir { data: data, i: 0, root: root }) } @@ -437,10 +439,11 @@ pub fn link(_src: &Path, _dst: &Path) -> io::Result<()> { pub fn stat(p: &Path) -> io::Result<FileAttr> { let mut stat: stat = stat::default(); - let mut options = OpenOptions::new(); - options.read(true); - let file = File::open(p, &options)?; - cvt(fstat(file.0.raw(), &mut stat))?; + + let fd = cvt(open(p.to_str().unwrap(), libc::O_CLOEXEC | libc::O_STAT))?; + cvt(fstat(fd, &mut stat))?; + let _ = libc::close(fd); + Ok(FileAttr { stat: stat }) } |
