blob: 678e19673b42c8949cbc6b9f05a19560f6463297 [file] [log] [blame] [raw]
/* A part of the Native C Library for Windows NT
Copyright 2007-2015 PC GO Ld.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*/
#include <windows.h>
#include <nt.h>
#include <errno.h>
#include <stdio.h>
static void *get_process_heap() {
static void *process_heap = NULL;
if(!process_heap) {
PROCESS_BASIC_INFORMATION pbi;
NtQueryInformationProcess((void *)-1, ProcessBasicInformation, &pbi, sizeof(pbi), NULL);
process_heap = pbi.PebBaseAddress->ProcessHeap;
}
return process_heap;
}
void *malloc(size_t size) {
void *r = RtlAllocateHeap(get_process_heap(), 0, size);
if(!r) errno = ENOMEM;
return r;
}
void *realloc(void *ptr, size_t size) {
if(!ptr) return malloc(size);
if(!size) {
free(ptr);
return NULL;
}
void *r = RtlReAllocateHeap(get_process_heap(), 0, ptr, size);
if(!r) errno = ENOMEM;
return r;
}
void free(void *ptr) {
int free_success = RtlFreeHeap(get_process_heap(), 0, ptr);
//assert(free_success);
if(!free_success) {
printf("*** nativelibc: free failed: %p ***\n", ptr);
abort();
}
}