Changed functions RtlClearAllBits and RtlSetAllBits to use SizeOfBitMap
authorArt Yerkes <art.yerkes@gmail.com>
Sat, 25 Sep 2004 03:20:16 +0000 (03:20 +0000)
committerArt Yerkes <art.yerkes@gmail.com>
Sat, 25 Sep 2004 03:20:16 +0000 (03:20 +0000)
as the number of bits, not the number of bytes in the bitmap.  This was
making the whole page allocator in ntoskrnl/mm/npool.c crash early in
the boot process with whole page allocations on.  This may affect other
things adversely as well.

The documentation for RtlInitializeBitMap is here:
http://www.osronline.com/ddkx/kmarch/k109_5sfm.htm

svn path=/trunk/; revision=11039

reactos/lib/rtl/bitmap.c

index f7ca1a9..0e6911e 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: bitmap.c,v 1.1 2004/08/10 12:00:09 ekohl Exp $
+/* $Id: bitmap.c,v 1.2 2004/09/25 03:20:16 arty Exp $
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
@@ -140,13 +140,18 @@ RtlAreBitsSet(PRTL_BITMAP BitMapHeader,
 
 /*
  * @implemented
+ *
+ * Note: According to the documentation, SizeOfBitmap is in bits, so the
+ * ALIGN(...) must be divided by the number of bits per byte here.
+ * This function is exercised by the whole page allocator in npool.c
+ * which is how i came across this error.
  */
 VOID STDCALL
 RtlClearAllBits(IN OUT PRTL_BITMAP BitMapHeader)
 {
-  memset(BitMapHeader->Buffer,
-        0x00,
-        ALIGN(BitMapHeader->SizeOfBitMap, 8));
+    memset(BitMapHeader->Buffer,
+          0x00,
+          ALIGN(BitMapHeader->SizeOfBitMap, 8) / 8);
 }
 
 
@@ -736,13 +741,18 @@ RtlNumberOfSetBits(PRTL_BITMAP BitMapHeader)
 
 /*
  * @implemented
+ *
+ * Note: According to the documentation, SizeOfBitmap is in bits, so the
+ * ALIGN(...) must be divided by the number of bits per byte here.
+ * The companion function, RtlClearAllBits, is exercised by the whole page
+ * allocator in npool.c which is how i came across this error.
  */
 VOID STDCALL
 RtlSetAllBits(IN OUT PRTL_BITMAP BitMapHeader)
 {
   memset(BitMapHeader->Buffer,
         0xFF,
-        ALIGN(BitMapHeader->SizeOfBitMap, 8));
+        ALIGN(BitMapHeader->SizeOfBitMap, 8) / 8);
 }