Files
my-os-project2/ulib/umalloc/umalloc.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;
}