Update RTL_BITMAP and RTL_BITMAP_RUN

Francois Gouget fgouget at free.fr
Sun Aug 22 17:39:37 CDT 2004


On Sun, 22 Aug 2004, Francois Gouget wrote:
>
> I found these types in ddk/ntddk.h in the 2000 DDK. Our types are
> correct except for slight name differences and for BitMapBuffer/Buffer
> which should be a PULONG. So I updated these types in winternl.h and the
> next step will be to move them to ddk/ntddk.h (it just seemed better to
> do it in two steps). When these types are moved there we will be able to
> compile dlls/shell32/tests/rtlbitmap.c on Windows (I used a hack to test
> that and it works).
>
> The switch from LPBYTE to PULONG for BitMapBuffer/Buffer impacs our
> algorithms because we use pointer arithmetic. One solution would be to
> modify them to handle 4 bytes at a time instead of just one byte like
> they do now. However that seemed too risky so I just cast the pointer as
> a BYTE* before using it. If someone feels up to it, the algorithms
> can be updated after this patch is applied.

Added a FIXME hinting that handling 4 bytes at a time might be better
and warning about the pointer arithmetics issues (suggested by Eric
Pouech).

It may also be worth mentionning that the Windows headers don't provide
macros for RtlInitializeBitMap, RtlSetAllBits and RtlClearAllBits. So I
modified the test to only test those if they are defined.

Actually the above contained a copy/paste error in the #ifdef which I
fixed in this version too.


Changelog:

 * include/winternl.h
   dlls/ntdll/rtlbitmap.c
   dlls/ntdll/tests/rtlbitmap.c

   Update RTL_BITMAP and RTL_BITMAP_RUN to match the 2000 DDK.
   Only test the Rtl{Initialize,SetAll,ClearAll}Bits macros if they are
defined.

-- 
Francois Gouget         fgouget at free.fr        http://fgouget.free.fr/
A particle is an irreducible representation of the Poincar\xE9 Group - Eugene Wigner
-------------- next part --------------
Index: dlls/ntdll/rtlbitmap.c
===================================================================
RCS file: /var/cvs/wine/dlls/ntdll/rtlbitmap.c,v
retrieving revision 1.9
diff -u -r1.9 rtlbitmap.c
--- dlls/ntdll/rtlbitmap.c	15 Jun 2004 00:47:00 -0000	1.9
+++ dlls/ntdll/rtlbitmap.c	22 Aug 2004 22:29:13 -0000
@@ -76,11 +76,11 @@
  *  in size (irrespective of ulSize given).
  */
 #undef RtlInitializeBitMap
-VOID WINAPI RtlInitializeBitMap(PRTL_BITMAP lpBits, LPBYTE lpBuff, ULONG ulSize)
+VOID WINAPI RtlInitializeBitMap(PRTL_BITMAP lpBits, PULONG lpBuff, ULONG ulSize)
 {
   TRACE("(%p,%p,%ld)\n", lpBits,lpBuff,ulSize);
   lpBits->SizeOfBitMap = ulSize;
-  lpBits->BitMapBuffer = lpBuff;
+  lpBits->Buffer = lpBuff;
 }
 
 /*************************************************************************
@@ -98,7 +98,7 @@
 VOID WINAPI RtlSetAllBits(PRTL_BITMAP lpBits)
 {
   TRACE("(%p)\n", lpBits);
-  memset(lpBits->BitMapBuffer, 0xff, ((lpBits->SizeOfBitMap + 31) & ~31) >> 3);
+  memset(lpBits->Buffer, 0xff, ((lpBits->SizeOfBitMap + 31) & ~31) >> 3);
 }
 
 /*************************************************************************
@@ -116,7 +116,7 @@
 VOID WINAPI RtlClearAllBits(PRTL_BITMAP lpBits)
 {
   TRACE("(%p)\n", lpBits);
-  memset(lpBits->BitMapBuffer, 0, ((lpBits->SizeOfBitMap + 31) & ~31) >> 3);
+  memset(lpBits->Buffer, 0, ((lpBits->SizeOfBitMap + 31) & ~31) >> 3);
 }
 
 /*************************************************************************
@@ -143,7 +143,10 @@
       ulCount > lpBits->SizeOfBitMap - ulStart)
     return;
 
-  lpOut = lpBits->BitMapBuffer + (ulStart >> 3u);
+  /* FIXME: It might be more efficient/cleaner to manipulate four bytes
+   * at a time. But beware of the pointer arithmetics...
+   */
+  lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u);
 
   /* Set bits in first byte, if ulStart isn't a byte boundary */
   if (ulStart & 7)
