summaryrefslogtreecommitdiffstats
path: root/sys/link.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/link.h')
-rw-r--r--sys/link.h24
1 files changed, 18 insertions, 6 deletions
diff --git a/sys/link.h b/sys/link.h
index 37fa1e8..3f7331f 100644
--- a/sys/link.h
+++ b/sys/link.h
@@ -1,3 +1,4 @@
+#include "sys/lockstack.h"
#ifndef _JOVE_SYS_LINK_HPP
#define _JOVE_SYS_LINK_HPP 1
@@ -5,17 +6,28 @@
struct obj_link
{
- size_t refcount;
jove_obj_t obj;
+ uint16_t refcount;
+ uint8_t permissions;
};
-void *obj_deref_linked(jove_owned_obj_t *obj);
-uint8_t obj_gettype_linked(jove_owned_obj_t *obj);
-uint64_t obj_getvalue_linked(jove_owned_obj_t *obj);
+typedef struct obj_perm_group
+{
+ jove_owned_obj_t *obj;
+ uint8_t permissions;
+} jove_perm_obj_t;
+
+uint8_t link_gettype(jove_owned_obj_t *obj);
+uint8_t link_getperm(jove_owned_obj_t *link);
+uint64_t link_getvalue(jove_owned_obj_t *obj);
jove_owned_obj_t *link_deref(jove_owned_obj_t *link);
-jove_obj_t link_unlink(jove_owned_obj_t *link);
+jove_owned_obj_t *link_try_deref(jove_owned_obj_t *link);
-jove_owned_obj_t *link_new(jove_obj_t *tgt, jove_owned_obj_t *dst);
+jove_perm_obj_t link_traverse(jove_owned_obj_t *link, lockstack_t *lockstack);
+jove_perm_obj_t link_try_traverse(jove_owned_obj_t *link, lockstack_t *lockstack);
+
+jove_obj_t link_unlink(jove_owned_obj_t *link);
+jove_owned_obj_t *link_new(jove_obj_t *tgt, jove_owned_obj_t *dst, uint16_t permissions);
#endif