X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/88e668538d6c0d394e6ea34516052f010ca6e8d2..4769a870917b98723690aa336d12d0656769528b:/lunaix-os/kernel/mm/valloc.c 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);