about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorJeremy Soller <jackpot51@gmail.com>2016-11-10 19:58:19 -0700
committerJeremy Soller <jackpot51@gmail.com>2016-11-10 19:58:19 -0700
commit79a8c272fb8ad09600ef58ff223c73eb44343040 (patch)
tree0820d60e0912ec28b8a70e771efd3d3e14d226fc /src/libstd/sys
parenta90850995f9f177c910ba548f1a6312353673926 (diff)
downloadrust-79a8c272fb8ad09600ef58ff223c73eb44343040.tar.gz
rust-79a8c272fb8ad09600ef58ff223c73eb44343040.zip
Fix readdir
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/redox/fs.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/libstd/sys/redox/fs.rs b/src/libstd/sys/redox/fs.rs
index 3779c4c6677..1a96ac2f2ea 100644
--- a/src/libstd/sys/redox/fs.rs
+++ b/src/libstd/sys/redox/fs.rs
@@ -146,16 +146,17 @@ impl Iterator for ReadDir {
     fn next(&mut self) -> Option<io::Result<DirEntry>> {
         loop {
             let start = self.i;
-            while self.i < self.data.len() {
-                let i = self.i;
+            let mut i = self.i;
+            while i < self.data.len() {
                 self.i += 1;
                 if self.data[i] == b'\n' {
                     break;
                 }
+                i += 1;
             }
             if start < self.i {
                 let ret = DirEntry {
-                    name: self.data[start .. self.i].to_owned().into_boxed_slice(),
+                    name: self.data[start .. i].to_owned().into_boxed_slice(),
                     root: self.root.clone()
                 };
                 if ret.name_bytes() != b"." && ret.name_bytes() != b".." {
@@ -182,7 +183,7 @@ impl DirEntry {
     }
 
     pub fn file_type(&self) -> io::Result<FileType> {
-        stat(&self.path()).map(|m| m.file_type())
+        lstat(&self.path()).map(|m| m.file_type())
     }
 
     fn name_bytes(&self) -> &[u8] {
@@ -367,7 +368,8 @@ impl fmt::Debug for File {
 
 pub fn readdir(p: &Path) -> io::Result<ReadDir> {
     let root = Arc::new(p.to_path_buf());
-    let options = OpenOptions::new();
+    let mut options = OpenOptions::new();
+    options.read(true);
     let fd = File::open(p, &options)?;
     let mut data = Vec::new();
     fd.read_to_end(&mut data)?;
@@ -431,7 +433,8 @@ pub fn link(_src: &Path, _dst: &Path) -> io::Result<()> {
 
 pub fn stat(p: &Path) -> io::Result<FileAttr> {
     let mut stat: stat = stat::default();
-    let options = OpenOptions::new();
+    let mut options = OpenOptions::new();
+    options.read(true);
     let file = File::open(p, &options)?;
     cvt(fstat(file.0.raw(), &mut stat))?;
     Ok(FileAttr { stat: stat })
@@ -442,7 +445,8 @@ pub fn lstat(p: &Path) -> io::Result<FileAttr> {
 }
 
 pub fn canonicalize(p: &Path) -> io::Result<PathBuf> {
-    let options = OpenOptions::new();
+    let mut options = OpenOptions::new();
+    options.read(true);
     let file = File::open(p, &options)?;
     file.path()
 }