From 53fa3cd2bfdb122d773024612d8c1d71f0dd8188 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Sat, 12 Sep 2026 22:00:09 -0400 Subject: add paging support --- arch/x86_64/hal/obj.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'arch/x86_64/hal/obj.c') diff --git a/arch/x86_64/hal/obj.c b/arch/x86_64/hal/obj.c index c5d5c69..b8924a6 100644 --- a/arch/x86_64/hal/obj.c +++ b/arch/x86_64/hal/obj.c @@ -37,6 +37,12 @@ obj_gettype(jove_owned_obj_t *obj) return obj->locked.type; } +uint8_t +obj_peektype(jove_obj_t obj) +{ + return obj.type; +} + void obj_settype(jove_owned_obj_t *obj, uint8_t type) { @@ -55,6 +61,24 @@ obj_setvalue(jove_owned_obj_t *obj, uintmax_t value) obj->locked.value = value & 0x00007FFFFFFFFFFFULL; } +jove_obj_t +objdir_peeklocal( + jove_owned_obj_t *objdir_obj, + uint16_t entry) +{ + if(obj_gettype_linked(objdir_obj) != JOVE_OBJ_OBJDIR) { + errno = EBADOBJ; + return (jove_obj_t) { 0 }; + } + if(entry >= JOVE_OBJDIR_ENTRIES) { + errno = EBADPATH; + return (jove_obj_t) { 0 }; + } + + jove_objdir_t *objtab = obj_deref_linked(objdir_obj); + return objtab->entries[entry]; +} + jove_owned_obj_t* objdir_getlocal( jove_owned_obj_t *objdir_obj, @@ -64,7 +88,7 @@ objdir_getlocal( reterr(EBADOBJ); } if(entry >= JOVE_OBJDIR_ENTRIES) { - reterr(EOOB); + reterr(EBADPATH); } jove_objdir_t *objtab = obj_deref_linked(objdir_obj); @@ -81,9 +105,10 @@ objdir_getobj( return objdir_obj; } { + errno = 0; jove_owned_obj_t *child_objdir = objdir_getlocal(objdir_obj, path[0]); if(child_objdir == 0) { - return 0; + reterr(EBADPATH); } jove_owned_obj_t *target_obj = objdir_getobj(child_objdir, path + 1, path_len - 1); -- cgit v1.2.3