summaryrefslogtreecommitdiffstats
path: root/sys/link.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/link.c')
-rw-r--r--sys/link.c58
1 files changed, 6 insertions, 52 deletions
diff --git a/sys/link.c b/sys/link.c
index 04a15cf..cda10c6 100644
--- a/sys/link.c
+++ b/sys/link.c
@@ -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;
-}