summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/hal/obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/hal/obj.c')
-rw-r--r--arch/x86_64/hal/obj.c18
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]);
}