37 lines
768 B
C
37 lines
768 B
C
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#include <umalloc/umalloc.h>
|
|
#include <sysdefs/mman.h>
|
|
#include <system/system.h>
|
|
#include <errors.h>
|
|
#include <linklist.h>
|
|
#include <string/string.h>
|
|
#include <util/util.h>
|
|
#include <assert.h>
|
|
|
|
void *umalloc(size_t size) {
|
|
size_t allocsz = ALIGN_UP(size, 4096);
|
|
uint8_t *out;
|
|
int32_t ret = mman_map(NULL, allocsz, MMAN_MAP_PF_RW, 0, &out);
|
|
if (out == NULL || ret != E_OK) {
|
|
return NULL;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
void ufree(void *addr) {
|
|
if (addr != NULL)
|
|
mman_unmap(addr);
|
|
}
|
|
|
|
void *urealloc(void *addr, size_t oldsize, size_t newsize) {
|
|
void *tmp = umalloc(newsize);
|
|
if (tmp == NULL) {
|
|
return NULL;
|
|
}
|
|
string_memset(tmp, 0, newsize);
|
|
string_memcpy(tmp, addr, oldsize);
|
|
ufree(addr);
|
|
return tmp;
|
|
}
|