@@ -200,7 +203,10 @@
       ulCount > lpBits->SizeOfBitMap - ulStart)
     return;
 
-  lpOut = lpBits->BitMapBuffer + (ulStart >> 3u);
+  /* FIXME: It might be more efficient/cleaner to manipulate four bytes
+   * at a time. But beware of the pointer arithmetics...
+   */
+  lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u);
 
   /* Clear bits in first byte, if ulStart isn't a byte boundary */
   if (ulStart & 7)
@@ -260,7 +266,10 @@
       ulCount > lpBits->SizeOfBitMap - ulStart)
     return FALSE;
 
-  lpOut = lpBits->BitMapBuffer + (ulStart >> 3u);
+  /* FIXME: It might be more efficient/cleaner to manipulate four bytes
+   * at a time. But beware of the pointer arithmetics...
+   */
+  lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u);
 
   /* Check bits in first byte, if ulStart isn't a byte boundary */
   if (ulStart & 7)
@@ -330,7 +339,10 @@
       ulCount > lpBits->SizeOfBitMap - ulStart)
     return FALSE;
 
-  lpOut = lpBits->BitMapBuffer + (ulStart >> 3u);
+  /* FIXME: It might be more efficient/cleaner to manipulate four bytes
+   * at a time. But beware of the pointer arithmetics...
+   */
+  lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u);
 
   /* Check bits in first byte, if ulStart isn't a byte boundary */
   if (ulStart & 7)
@@ -534,7 +546,7 @@
 
   if (lpBits)
   {
-    LPBYTE lpOut = lpBits->BitMapBuffer;
+    LPBYTE lpOut = lpBits->Buffer;
     ULONG ulCount, ulRemainder;
     BYTE bMasked;
 
@@ -654,7 +666,7 @@
  */
 static int NTDLL_RunSortFn(const void *lhs, const void *rhs)
 {
-  if (((const RTL_BITMAP_RUN*)lhs)->SizeOfRun > ((const RTL_BITMAP_RUN*)rhs)->SizeOfRun)
+  if (((const RTL_BITMAP_RUN*)lhs)->NumberOfBits > ((const RTL_BITMAP_RUN*)rhs)->NumberOfBits)
     return -1;
   return 1;
 }
@@ -669,7 +681,10 @@
   LPBYTE lpOut;
   ULONG ulFoundAt = 0, ulCount = 0;
 
-  lpOut = lpBits->BitMapBuffer + (ulStart >> 3u);
+  /* FIXME: It might be more efficient/cleaner to manipulate four bytes
+   * at a time. But beware of the pointer arithmetics...
+   */
+  lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u);
 
   while (1)
   {
@@ -757,7 +772,10 @@
   LPBYTE lpOut;
   ULONG ulFoundAt = 0, ulCount = 0;
 
-  lpOut = lpBits->BitMapBuffer + (ulStart >> 3u);
+  /* FIXME: It might be more efficient/cleaner to manipulate four bytes
+   * at a time. But beware of the pointer arithmetics...
+   */
+  lpOut = ((BYTE*)lpBits->Buffer) + (ulStart >> 3u);
 
   while (1)
   {
@@ -963,21 +981,21 @@
         qsort(lpSeries, ulRuns, sizeof(RTL_BITMAP_RUN), NTDLL_RunSortFn);
 
       /* Replace last run if this one is bigger */
-      if (ulSize > lpSeries[ulRuns - 1].SizeOfRun)
+      if (ulSize > lpSeries[ulRuns - 1].NumberOfBits)
       {
-        lpSeries[ulRuns - 1].StartOfRun = ulNextPos;
-        lpSeries[ulRuns - 1].SizeOfRun = ulSize;
+        lpSeries[ulRuns - 1].StartingIndex = ulNextPos;
+        lpSeries[ulRuns - 1].NumberOfBits = ulSize;
 
         /* We need to re-sort the array, _if_ we didn't leave it sorted */
-        if (ulRuns > 1 && ulSize > lpSeries[ulRuns - 2].SizeOfRun)
+        if (ulRuns > 1 && ulSize > lpSeries[ulRuns - 2].NumberOfBits)
           bNeedSort = TRUE;
       }
     }
     else
     {
       /* Append to found runs */
-      lpSeries[ulRuns].StartOfRun = ulNextPos;
-      lpSeries[ulRuns].SizeOfRun = ulSize;
+      lpSeries[ulRuns].StartingIndex = ulNextPos;
+      lpSeries[ulRuns].NumberOfBits = ulSize;
       ulRuns++;
 
       if (!bLongest && ulRuns == ulCount)
@@ -1053,8 +1071,8 @@
   if (RtlFindSetRuns(lpBits, &br, 1, TRUE) == 1)
   {
     if (pulStart)
-      *pulStart = br.StartOfRun;
-    return br.SizeOfRun;
+      *pulStart = br.StartingIndex;
+    return br.NumberOfBits;
   }
   return 0;
 }
@@ -1080,8 +1098,8 @@
   if (RtlFindClearRuns(lpBits, &br, 1, TRUE) == 1)
   {
     if (pulStart)
-      *pulStart = br.StartOfRun;
-    return br.SizeOfRun;
+      *pulStart = br.StartingIndex;
+    return br.NumberOfBits;
   }
   return 0;
 }
