/* * Copyright (c) 2018-2021, Andreas Kling * Copyright (c) 2021, Daniel Bertalan * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #if defined(KERNEL) # include #else # include # include # define kcalloc calloc # define kmalloc malloc # define kmalloc_good_size malloc_good_size inline void kfree_sized(void* ptr, size_t) { free(ptr); } #endif #ifndef AK_OS_SERENITY # include # ifndef AK_OS_MACOS extern "C" { inline size_t malloc_good_size(size_t size) { return size; } } # else # include # endif #endif using std::nothrow; inline void* kmalloc_array(Checked a, Checked b) { auto size = a * b; VERIFY(!size.has_overflow()); return kmalloc(size.value()); } inline void* kmalloc_array(Checked a, Checked b, Checked c) { auto size = a * b * c; VERIFY(!size.has_overflow()); return kmalloc(size.value()); }