diff --git a/mount/fuse.rs b/mount/fuse.rs index 69cf53a1dca948b39dd59d616827438e07034510..03e74059f9ade78a16431f05e3dd2ad393d0a1b6 100644 --- a/mount/fuse.rs +++ b/mount/fuse.rs @@ -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(); },