@@ -30,9 +30,9 @@ } kmcond; typedef enum kmkind { kmkind_none, - kmkind_fail, + kmkind_broken, kmkind_linear, kmkind_heap, kmkind_pool, kmkind_ref, @@ -69,18 +69,28 @@ kmshred shred; void* ref; } kmptr; +/* this struct is used to return both a pointer + * and an error value at the same time. */ +typedef struct kmres { + kmcond cond; + union { + void* raw; + kmptr ptr; + }; +} kmres; /* heap functions */ -kmcond kmheapa (void**, sz); -kmcond kmheapao(kmptr*, sz); +kmres kmheapa (sz); +kmres kmheapo (sz); kmcond kmheapf (void*); +kmres kmlina (sz); +void* kmlini (void); /* generic functions */ kmcond kmfree(kmptr); -kmkind kmtell(void*); void kmzero(void*,sz); void kmozero(kmptr);