Index: dlls/ntdll/tests/rtlbitmap.c
===================================================================
RCS file: /var/cvs/wine/dlls/ntdll/tests/rtlbitmap.c,v
retrieving revision 1.7
diff -u -r1.7 rtlbitmap.c
--- dlls/ntdll/tests/rtlbitmap.c	14 Aug 2004 00:42:12 -0000	1.7
+++ dlls/ntdll/tests/rtlbitmap.c	22 Aug 2004 22:26:10 -0000
@@ -75,7 +75,7 @@
 static void test_RtlInitializeBitMap(void)
 {
   bm.SizeOfBitMap = 0;
-  bm.BitMapBuffer = 0;
+  bm.Buffer = 0;
 
   memset(buff, 0, sizeof(buff));
   buff[0] = 77; /* Check buffer is not written to during init */
@@ -83,14 +83,16 @@
 
   pRtlInitializeBitMap(&bm, buff, 800);
   ok(bm.SizeOfBitMap == 800, "size uninitialised\n");
-  ok(bm.BitMapBuffer == buff,"buffer uninitialised\n");
+  ok(bm.Buffer == (PULONG)buff,"buffer uninitialised\n");
   ok(buff[0] == 77 && buff[79] == 77, "wrote to buffer\n");
 
-  /* Test inlined version */
+#ifdef RtlInitializeBitMap
+  /* Test macro version */
   RtlInitializeBitMap(&bm, buff, 800);
   ok(bm.SizeOfBitMap == 800, "size uninitialised\n");
-  ok(bm.BitMapBuffer == buff,"buffer uninitialised\n");
+  ok(bm.Buffer == (PULONG)buff,"buffer uninitialised\n");
   ok(buff[0] == 77 && buff[79] == 77, "wrote to buffer\n");
+#endif
 }
 
 static void test_RtlSetAllBits(void)
@@ -106,12 +108,14 @@
      buff[3] == 0xff, "didn't round up size\n");
   ok(buff[4] == 0, "set more than rounded size\n");
 
-  /* Test inlined version */
+#ifdef RtlSetAllBits
+  /* Test macro version */
   memset(buff, 0 , sizeof(buff));
   RtlSetAllBits(&bm);
   ok(buff[0] == 0xff && buff[1] == 0xff && buff[2] == 0xff &&
      buff[3] == 0xff, "didn't round up size\n");
   ok(buff[4] == 0, "set more than rounded size\n");
