From 92d38e32c13f44d000ac687a38315f36343d7df9 Mon Sep 17 00:00:00 2001
From: Ian Douglas Scott <ian@iandouglasscott.com>
Date: Tue, 25 Jul 2017 08:59:35 -0700
Subject: [PATCH] fuse: Fix readdir when directory does not fit in buffer

---
 mount/fuse.rs | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/mount/fuse.rs b/mount/fuse.rs
index 69cf53a..03e7405 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();
             },
-- 
GitLab