@@ -6,16 +6,25 @@ * and returns a kmptr struct referencing that * newly allocated region. */ -kmcond kmheapo(kmptr* where, sz size) { - void* ptr; - kmcond e = kmheapa(&ptr, size); - if (e != kmcond_ok) return e; +kmres kmheapo(sz size) { + kmres e = kmheapa(size); + kmres reply; + + if (e.cond != kmcond_ok) { + reply.cond = e.cond; + reply.ptr.ref = (void*)0; + reply.ptr.kind = kmkind_broken; + return reply; + } + kmptr p = { - .kind = (ptr != null ? kmkind_heap : kmkind_fail), - .ref = ptr, + .kind = (e.raw != null ? kmkind_heap : kmkind_broken), + .ref = e.raw, .shred = false, }; - *where = p; - return kmcond_ok; + + reply.ptr = p; + reply.cond = kmcond_ok; + return reply; }