#include #include #include #include /* free.fn.c - kmfree() "arbitrary free" * ~ lexi hale * kmfree() frees memory allocated in any manner. * it ignores non-dynamically allocated memory, * returning kmcond_unnecessary. to check for * success, compare result < kmcond_fail. */ kmcond kmfree(kmptr ptr) { if (ptr.kind <= kmkind_broken) return kmcond_unnecessary; switch (ptr.kind) { case kmkind_heap: return kmheapf(ptr.ref); } return kmcond_unhandled; }