r6548: Fix bug #2622 - remove DPTR_MASK as it makes no sense.
authorJeremy Allison <jra@samba.org>
Sun, 1 May 2005 09:30:18 +0000 (09:30 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:44 +0000 (10:56 -0500)
Jeremy.

source/include/smb_macros.h
source/smbd/dir.c

index 6d1e382bb8281b270ebb121fecc3c0d1414cc298..37e5a897cb6e3071b54a691e62200ae433527178 100644 (file)
@@ -224,17 +224,11 @@ true if two IP addresses are equal
 #define reg_get_subkey(full_keyname, key_name, subkey_name) \
        split_at_last_component(full_keyname, key_name, '\\', subkey_name)
 
-/****************************************************************************
- Used by dptr_zero.
-****************************************************************************/
-
-#define DPTR_MASK ((uint32)(((uint32)1)<<31))
-
 /****************************************************************************
  Return True if the offset is at zero.
 ****************************************************************************/
 
-#define dptr_zero(buf) ((IVAL(buf,1)&~DPTR_MASK) == 0)
+#define dptr_zero(buf) (IVAL(buf,1) == 0)
 
 /*******************************************************************
 copy an IP address from one buffer to another
index 5ebbfe478fc475d0400d0d1ea69b75242e13d677..3c93c188ff3731696b8e715f42c338b42cb4e02e 100644 (file)
@@ -624,11 +624,11 @@ BOOL dptr_fill(char *buf1,unsigned int key)
                DEBUG(1,("filling null dirptr %d\n",key));
                return(False);
        }
-       offset = TellDir(dptr->dir_hnd);
+       offset = (uint32)TellDir(dptr->dir_hnd);
        DEBUG(6,("fill on key %u dirptr 0x%lx now at %d\n",key,
                (long)dptr->dir_hnd,(int)offset));
        buf[0] = key;
-       SIVAL(buf,1,offset | DPTR_MASK);
+       SIVAL(buf,1,offset);
        return(True);
 }
 
@@ -641,16 +641,22 @@ struct dptr_struct *dptr_fetch(char *buf,int *num)
        unsigned int key = *(unsigned char *)buf;
        struct dptr_struct *dptr = dptr_get(key, False);
        uint32 offset;
+       long seekoff;
 
        if (!dptr) {
                DEBUG(3,("fetched null dirptr %d\n",key));
                return(NULL);
        }
        *num = key;
-       offset = IVAL(buf,1)&~DPTR_MASK;
-       SeekDir(dptr->dir_hnd,(long)offset);
+       offset = IVAL(buf,1);
+       if (offset == (uint32)-1) {
+               seekoff = -1;
+       } else {
+               seekoff = (long)offset;
+       }
+       SeekDir(dptr->dir_hnd,seekoff);
        DEBUG(3,("fetching dirptr %d for path %s at offset %d\n",
-               key,dptr_path(key),offset));
+               key,dptr_path(key),(int)seekoff));
        return(dptr);
 }