diff options
Diffstat (limited to 'arch/x86_64/hal/obj.c')
| -rw-r--r-- | arch/x86_64/hal/obj.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/arch/x86_64/hal/obj.c b/arch/x86_64/hal/obj.c index cb0e13d..9844a54 100644 --- a/arch/x86_64/hal/obj.c +++ b/arch/x86_64/hal/obj.c @@ -79,7 +79,7 @@ objdir_peeklocal( jove_owned_obj_t *objdir_obj, uint16_t entry) { - if(obj_gettype_linked(objdir_obj) != JOVE_OBJ_OBJDIR) { + if(obj_gettype(objdir_obj) != JOVE_OBJ_OBJDIR) { errno = EBADOBJ; return (jove_obj_t) { 0 }; } @@ -88,7 +88,7 @@ objdir_peeklocal( return (jove_obj_t) { 0 }; } - jove_objdir_t *objtab = obj_deref_linked(objdir_obj); + jove_objdir_t *objtab = obj_deref(objdir_obj); return objtab->entries[entry]; } @@ -97,14 +97,17 @@ objdir_getlocal( jove_owned_obj_t *objdir_obj, uint16_t entry) { - if(obj_gettype_linked(objdir_obj) != JOVE_OBJ_OBJDIR) { + while(obj_gettype(objdir_obj) == JOVE_OBJ_LINK) { + objdir_obj = link_deref(objdir_obj); + } + if(obj_gettype(objdir_obj) != JOVE_OBJ_OBJDIR) { reterr(EBADOBJ); } if(entry >= JOVE_OBJDIR_ENTRIES) { reterr(EBADPATH); } - jove_objdir_t *objtab = obj_deref_linked(objdir_obj); + jove_objdir_t *objtab = obj_deref(objdir_obj); return obj_take(&objtab->entries[entry]); } @@ -113,14 +116,17 @@ objdir_trygetlocal( jove_owned_obj_t *objdir_obj, uint16_t entry) { - if(obj_gettype_linked(objdir_obj) != JOVE_OBJ_OBJDIR) { + while(obj_gettype(objdir_obj) == JOVE_OBJ_LINK) { + objdir_obj = link_deref(objdir_obj); + } + if(obj_gettype(objdir_obj) != JOVE_OBJ_OBJDIR) { reterr(EBADOBJ); } if(entry >= JOVE_OBJDIR_ENTRIES) { reterr(EBADPATH); } - jove_objdir_t *objtab = obj_deref_linked(objdir_obj); + jove_objdir_t *objtab = obj_deref(objdir_obj); return obj_trytake(&objtab->entries[entry]); } |
