in src/fs.rs [392:440]
fn readdir(
&mut self,
_req: &Request,
inode: Inode,
_fh: u64,
offset: i64,
mut reply: ReplyDirectory,
) {
debug!("Trying to readdir on {} with offset {}", inode, offset);
if let Some(dir_ent) = self.directory_map.read().unwrap().get(&inode) {
debug!(
" directory {} has {} entries ({:#?})",
inode,
dir_ent.entries.len(),
dir_ent.entries
);
let mut absolute_index = offset + 1;
for (idx, ref child_pair) in dir_ent.entries.iter().skip(offset as usize).enumerate() {
debug!(
" looking at entry {}, got back pair {:#?}",
idx, child_pair
);
if let Some(child_ent) = self.inode_to_attr.read().unwrap().get(&child_pair.1) {
debug!(
" readdir for inode {}, adding '{}' as inode {}",
inode, child_pair.0, child_pair.1
);
if reply.add(
child_pair.1,
absolute_index as i64,
child_ent.kind,
&child_pair.0,
) {
// We've filled up our reply buffer. Exit.
break;
}
absolute_index += 1;
} else {
debug!(" readdir for inode {}, could not find inode {} which was given in dir_ent as '{}'", inode, child_pair.1, child_pair.0);
reply.error(ENOENT);
return;
}
}
reply.ok();
} else {
reply.error(ENOENT);
}
}