stos: ob: Implement ObCreateObject() helper

The ObCreateObject() is responsible for creating and allocating new
objects, we'll need this to even have directories and such.

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-25 00:09:54 +00:00
parent 6b23c1e3d1
commit 283547058e
3 changed files with 63 additions and 0 deletions
+17
View File
@@ -9,11 +9,15 @@
#ifndef _OB_OBJECT_H_ #ifndef _OB_OBJECT_H_
#define _OB_OBJECT_H_ 1 #define _OB_OBJECT_H_ 1
#include <stapi/status.h>
#include <stdef.h> #include <stdef.h>
/* Maximum size of system object names */ /* Maximum size of system object names */
#define OBJECT_NAMESZ 32 #define OBJECT_NAMESZ 32
/* Slut tag for pool allocations */
#define OBJECT_POOL_TAG 'OB'
/* /*
* Represents valid object types * Represents valid object types
* *
@@ -52,4 +56,17 @@ typedef struct {
USIZE EntryCount; USIZE EntryCount;
} OBJECT_DIRECTORY; } OBJECT_DIRECTORY;
/*
* Allocate and create a new objec
*
* @Name: Object name
* @Type: Object type
* @Data: Actual backing data
* @Result: Result is written here
*/
ST_STATUS ObCreateObject(
const CHAR *Name, OBJECT_TYPE Type,
VOID *Data, ST_OBJECT **Result
);
#endif /* !_OB_OBJECT_H_ */ #endif /* !_OB_OBJECT_H_ */
+1
View File
@@ -16,6 +16,7 @@ CFILES += $(shell find ../lib -name "*.c")
CFILES += $(shell find ../drivers -name "*.c") CFILES += $(shell find ../drivers -name "*.c")
CFILES += $(shell find ../mm -name "*.c") CFILES += $(shell find ../mm -name "*.c")
CFILES += $(shell find ../ex -name "*.c") CFILES += $(shell find ../ex -name "*.c")
CFILES += $(shell find ../ob -name "*.c")
CFILES += $(shell find bpal -name "*.c") CFILES += $(shell find bpal -name "*.c")
CFILES += $(shell find synch -name "*.c") CFILES += $(shell find synch -name "*.c")
DFILES = $(CFILES:.c=.d) DFILES = $(CFILES:.c=.d)
+45
View File
@@ -0,0 +1,45 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Object manager
* Author: Chloe M.
*/
#include <ob/object.h>
#include <ex/pool.h>
#include <string.h>
ST_STATUS
ObCreateObject(const CHAR *Name, OBJECT_TYPE Type, VOID *Data, ST_OBJECT **Result)
{
ST_OBJECT *Object;
USIZE NameLen;
if (Name == NULL || Result == NULL) {
return STATUS_INVALID_PARAM;
}
NameLen = RtlStrLen(Name);
if (NameLen >= OBJECT_NAMESZ - 1) {
return STATUS_NAME_TOO_LONG;
}
Object = ExAllocatePoolWithTag(
POOL_NON_PAGED,
sizeof(*Object),
OBJECT_POOL_TAG
);
if (Object == NULL) {
return STATUS_NO_MEMORY;
}
RtlMemCpy(Object->Name, Name, NameLen);
Object->Name[NameLen] = '\0';
Object->RefCount = 1;
Object->Type = Type;
Object->Data = Data;
*Result = Object;
return STATUS_SUCCESS;
}