From: Miklos Szeredi <miklos@szeredi.hu>

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 <miklos@szeredi.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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->namelen > FUSE_NAME_MAX)
+		if (!dirent->namelen || dirent->namelen > FUSE_NAME_MAX)
 			return -EIO;
 		if (reclen > nbytes)
 			break;
 
 		over = filldir(dstbuf, dirent->name, dirent->namelen,
-			       dirent->off, dirent->ino, dirent->type);
+			       file->f_pos, dirent->ino, dirent->type);
 		if (over)
 			break;
 
 		buf += reclen;
-		file->f_pos += reclen;
 		nbytes -= reclen;
+		file->f_pos = dirent->off;
 	}
 
 	return 0;
_