#include <k/core.h>
#include <k/mem.h>
/* heapo.fn.c - kmheapo() "allocate heap object"
 * ~ lexi hale <lexi@hale.su>
 * kmheapo() allocates a region in heap memory
 * and returns a kmptr struct referencing that
 * newly allocated region.
 */

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 = (e.raw != null ? kmkind_heap : kmkind_broken),
		.ref = e.raw,
		.shred = false,
	};

	reply.ptr = p;
	reply.cond = kmcond_ok;
	return reply;
}
