--- smbd/dir.c.orig 2005-08-21 08:29:57.000000000 -0400 +++ smbd/dir.c 2005-08-21 13:33:42.000000000 -0400 @@ -686,8 +686,8 @@ seekoff = (long)offset; } SeekDir(dptr->dir_hnd,seekoff); - DEBUG(3,("fetching dirptr %d for path %s at offset %d\n", - key,dptr_path(key),(int)seekoff)); + DEBUG(3,("fetching dirptr %d for path %s at seekoff %d offset %d\n", + key,dptr_path(key),(int)seekoff, (int)offset)); return(dptr); } @@ -765,8 +765,8 @@ long curoff = dptr_TellDir(conn->dirptr); dname = dptr_ReadDirName(conn->dirptr, &curoff, &sbuf); - DEBUG(6,("readdir on dirptr 0x%lx now at offset %ld\n", - (long)conn->dirptr,TellDir(conn->dirptr->dir_hnd))); + DEBUG(6,("readdir on dirptr 0x%lx now at offset %ld curoff=%ld\n", + (long)conn->dirptr->dir_hnd,TellDir(conn->dirptr->dir_hnd),curoff)); if (dname == NULL) return(False); @@ -1120,7 +1120,7 @@ dirp->file_number++; return e->name; } - dirp->offset = END_OF_DIRECTORY_OFFSET; + *poffset = dirp->offset = END_OF_DIRECTORY_OFFSET; return NULL; } @@ -1142,8 +1142,13 @@ void SeekDir(struct smb_Dir *dirp, long offset) { + + if ( dirp->offset == END_OF_DIRECTORY_OFFSET ) + return ; + if (offset != dirp->offset) { if (offset == START_OF_DIRECTORY_OFFSET || offset == DOT_DOT_DIRECTORY_OFFSET) { + DEBUG(8,("SeekDir calling RewindDir with offset=%d and dirp->offset=%d\n",offset, dirp->offset)); RewindDir(dirp, &offset); } else { SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset);