obj: object header is no longer allocated automatically

This commit is contained in:
2023-05-06 19:48:14 +01:00
parent 79c30e5393
commit f52ca2f1e2
13 changed files with 97 additions and 66 deletions

View File

@@ -13,6 +13,13 @@ extern "C" {
#define OBJECT_MAGIC 0xBADDCAFE
#define OBJECT_NAME_MAX 64
#define OBJECT_CAST(to_type, to_type_member, p) \
((to_type *)((uintptr_t)p) - offsetof(to_type, to_type_member))
#define OBJECT_C_CAST(c_type, c_type_member, obj_type, objp) \
OBJECT_IS_TYPE(objp, obj_type) ? OBJECT_CAST(c_type, c_type_member, (objp)) : NULL
#define OBJECT_IS_TYPE(obj, type_ptr) \
((obj)->ob_type == (type_ptr))
struct object;
struct object_attrib;
@@ -63,6 +70,7 @@ extern kern_status_t object_type_unregister(struct object_type *p);
extern struct object_namespace *global_namespace(void);
extern struct object_namespace *object_namespace_create(void);
extern struct object *ns_header(struct object_namespace *ns);
extern kern_status_t object_namespace_get_object(struct object_namespace *ns, const char *path, struct object **out);
extern kern_status_t object_publish(struct object_namespace *ns, const char *path, struct object *obj);
extern kern_status_t object_unpublish(struct object_namespace *ns, struct object *obj);
@@ -72,8 +80,6 @@ extern struct object *object_ref(struct object *obj);
extern void object_deref(struct object *obj);
extern void object_lock(struct object *obj, unsigned long *flags);
extern void object_unlock(struct object *obj, unsigned long flags);
extern void *object_data(struct object *obj);
extern struct object *object_header(void *p);
static inline kern_status_t object_get(const char *path, struct object **out)
{
return object_namespace_get_object(global_namespace(), path, out);