Author: tkreuzer Date: Sat Feb 16 18:08:58 2013 New Revision: 58323
URL: http://svn.reactos.org/svn/reactos?rev=58323&view=rev Log: [RTL] Fix some VS /analyze warnings, fix RtlGet/SetHeapInformation
Modified: trunk/reactos/lib/rtl/heap.c
Modified: trunk/reactos/lib/rtl/heap.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/heap.c?rev=58323&am... ============================================================================== --- trunk/reactos/lib/rtl/heap.c [iso-8859-1] (original) +++ trunk/reactos/lib/rtl/heap.c [iso-8859-1] Sat Feb 16 18:08:58 2013 @@ -541,7 +541,7 @@ PLIST_ENTRY Current; PHEAP_UCR_DESCRIPTOR UcrDescriptor;
- DPRINT("RtlpInsertUnCommittedPages(%p %p %x)\n", Segment, Address, Size); + DPRINT("RtlpInsertUnCommittedPages(%p %08Ix %Ix)\n", Segment, Address, Size);
/* Go through the list of UCR descriptors, they are sorted from lowest address to the highest */ @@ -596,7 +596,7 @@ /* "Current" is the descriptor before which our one should go */ InsertTailList(Current, &UcrDescriptor->SegmentEntry);
- DPRINT("Added segment UCR with base %p, size 0x%x\n", Address, Size); + DPRINT("Added segment UCR with base %08Ix, size 0x%x\n", Address, Size);
/* Increase counters */ Segment->NumberOfUnCommittedRanges++; @@ -614,7 +614,7 @@ PHEAP_ENTRY FirstEntry, LastEntry; NTSTATUS Status;
- DPRINT("RtlpFindAndCommitPages(%p %p %x %p)\n", Heap, Segment, *Size, Address); + DPRINT("RtlpFindAndCommitPages(%p %p %Ix %08Ix)\n", Heap, Segment, *Size, Address);
/* Go through UCRs in a segment */ Current = Segment->UCRSegmentList.Flink; @@ -644,7 +644,7 @@ PAGE_READWRITE); }
- DPRINT("Committed %d bytes at base %p, UCR size is %d\n", *Size, Address, UcrDescriptor->Size); + DPRINT("Committed %Iu bytes at base %08Ix, UCR size is %lu\n", *Size, Address, UcrDescriptor->Size);
/* Fail in unsuccessful case */ if (!NT_SUCCESS(Status)) @@ -679,7 +679,7 @@ UcrDescriptor->Address = (PVOID)((ULONG_PTR)UcrDescriptor->Address + *Size); UcrDescriptor->Size -= *Size;
- DPRINT("Updating UcrDescriptor %p, new Address %p, size %d\n", + DPRINT("Updating UcrDescriptor %p, new Address %p, size %lu\n", UcrDescriptor, UcrDescriptor->Address, UcrDescriptor->Size);
/* Set various first entry fields */ @@ -1080,7 +1080,7 @@ { Segment = Heap->Segments[Index];
- if (Segment) DPRINT("Segment[%d] %p with NOUCP %x\n", Index, Segment, Segment->NumberOfUnCommittedPages); + if (Segment) DPRINT("Segment[%u] %p with NOUCP %x\n", Index, Segment, Segment->NumberOfUnCommittedPages);
/* Check if its size suits us */ if (Segment && @@ -1162,7 +1162,7 @@ MEM_COMMIT, PAGE_READWRITE);
- DPRINT("Committed %d bytes at base %p\n", CommitSize, Segment); + DPRINT("Committed %lu bytes at base %p\n", CommitSize, Segment);
/* Initialize heap segment if commit was successful */ if (NT_SUCCESS(Status)) @@ -1479,7 +1479,7 @@ MEM_COMMIT, PAGE_READWRITE);
- DPRINT("Committed %d bytes at base %p\n", CommitSize, CommittedAddress); + DPRINT("Committed %Iu bytes at base %p\n", CommitSize, CommittedAddress);
if (!NT_SUCCESS(Status)) { @@ -3303,7 +3303,8 @@
if (CurrentEntry->SegmentOffset != SegmentOffset) { - DPRINT1("HEAP: Heap entry %p SegmentOffset is incorrect %x (should be %x)\n", CurrentEntry, SegmentOffset, CurrentEntry->SegmentOffset); + DPRINT1("HEAP: Heap entry %p SegmentOffset is incorrect %x (should be %x)\n", + CurrentEntry, SegmentOffset, CurrentEntry->SegmentOffset); return FALSE; }
@@ -3317,7 +3318,8 @@ /* Check if it's not really the last one */ if (CurrentEntry != Segment->LastValidEntry) { - DPRINT1("HEAP: Heap entry %p is not last block in segment (%x)\n", CurrentEntry, Segment->LastValidEntry); + DPRINT1("HEAP: Heap entry %p is not last block in segment (%p)\n", + CurrentEntry, Segment->LastValidEntry); return FALSE; } } @@ -3439,24 +3441,24 @@ /* If there is an in-use entry in a free list - that's quite a big problem */ if (FreeEntry->Flags & HEAP_ENTRY_BUSY) { - DPRINT1("HEAP: %x-dedicated list free element %x is marked in-use\n", Size, FreeEntry); + DPRINT1("HEAP: %Ix-dedicated list free element %p is marked in-use\n", Size, FreeEntry); return FALSE; }
/* Check sizes according to that specific list's size */ if ((Size == 0) && (FreeEntry->Size < HEAP_FREELISTS)) { - DPRINT1("HEAP: Non dedicated list free element %x has size %x which would fit a dedicated list\n", FreeEntry, FreeEntry->Size); + DPRINT1("HEAP: Non dedicated list free element %p has size %x which would fit a dedicated list\n", FreeEntry, FreeEntry->Size); return FALSE; } else if (Size && (FreeEntry->Size != Size)) { - DPRINT1("HEAP: %x-dedicated list free element %x has incorrect size %x\n", Size, FreeEntry, FreeEntry->Size); + DPRINT1("HEAP: %Ix-dedicated list free element %p has incorrect size %x\n", Size, FreeEntry, FreeEntry->Size); return FALSE; } else if ((Size == 0) && (FreeEntry->Size < PreviousSize)) { - DPRINT1("HEAP: Non dedicated list free element %x is not put in order\n", FreeEntry); + DPRINT1("HEAP: Non dedicated list free element %p is not put in order\n", FreeEntry); return FALSE; }
@@ -3514,13 +3516,13 @@
if (FreeListEntriesCount != FreeBlocksCount) { - DPRINT1("HEAP: Free blocks count in arena (%d) does not match free blocks number in the free lists (%d)\n", FreeBlocksCount, FreeListEntriesCount); + DPRINT1("HEAP: Free blocks count in arena (%lu) does not match free blocks number in the free lists (%lu)\n", FreeBlocksCount, FreeListEntriesCount); return FALSE; }
if (Heap->TotalFreeSize != TotalFreeSize) { - DPRINT1("HEAP: Total size of free blocks in arena (%d) does not equal to the one in heap header (%d)\n", TotalFreeSize, Heap->TotalFreeSize); + DPRINT1("HEAP: Total size of free blocks in arena (%Iu) does not equal to the one in heap header (%Iu)\n", TotalFreeSize, Heap->TotalFreeSize); return FALSE; }
@@ -3562,7 +3564,7 @@ /* Check signature */ if (Heap->Signature != HEAP_SIGNATURE) { - DPRINT1("HEAP: Signature %x is invalid for heap %p\n", Heap->Signature, Heap); + DPRINT1("HEAP: Signature %lx is invalid for heap %p\n", Heap->Signature, Heap); return FALSE; }
@@ -3810,11 +3812,11 @@ /* Pass user value */ if (UserValue) *UserValue = (PVOID)Extra->Settable; - - /* Decode and return user flags */ - if (UserFlags) - *UserFlags = (HeapEntry->Flags & HEAP_ENTRY_SETTABLE_FLAGS) << 4; - } + } + + /* Decode and return user flags */ + if (UserFlags) + *UserFlags = (HeapEntry->Flags & HEAP_ENTRY_SETTABLE_FLAGS) << 4;
/* Release the heap lock if it was acquired */ if (HeapLocked) @@ -3900,53 +3902,59 @@ IN SIZE_T HeapInformationLength) { /* Setting heap information is not really supported except for enabling LFH */ - if (HeapInformationClass == 0) return STATUS_SUCCESS; - - /* Check buffer length */ - if (HeapInformationLength < sizeof(ULONG)) - { - /* The provided buffer is too small */ - return STATUS_BUFFER_TOO_SMALL; - } - - /* Check for a special magic value for enabling LFH */ - if (*(PULONG)HeapInformation == 2) - { + if (HeapInformationClass == HeapCompatibilityInformation) + { + /* Check buffer length */ + if (HeapInformationLength < sizeof(ULONG)) + { + /* The provided buffer is too small */ + return STATUS_BUFFER_TOO_SMALL; + } + + /* Check for a special magic value for enabling LFH */ + if (*(PULONG)HeapInformation != 2) + { + return STATUS_UNSUCCESSFUL; + } + DPRINT1("RtlSetHeapInformation() needs to enable LFH\n"); return STATUS_SUCCESS; }
- return STATUS_UNSUCCESSFUL; + return STATUS_SUCCESS; }
NTSTATUS NTAPI RtlQueryHeapInformation(HANDLE HeapHandle, HEAP_INFORMATION_CLASS HeapInformationClass, - PVOID HeapInformation OPTIONAL, - SIZE_T HeapInformationLength OPTIONAL, + PVOID HeapInformation, + SIZE_T HeapInformationLength, PSIZE_T ReturnLength OPTIONAL) { PHEAP Heap = (PHEAP)HeapHandle;
/* Only HeapCompatibilityInformation is supported */ - if (HeapInformationClass != HeapCompatibilityInformation) - return STATUS_UNSUCCESSFUL; - - /* Set result length */ - if (ReturnLength) *ReturnLength = sizeof(ULONG); - - /* Check buffer length */ - if (HeapInformationLength < sizeof(ULONG)) - { - /* It's too small, return needed length */ - return STATUS_BUFFER_TOO_SMALL; - } - - /* Return front end heap type */ - *(PULONG)HeapInformation = Heap->FrontEndHeapType; - - return STATUS_SUCCESS; + if (HeapInformationClass == HeapCompatibilityInformation) + { + /* Set result length */ + if (ReturnLength) + *ReturnLength = sizeof(ULONG); + + /* Check buffer length */ + if (HeapInformationLength < sizeof(ULONG)) + { + /* It's too small, return needed length */ + return STATUS_BUFFER_TOO_SMALL; + } + + /* Return front end heap type */ + *(PULONG)HeapInformation = Heap->FrontEndHeapType; + + return STATUS_SUCCESS; + } + + return STATUS_UNSUCCESSFUL; }
NTSTATUS