+#endif
 }
 
 static void test_RtlClearAllBits()
@@ -126,11 +130,13 @@
   ok(!buff[0] && !buff[1] && !buff[2] && !buff[3], "didn't round up size\n");
   ok(buff[4] == 0xff, "cleared more than rounded size\n");
 
-  /* Test inlined version */
+#ifdef RtlClearAllBits
+  /* Test macro version */
   memset(buff, 0xff , sizeof(buff));
   RtlClearAllBits(&bm);
   ok(!buff[0] && !buff[1] && !buff[2] && !buff[3] , "didn't round up size\n");
   ok(buff[4] == 0xff, "cleared more than rounded size\n");
+#endif
 }
 
 static void test_RtlSetBits()
@@ -498,8 +504,8 @@
   memset(buff, 0xff, sizeof(buff));
   ulCount = pRtlFindSetRuns(&bm, runs, 16, TRUE);
   ok (ulCount == 1, "didn't find set bits\n");
-  ok (runs[0].StartOfRun == 0,"bad start\n");
-  ok (runs[0].SizeOfRun == sizeof(buff)*8,"bad size\n");
+  ok (runs[0].StartingIndex == 0,"bad start\n");
+  ok (runs[0].NumberOfBits == sizeof(buff)*8,"bad size\n");
 
   /* Set up 3 runs */
   memset(runs, 0, sizeof(runs));
@@ -510,35 +516,35 @@
 
   /* Get first 2 */
   ulCount = pRtlFindSetRuns(&bm, runs, 2, FALSE);
-  ok (runs[0].StartOfRun == 7 || runs[0].StartOfRun == 101,"bad find\n");
-  ok (runs[1].StartOfRun == 7 || runs[1].StartOfRun == 101,"bad find\n");
-  ok (runs[0].SizeOfRun + runs[1].SizeOfRun == 19 + 3,"bad size\n");
-  ok (runs[0].StartOfRun != runs[1].StartOfRun,"found run twice\n");
-  ok (runs[2].StartOfRun == 0,"found extra run\n");
+  ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101,"bad find\n");
+  ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101,"bad find\n");
+  ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 19 + 3,"bad size\n");
+  ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n");
+  ok (runs[2].StartingIndex == 0,"found extra run\n");
 
   /* Get longest 3 */
   memset(runs, 0, sizeof(runs));
   ulCount = pRtlFindSetRuns(&bm, runs, 2, TRUE);
-  ok (runs[0].StartOfRun == 7 || runs[0].StartOfRun == 1877,"bad find\n");
-  ok (runs[1].StartOfRun == 7 || runs[1].StartOfRun == 1877,"bad find\n");
-  ok (runs[0].SizeOfRun + runs[1].SizeOfRun == 33 + 19,"bad size\n");
-  ok (runs[0].StartOfRun != runs[1].StartOfRun,"found run twice\n");
-  ok (runs[2].StartOfRun == 0,"found extra run\n");
+  ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 1877,"bad find\n");
+  ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 1877,"bad find\n");
+  ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 33 + 19,"bad size\n");
+  ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n");
+  ok (runs[2].StartingIndex == 0,"found extra run\n");
 
   /* Get all 3 */
   memset(runs, 0, sizeof(runs));
   ulCount = pRtlFindSetRuns(&bm, runs, 3, TRUE);
