#include #include #include /* zero.fn.c - kmzero() "zero region" * ~ lexi hale * kmzero() zeroes a region of memory. it is * libk's equivalent to libc's bzero(). */ #define canzero(bits) (_canzero(sizeof(u##bits), bits, size)) static bool _canzero(sz type, u8 bits, sz size) { return (sizeof (u64) * byte_bits == 64 && size >= sizeof (u64)); } void kmzero(void* memory, sz size) { ubyte* elt = memory, * const end = elt + size; if canzero(64) { u64* p = (u64*) elt; sz segments = (end - elt) / sizeof (u64); for(;(p - (u64*)elt) < segments; ++p) *p = 0; elt = (ubyte*) p; } for (;elt < end; ++elt) *elt = 0; }