diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-13 22:31:43 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-13 22:31:43 -0400 |
| commit | 548506392b789f58b1556a6ffca917441e1d89fd (patch) | |
| tree | 58e4b747446ea64e7951e523353f58510b3a8b2f /sys/link.c | |
| parent | c5e3bb7917689bc9ed54fee23a143144fade802d (diff) | |
| download | jove-kernel-548506392b789f58b1556a6ffca917441e1d89fd.tar.gz jove-kernel-548506392b789f58b1556a6ffca917441e1d89fd.tar.bz2 jove-kernel-548506392b789f58b1556a6ffca917441e1d89fd.zip | |
ipc functions. work on process spawning
Diffstat (limited to 'sys/link.c')
| -rw-r--r-- | sys/link.c | 58 |
1 files changed, 6 insertions, 52 deletions
@@ -5,46 +5,15 @@ #include "lib/printf.h" #include "jove.h" -uint8_t -link_gettype(jove_owned_obj_t *obj) -{ - return obj_gettype(link_deref(obj)); -} - -uint8_t -link_getperm(jove_owned_obj_t *link) -{ - struct obj_link *linkval = obj_deref(link); - return linkval->permissions; -} - -uint64_t -link_getvalue(jove_owned_obj_t *obj) -{ - return obj_getvalue(link_deref(obj)); -} - -jove_owned_obj_t* -link_deref(jove_owned_obj_t *link) -{ - struct obj_link *linkval = obj_deref(link); - return obj_take(&linkval->obj); -} - -jove_owned_obj_t* -link_try_deref(jove_owned_obj_t *link) -{ - struct obj_link *linkval = obj_deref(link); - return obj_trytake(&linkval->obj); -} jove_perm_obj_t link_traverse(jove_owned_obj_t *link, lockstack_t *lockstack) { jove_perm_obj_t perm_obj = { .obj = link, .permissions = JOVE_PERM_ALL }; while(obj_gettype(perm_obj.obj) == JOVE_OBJ_LINK) { - perm_obj.permissions &= link_getperm(perm_obj.obj); - perm_obj.obj = lockstack_push(lockstack, link_deref(perm_obj.obj)); + jove_link_obj_t *link = obj_deref(perm_obj.obj); + perm_obj.permissions &= link_getperm(link); + perm_obj.obj = lockstack_push(lockstack, link_deref(link)); } return perm_obj; } @@ -54,8 +23,9 @@ link_try_traverse(jove_owned_obj_t *link, lockstack_t *lockstack) { jove_perm_obj_t perm_obj = { .obj = link, .permissions = JOVE_PERM_ALL }; while(perm_obj.obj != NULL && obj_gettype(perm_obj.obj) == JOVE_OBJ_LINK) { - perm_obj.permissions &= link_getperm(perm_obj.obj); - perm_obj.obj = lockstack_push(lockstack, link_deref(perm_obj.obj)); + jove_link_obj_t *link = obj_deref(perm_obj.obj); + perm_obj.permissions &= link_getperm(link); + perm_obj.obj = lockstack_push(lockstack, link_deref(link)); } return perm_obj; } @@ -80,19 +50,3 @@ link_try_traverse_objdir(jove_owned_obj_t *objdir, lockstack_t *lockstack, traverse_obj.permissions &= perm_obj.permissions; return traverse_obj; } - -jove_owned_obj_t *link_new(jove_obj_t *tgt, jove_owned_obj_t *dst, uint16_t permissions) -{ - struct obj_link *linkval = obj_deref(dst); - linkval->obj = *tgt; - linkval->refcount = 2; - linkval->permissions = permissions; - - { - jove_owned_obj_t *tgt_owned = obj_take(tgt); - obj_settype(tgt_owned, JOVE_OBJ_LINK); - obj_setvalue(tgt_owned, (uintptr_t)linkval); - obj_release(tgt_owned); - } - return dst; -} |
