smbd: Simplify SeekDir() with an early return
authorVolker Lendecke <vl@samba.org>
Thu, 2 Feb 2023 16:01:16 +0000 (17:01 +0100)
committerJeremy Allison <jra@samba.org>
Mon, 13 Feb 2023 20:28:33 +0000 (20:28 +0000)
Review with git show -w

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/dir.c

index f7ca390ea8b598394e9a3598ff5538a21ca48082..db940161e1a00e7f0dac32c14a692db3d69e1672 100644 (file)
@@ -1686,31 +1686,36 @@ void RewindDir(struct smb_Dir *dir_hnd, long *poffset)
 
 void SeekDir(struct smb_Dir *dirp, long offset)
 {
-       if (offset != dirp->offset) {
-               if (offset == START_OF_DIRECTORY_OFFSET) {
-                       RewindDir(dirp, &offset);
-                       /*
-                        * Ok we should really set the file number here
-                        * to 1 to enable ".." to be returned next. Trouble
-                        * is I'm worried about callers using SeekDir(dirp,0)
-                        * as equivalent to RewindDir(). So leave this alone
-                        * for now.
-                        */
-               } else if  (offset == DOT_DOT_DIRECTORY_OFFSET) {
-                       RewindDir(dirp, &offset);
-                       /*
-                        * Set the file number to 2 - we want to get the first
-                        * real file entry (the one we return after "..")
-                        * on the next ReadDir.
-                        */
-                       dirp->file_number = 2;
-               } else if (offset == END_OF_DIRECTORY_OFFSET) {
-                       ; /* Don't seek in this case. */
-               } else {
-                       SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset);
-               }
-               dirp->offset = offset;
+       if (offset == dirp->offset) {
+               /*
+                * Nothing to do
+                */
+               return;
+       }
+
+       if (offset == START_OF_DIRECTORY_OFFSET) {
+               RewindDir(dirp, &offset);
+               /*
+                * Ok we should really set the file number here
+                * to 1 to enable ".." to be returned next. Trouble
+                * is I'm worried about callers using SeekDir(dirp,0)
+                * as equivalent to RewindDir(). So leave this alone
+                * for now.
+                */
+       } else if  (offset == DOT_DOT_DIRECTORY_OFFSET) {
+               RewindDir(dirp, &offset);
+               /*
+                * Set the file number to 2 - we want to get the first
+                * real file entry (the one we return after "..")
+                * on the next ReadDir.
+                */
+               dirp->file_number = 2;
+       } else if (offset == END_OF_DIRECTORY_OFFSET) {
+               ; /* Don't seek in this case. */
+       } else {
+               SMB_VFS_SEEKDIR(dirp->conn, dirp->dir, offset);
        }
+       dirp->offset = offset;
 }
 
 /*******************************************************************