diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-12 22:00:09 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-09-12 22:00:09 -0400 |
| commit | 53fa3cd2bfdb122d773024612d8c1d71f0dd8188 (patch) | |
| tree | 5ffe81718b400031ca9b3b68a6d152c574270af2 /arch/x86_64/hal/obj.c | |
| parent | 1d1a5cde7de28752727e3d56305a74afac8848ff (diff) | |
| download | jove-kernel-53fa3cd2bfdb122d773024612d8c1d71f0dd8188.tar.gz jove-kernel-53fa3cd2bfdb122d773024612d8c1d71f0dd8188.tar.bz2 jove-kernel-53fa3cd2bfdb122d773024612d8c1d71f0dd8188.zip | |
add paging support
Diffstat (limited to 'arch/x86_64/hal/obj.c')
| -rw-r--r-- | arch/x86_64/hal/obj.c | 29 |
1 files changed, 27 insertions, 2 deletions
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); |