-  ok (runs[0].StartOfRun == 7 || runs[0].StartOfRun == 101 ||
-      runs[0].StartOfRun == 1877,"bad find\n");
-  ok (runs[1].StartOfRun == 7 || runs[1].StartOfRun == 101 ||
-      runs[1].StartOfRun == 1877,"bad find\n");
-  ok (runs[2].StartOfRun == 7 || runs[2].StartOfRun == 101 ||
-      runs[2].StartOfRun == 1877,"bad find\n");
-  ok (runs[0].SizeOfRun + runs[1].SizeOfRun
-      + runs[2].SizeOfRun == 19 + 3 + 33,"bad size\n");
-  ok (runs[0].StartOfRun != runs[1].StartOfRun,"found run twice\n");
-  ok (runs[1].StartOfRun != runs[2].StartOfRun,"found run twice\n");
-  ok (runs[3].StartOfRun == 0,"found extra run\n");
+  ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101 ||
+      runs[0].StartingIndex == 1877,"bad find\n");
+  ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101 ||
+      runs[1].StartingIndex == 1877,"bad find\n");
+  ok (runs[2].StartingIndex == 7 || runs[2].StartingIndex == 101 ||
+      runs[2].StartingIndex == 1877,"bad find\n");
+  ok (runs[0].NumberOfBits + runs[1].NumberOfBits
+      + runs[2].NumberOfBits == 19 + 3 + 33,"bad size\n");
+  ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n");
+  ok (runs[1].StartingIndex != runs[2].StartingIndex,"found run twice\n");
+  ok (runs[3].StartingIndex == 0,"found extra run\n");
 
   if (pRtlFindLongestRunSet)
   {
@@ -572,8 +578,8 @@
   memset(buff, 0, sizeof(buff));
   ulCount = pRtlFindClearRuns(&bm, runs, 16, TRUE);
   ok (ulCount == 1, "didn't find clear bits\n");
-  ok (runs[0].StartOfRun == 0,"bad start\n");
-  ok (runs[0].SizeOfRun == sizeof(buff)*8,"bad size\n");
+  ok (runs[0].StartingIndex == 0,"bad start\n");
+  ok (runs[0].NumberOfBits == sizeof(buff)*8,"bad size\n");
 
   /* Set up 3 runs */
   memset(runs, 0, sizeof(runs));
@@ -584,35 +590,35 @@
 
   /* Get first 2 */
   ulCount = pRtlFindClearRuns(&bm, runs, 2, FALSE);
-  ok (runs[0].StartOfRun == 7 || runs[0].StartOfRun == 101,"bad find\n");
-  ok (runs[1].StartOfRun == 7 || runs[1].StartOfRun == 101,"bad find\n");
-  ok (runs[0].SizeOfRun + runs[1].SizeOfRun == 19 + 3,"bad size\n");
-  ok (runs[0].StartOfRun != runs[1].StartOfRun,"found run twice\n");
-  ok (runs[2].StartOfRun == 0,"found extra run\n");
+  ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101,"bad find\n");
+  ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101,"bad find\n");
+  ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 19 + 3,"bad size\n");
+  ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n");
+  ok (runs[2].StartingIndex == 0,"found extra run\n");
 
   /* Get longest 3 */
   memset(runs, 0, sizeof(runs));
   ulCount = pRtlFindClearRuns(&bm, runs, 2, TRUE);
-  ok (runs[0].StartOfRun == 7 || runs[0].StartOfRun == 1877,"bad find\n");
-  ok (runs[1].StartOfRun == 7 || runs[1].StartOfRun == 1877,"bad find\n");
-  ok (runs[0].SizeOfRun + runs[1].SizeOfRun == 33 + 19,"bad size\n");
-  ok (runs[0].StartOfRun != runs[1].StartOfRun,"found run twice\n");
-  ok (runs[2].StartOfRun == 0,"found extra run\n");
+  ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 1877,"bad find\n");
+  ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 1877,"bad find\n");
+  ok (runs[0].NumberOfBits + runs[1].NumberOfBits == 33 + 19,"bad size\n");
+  ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n");
+  ok (runs[2].StartingIndex == 0,"found extra run\n");
 
   /* Get all 3 */
   memset(runs, 0, sizeof(runs));
   ulCount = pRtlFindClearRuns(&bm, runs, 3, TRUE);
