diff --git a/mount/fuse.rs b/mount/fuse.rs index 69cf53a1dca948b39dd59d616827438e07034510..f66b242d16a2f35602428b031c440a7adb012f4e 100644 --- a/mount/fuse.rs +++ b/mount/fuse.rs @@ -136,7 +136,7 @@ impl Filesystem for Fuse { if let Some(mtime) = mtime { match self.fs.node(block) { - Ok(mut node) => if mtime.sec as u64 > node.1.mtime || (mtime.sec as u64 == node.1.mtime && mtime.nsec as u32 > node.1.mtime_nsec) { + Ok(mut node) => { node.1.mtime = mtime.sec as u64; node.1.mtime_nsec = mtime.nsec as u32; if let Err(err) = self.fs.write_at(node.0, &node.1) { @@ -197,20 +197,32 @@ impl Filesystem for Fuse { let mut children = Vec::new(); match self.fs.child_nodes(&mut children, parent_block) { Ok(()) => { + let mut i; + let skip; if offset == 0 { - let mut i = 0; + skip = 0; + i = 0; reply.add(parent_block - self.fs.header.0, i, FileType::Directory, "."); i += 1; reply.add(parent_block - self.fs.header.0, i, FileType::Directory, ".."); i += 1; - for child in children.iter() { - reply.add(child.0 - self.fs.header.0, i, if child.1.is_dir() { - FileType::Directory - } else { - FileType::RegularFile - }, child.1.name().unwrap()); - i += 1; + } else { + i = offset + 1; + skip = offset as usize - 1; + } + + for child in children.iter().skip(skip) { + let full = reply.add(child.0 - self.fs.header.0, i, if child.1.is_dir() { + FileType::Directory + } else { + FileType::RegularFile + }, child.1.name().unwrap()); + + if full { + break; } + + i += 1; } reply.ok(); },