mirror of
https://github.com/decompals/wibo.git
synced 2025-10-15 14:45:12 +00:00
57 lines
1.6 KiB
C
57 lines
1.6 KiB
C
#include <windows.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "test_assert.h"
|
|
|
|
int main(void) {
|
|
HANDLE processHeap = GetProcessHeap();
|
|
TEST_CHECK(processHeap != NULL);
|
|
|
|
uint8_t *block = (uint8_t *)HeapAlloc(processHeap, HEAP_ZERO_MEMORY, 32);
|
|
TEST_CHECK(block != NULL);
|
|
for (size_t i = 0; i < 32; i++) {
|
|
TEST_CHECK(block[i] == 0);
|
|
}
|
|
|
|
SIZE_T blockSize = HeapSize(processHeap, 0, block);
|
|
TEST_CHECK(blockSize >= 32);
|
|
|
|
memset(block, 0xAA, 16);
|
|
uint8_t *grown = (uint8_t *)HeapReAlloc(processHeap, HEAP_ZERO_MEMORY, block, 64);
|
|
TEST_CHECK(grown != NULL);
|
|
for (size_t i = 0; i < 16; i++) {
|
|
TEST_CHECK(grown[i] == 0xAA);
|
|
}
|
|
for (size_t i = 16; i < 64; i++) {
|
|
TEST_CHECK(grown[i] == 0);
|
|
}
|
|
|
|
SetLastError(0);
|
|
void *inPlace = HeapReAlloc(processHeap, HEAP_REALLOC_IN_PLACE_ONLY, grown, 128);
|
|
TEST_CHECK(inPlace == NULL);
|
|
TEST_CHECK_EQ(ERROR_NOT_ENOUGH_MEMORY, GetLastError());
|
|
|
|
TEST_CHECK(HeapFree(processHeap, 0, grown));
|
|
|
|
HANDLE privateHeap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);
|
|
TEST_CHECK(privateHeap != NULL);
|
|
|
|
void *privateBlock = HeapAlloc(privateHeap, 0, 8);
|
|
TEST_CHECK(privateBlock != NULL);
|
|
|
|
SetLastError(0);
|
|
TEST_CHECK(!HeapFree(processHeap, 0, privateBlock));
|
|
TEST_CHECK_EQ(ERROR_INVALID_PARAMETER, GetLastError());
|
|
|
|
TEST_CHECK(HeapFree(privateHeap, 0, privateBlock));
|
|
TEST_CHECK(HeapDestroy(privateHeap));
|
|
|
|
SetLastError(0);
|
|
TEST_CHECK(!HeapDestroy(processHeap));
|
|
TEST_CHECK_EQ(ERROR_INVALID_HANDLE, GetLastError());
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|