<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
From: Miklos Szeredi &lt;miklos@szeredi.hu&gt;

This patch correctly sets f_pos in readdir.  The offset passed from
userspace is now the offset of the next entry.  Needs at least libfuse
2.3-pre2 to work properly.

Zero lengh filenames are also disallowed.

Signed-off-by: Miklos Szeredi &lt;miklos@szeredi.hu&gt;
Signed-off-by: Andrew Morton &lt;akpm@osdl.org&gt;
---

 25-akpm/fs/fuse/dir.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff -puN fs/fuse/dir.c~fuse-read-only-operations-readdir-fixes fs/fuse/dir.c
--- 25/fs/fuse/dir.c~fuse-read-only-operations-readdir-fixes	Fri Apr  1 15:45:53 2005
+++ 25-akpm/fs/fuse/dir.c	Fri Apr  1 15:45:53 2005
@@ -191,19 +191,19 @@ static int parse_dirfile(char *buf, size
 		struct fuse_dirent *dirent = (struct fuse_dirent *) buf;
 		size_t reclen = FUSE_DIRENT_SIZE(dirent);
 		int over;
-		if (dirent-&gt;namelen &gt; FUSE_NAME_MAX)
+		if (!dirent-&gt;namelen || dirent-&gt;namelen &gt; FUSE_NAME_MAX)
 			return -EIO;
 		if (reclen &gt; nbytes)
 			break;
 
 		over = filldir(dstbuf, dirent-&gt;name, dirent-&gt;namelen,
-			       dirent-&gt;off, dirent-&gt;ino, dirent-&gt;type);
+			       file-&gt;f_pos, dirent-&gt;ino, dirent-&gt;type);
 		if (over)
 			break;
 
 		buf += reclen;
-		file-&gt;f_pos += reclen;
 		nbytes -= reclen;
+		file-&gt;f_pos = dirent-&gt;off;
 	}
 
 	return 0;
_
</pre></body></html>