r9457: Attempt to fix bug #3010 by handling END_OF_DIRECTORY_OFFSET
authorJeremy Allison <jra@samba.org>
Sun, 21 Aug 2005 21:12:27 +0000 (21:12 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:01:11 +0000 (11:01 -0500)
consistently.
Jeremy.
(This used to be commit ac8f22a328d878f064277638d63446bf68b68dfd)

source3/smbd/dir.c

index 159ce3723666c56b83a4a96728896241fd4ee5ad..f722bedecbb196b2a9ca1900ba7d374ef6a952c7 100644 (file)
@@ -1100,6 +1100,9 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset)
                }
                dirp->file_number++;
                return n;
+       } else if (*poffset == END_OF_DIRECTORY_OFFSET) {
+               *poffset = dirp->offset = END_OF_DIRECTORY_OFFSET;
+               return NULL;
        } else {
                /* A real offset, seek to it. */
                SeekDir(dirp, *poffset);
@@ -1122,7 +1125,7 @@ const char *ReadDirName(struct smb_Dir *dirp, long *poffset)
                dirp->file_number++;
                return e->name;
        }
-       dirp->offset = END_OF_DIRECTORY_OFFSET;
+       *poffset = dirp->offset = END_OF_DIRECTORY_OFFSET;
        return NULL;
 }
 
@@ -1147,6 +1150,8 @@ void SeekDir(struct smb_Dir *dirp, long offset)
        if (offset != dirp->offset) {
                if (offset == START_OF_DIRECTORY_OFFSET || offset == DOT_DOT_DIRECTORY_OFFSET) {
                        RewindDir(dirp, &offset);
+               } else if (offset == END_OF_DIRECTORY_OFFSET) {
+                       ; /* Don't seek in this case. */
                } else {
                        SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset);
                }