-  ok (runs[0].StartOfRun == 7 || runs[0].StartOfRun == 101 ||
-      runs[0].StartOfRun == 1877,"bad find\n");
-  ok (runs[1].StartOfRun == 7 || runs[1].StartOfRun == 101 ||
-      runs[1].StartOfRun == 1877,"bad find\n");
-  ok (runs[2].StartOfRun == 7 || runs[2].StartOfRun == 101 ||
-      runs[2].StartOfRun == 1877,"bad find\n");
-  ok (runs[0].SizeOfRun + runs[1].SizeOfRun
-      + runs[2].SizeOfRun == 19 + 3 + 33,"bad size\n");
-  ok (runs[0].StartOfRun != runs[1].StartOfRun,"found run twice\n");
-  ok (runs[1].StartOfRun != runs[2].StartOfRun,"found run twice\n");
-  ok (runs[3].StartOfRun == 0,"found extra run\n");
+  ok (runs[0].StartingIndex == 7 || runs[0].StartingIndex == 101 ||
+      runs[0].StartingIndex == 1877,"bad find\n");
+  ok (runs[1].StartingIndex == 7 || runs[1].StartingIndex == 101 ||
+      runs[1].StartingIndex == 1877,"bad find\n");
+  ok (runs[2].StartingIndex == 7 || runs[2].StartingIndex == 101 ||
+      runs[2].StartingIndex == 1877,"bad find\n");
+  ok (runs[0].NumberOfBits + runs[1].NumberOfBits
+      + runs[2].NumberOfBits == 19 + 3 + 33,"bad size\n");
+  ok (runs[0].StartingIndex != runs[1].StartingIndex,"found run twice\n");
+  ok (runs[1].StartingIndex != runs[2].StartingIndex,"found run twice\n");
+  ok (runs[3].StartingIndex == 0,"found extra run\n");
 
   if (pRtlFindLongestRunClear)
   {
Index: include/winternl.h
===================================================================
RCS file: /var/cvs/wine/include/winternl.h,v
retrieving revision 1.88
diff -u -r1.88 winternl.h
--- include/winternl.h	20 Aug 2004 19:24:33 -0000	1.88
+++ include/winternl.h	22 Aug 2004 22:26:10 -0000
@@ -83,14 +83,14 @@
 
 typedef struct tagRTL_BITMAP {
     ULONG  SizeOfBitMap; /* Number of bits in the bitmap */
-    LPBYTE BitMapBuffer; /* Bitmap data, assumed sized to a DWORD boundary */
+    PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
 } RTL_BITMAP, *PRTL_BITMAP;
 
 typedef const RTL_BITMAP *PCRTL_BITMAP;
 
 typedef struct tagRTL_BITMAP_RUN {
-    ULONG StartOfRun; /* Bit position at which run starts - FIXME: Name? */
-    ULONG SizeOfRun;  /* Size of the run in bits - FIXME: Name? */
+    ULONG StartingIndex; /* Bit position at which run starts */
+    ULONG NumberOfBits;  /* Size of the run in bits */
 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
 
 typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
@@ -1462,7 +1462,7 @@
 NTSTATUS  WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
 NTSTATUS  WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
 NTSTATUS  WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,DWORD);
-void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,LPBYTE,ULONG);
+void      WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
 void      WINAPI RtlInitializeResource(LPRTL_RWLOCK);
 BOOL      WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
 
@@ -1618,7 +1618,7 @@
 inline static BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
 {
     if (lpBits && ulBit < lpBits->SizeOfBitMap &&
-        lpBits->BitMapBuffer[ulBit >> 3] & (1 << (ulBit & 7)))
+        lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
         return TRUE;
     return FALSE;
 }
@@ -1626,20 +1626,20 @@
 #define RtlClearAllBits(p) \
     do { \
         PRTL_BITMAP _p = (p); \
-        memset(_p->BitMapBuffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
+        memset(_p->Buffer,0,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
     } while (0)
 
 #define RtlInitializeBitMap(p,b,s) \
     do { \
         PRTL_BITMAP _p = (p); \
         _p->SizeOfBitMap = (s); \
-        _p->BitMapBuffer = (b); \
+        _p->Buffer = (b); \
     } while (0)
 
 #define RtlSetAllBits(p) \
     do { \
         PRTL_BITMAP _p = (p); \
-        memset(_p->BitMapBuffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
+        memset(_p->Buffer,0xff,((_p->SizeOfBitMap + 31) & 0xffffffe0) >> 3); \
     } while (0)
 
 /* These are implemented as __fastcall, so we can't let Winelib apps link with them */


More information about the wine-patches mailing list