#undef BitScanForward
#define BitScanForward(Index, Mask) \
do { unsigned long tmp; BitScanForward64(&tmp, Mask); *Index = tmp; } while (0)
+#undef BitScanReverse
+#define BitScanReverse(Index, Mask) \
+ do { unsigned long tmp; BitScanReverse64(&tmp, Mask); *Index = tmp; } while (0)
#define RtlFillMemoryUlong RtlFillMemoryUlonglong
#define RtlInitializeBitMap RtlInitializeBitMap64
/* Clear what's left */
NumberToClear &= (_BITCOUNT - 1);
- Mask = MAXINDEX << NumberToClear;
- *Buffer &= Mask;
+ if (NumberToClear != 0)
+ {
+ Mask = MAXINDEX << NumberToClear;
+ *Buffer &= Mask;
+ }
}
VOID
/* Set what's left */
NumberToSet &= (_BITCOUNT - 1);
- Mask = MAXINDEX << NumberToSet;
- *Buffer |= ~Mask;
+ if (NumberToSet != 0)
+ {
+ Mask = MAXINDEX << NumberToSet;
+ *Buffer |= ~Mask;
+ }
}
BOOLEAN
return RtlFindNextForwardRunClear(BitMapHeader, 0, StartingIndex);
}
-ULONG
+BITMAP_INDEX
NTAPI
RtlFindLastBackwardRunClear(
_In_ PRTL_BITMAP BitMapHeader,
BitScanReverse(&BitPos, InvValue);
/* Calculate last bit position */
- FromIndex = (Buffer + 1 - BitMapHeader->Buffer) * _BITCOUNT + BitPos;
+ FromIndex = (BITMAP_INDEX)((Buffer + 1 - BitMapHeader->Buffer) * _BITCOUNT + BitPos);
Value = ~InvValue << ((_BITCOUNT - 1) - BitPos) >> ((_BITCOUNT - 1) - BitPos);
BitScanReverse(&BitPos, Value);
/* Calculate Starting Index */
- *StartingRunIndex = (Buffer + 1 - BitMapHeader->Buffer) * _BITCOUNT + BitPos + 1;
+ *StartingRunIndex = (BITMAP_INDEX)((Buffer + 1 - BitMapHeader->Buffer) * _BITCOUNT + BitPos + 1);
}
else
{
}
/* Return length of the run */
- return FromIndex - *StartingRunIndex;
+ return (FromIndex - *StartingRunIndex);
}