388,21 → 388,31 |
|
} |
|
void *kern_alloc_aligned(size_t size, DWORD flags, |
int align_bits, DWORD align_ofs); |
|
void * vmalloc_32(size_t size) |
{ |
void *mem; |
unsigned long diff; |
|
mem = kern_alloc_aligned(size, 0, 12, 0); |
mem = malloc(size+12); |
|
return mem; |
diff = (unsigned long)((((unsigned long)mem/4)+1)*4-(unsigned long)mem); |
|
*(unsigned long *)(mem+diff) = (diff | 0x80000000); |
|
return (mem+diff+4); |
|
} |
|
void vfree(void *addr) { |
|
if (addr == NULL || *(unsigned long *)(addr-4) == 0) return; |
|
if ((*(unsigned long *)(addr-4) & 0x80000000) == 0x80000000) { |
free(addr-(*(unsigned long *)(addr-4) & 0x7FFFFFFF)-4); |
*(unsigned long *)(addr-4) = 0; |
return; |
} |
|
free(addr); |
|
return; |