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:
@@ -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_ */
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user