X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/e8e64a4f1d76aaeac3defa13243505cccd25c078..489fcbc119f6ae46efc8f4077cbb5aa43683e404:/lunaix-os/kernel/mm/valloc.c?ds=sidebyside diff --git a/lunaix-os/kernel/mm/valloc.c b/lunaix-os/kernel/mm/valloc.c index 631f39e..02384ef 100644 --- a/lunaix-os/kernel/mm/valloc.c +++ b/lunaix-os/kernel/mm/valloc.c @@ -67,13 +67,26 @@ valloc(unsigned int size) } void* -vcalloc(unsigned int size) +vzalloc(unsigned int size) { void* ptr = __valloc(size, &piles); memset(ptr, 0, size); return ptr; } +void* +vcalloc(unsigned int size, unsigned int count) +{ + unsigned int alloc_size; + if (__builtin_umul_overflow(size, count, &alloc_size)) { + return 0; + } + + void* ptr = __valloc(alloc_size, &piles); + memset(ptr, 0, alloc_size); + return ptr; +} + void vfree(void* ptr) { @@ -87,7 +100,7 @@ valloc_dma(unsigned int size) } void* -vcalloc_dma(unsigned int size) +vzalloc_dma(unsigned int size) { void* ptr = __valloc(size, &piles_dma); memset(ptr, 0, size);