git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VFS - Rework to remove function pointers from tVFS_Node
[tpg/acess2.git]
/
Kernel
/
drv
/
proc.c
diff --git
a/Kernel/drv/proc.c
b/Kernel/drv/proc.c
index
0d1ae52
..
73f4535
100644
(file)
--- a/
Kernel/drv/proc.c
+++ b/
Kernel/drv/proc.c
@@
-10,7
+10,6
@@
// === CONSTANTS ===
#define VERSION ((0 << 8) | (1)) // 0.01
// === CONSTANTS ===
#define VERSION ((0 << 8) | (1)) // 0.01
-#define KERNEL_VERSION_STRING ("Acess2 " EXPAND_STR(KERNEL_VERSION) " build " EXPAND_STR(BUILD_NUM))
// === TYPES ===
typedef struct sSysFS_Ent
// === TYPES ===
typedef struct sSysFS_Ent
@@
-41,17
+40,26
@@
void SysFS_Comm_CloseFile(tVFS_Node *Node);
extern tSysFS_Ent gSysFS_Version; // Defined Later
extern tSysFS_Ent gSysFS_Root; // Defined Later
MODULE_DEFINE(0, VERSION, SysFS, SysFS_Install, NULL, NULL);
extern tSysFS_Ent gSysFS_Version; // Defined Later
extern tSysFS_Ent gSysFS_Root; // Defined Later
MODULE_DEFINE(0, VERSION, SysFS, SysFS_Install, NULL, NULL);
+tVFS_NodeType gSysFS_FileNodeType = {
+ .TypeName = "SysFS File",
+ .Read = SysFS_Comm_ReadFile
+ };
+tVFS_NodeType gSysFS_DirNodeType = {
+ .TypeName = "SysFS Dir",
+ .ReadDir = SysFS_Comm_ReadDir,
+ .FindDir = SysFS_Comm_FindDir
+ };
tSysFS_Ent gSysFS_Version_Kernel = {
NULL, NULL, // Nexts
&gSysFS_Version, // Parent
{
.Inode = 1, // File #1
tSysFS_Ent gSysFS_Version_Kernel = {
NULL, NULL, // Nexts
&gSysFS_Version, // Parent
{
.Inode = 1, // File #1
- .ImplPtr =
(void*)KERNEL_VERSION_STRING
,
+ .ImplPtr =
NULL
,
.ImplInt = (Uint)&gSysFS_Version_Kernel, // Self-Link
.ImplInt = (Uint)&gSysFS_Version_Kernel, // Self-Link
- .Size =
sizeof(KERNEL_VERSION_STRING)-1
,
+ .Size =
0
,
.NumACLs = 1,
.ACLs = &gVFS_ACL_EveryoneRO,
.NumACLs = 1,
.ACLs = &gVFS_ACL_EveryoneRO,
- .
Read = SysFS_Comm_ReadFil
e
+ .
Type = &gSysFS_FileNodeTyp
e
},
"Kernel"
};
},
"Kernel"
};
@@
-65,8
+73,7
@@
tSysFS_Ent gSysFS_Version = {
.NumACLs = 1,
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = VFS_FFLAG_DIRECTORY,
.NumACLs = 1,
.ACLs = &gVFS_ACL_EveryoneRX,
.Flags = VFS_FFLAG_DIRECTORY,
- .ReadDir = SysFS_Comm_ReadDir,
- .FindDir = SysFS_Comm_FindDir
+ .Type = &gSysFS_DirNodeType
},
"Version"
};
},
"Version"
};
@@
-89,9
+96,7
@@
tDevFS_Driver gSysFS_DriverInfo = {
.Flags = VFS_FFLAG_DIRECTORY,
.ImplPtr = &gSysFS_Version,
.Size = sizeof(gSysFS_Root)/sizeof(tSysFS_Ent),
.Flags = VFS_FFLAG_DIRECTORY,
.ImplPtr = &gSysFS_Version,
.Size = sizeof(gSysFS_Root)/sizeof(tSysFS_Ent),
- .ReadDir = SysFS_Comm_ReadDir,
- .FindDir = SysFS_Comm_FindDir,
- .IOCtl = NULL
+ .Type = &gSysFS_DirNodeType
}
};
int giSysFS_NextFileID = 2;
}
};
int giSysFS_NextFileID = 2;
@@
-104,6
+109,13
@@
tSysFS_Ent *gSysFS_FileList;
*/
int SysFS_Install(char **Options)
{
*/
int SysFS_Install(char **Options)
{
+ {
+ const char *fmt = "Acess2 "EXPAND_STR(KERNEL_VERSION)" "EXPAND_STR(ARCHDIR)" build %i, hash %s";
+ gSysFS_Version_Kernel.Node.Size = sprintf(NULL, fmt, BUILD_NUM, gsGitHash);
+ gSysFS_Version_Kernel.Node.ImplPtr = malloc( gSysFS_Version_Kernel.Node.Size + 1 );
+ sprintf(gSysFS_Version_Kernel.Node.ImplPtr, fmt, BUILD_NUM, gsGitHash);
+ }
+
DevFS_AddDevice( &gSysFS_DriverInfo );
return MODULE_ERR_OK;
}
DevFS_AddDevice( &gSysFS_DriverInfo );
return MODULE_ERR_OK;
}
@@
-152,8
+164,7
@@
int SysFS_RegisterFile(const char *Path, const char *Data, int Length)
child->Node.NumACLs = 1;
child->Node.ACLs = &gVFS_ACL_EveryoneRX;
child->Node.Flags = VFS_FFLAG_DIRECTORY;
child->Node.NumACLs = 1;
child->Node.ACLs = &gVFS_ACL_EveryoneRX;
child->Node.Flags = VFS_FFLAG_DIRECTORY;
- child->Node.ReadDir = SysFS_Comm_ReadDir;
- child->Node.FindDir = SysFS_Comm_FindDir;
+ child->Node.Type = &gSysFS_DirNodeType;
if( !prev ) {
if(ent)
ent->Node.ImplPtr = child;
if( !prev ) {
if(ent)
ent->Node.ImplPtr = child;
@@
-206,8
+217,7
@@
int SysFS_RegisterFile(const char *Path, const char *Data, int Length)
child->Node.Size = Length;
child->Node.NumACLs = 1;
child->Node.ACLs = &gVFS_ACL_EveryoneRO;
child->Node.Size = Length;
child->Node.NumACLs = 1;
child->Node.ACLs = &gVFS_ACL_EveryoneRO;
- child->Node.Read = SysFS_Comm_ReadFile;
- child->Node.Close = SysFS_Comm_CloseFile;
+ child->Node.Type = &gSysFS_FileNodeType;
// Add to parent's child list
if(ent) {
// Add to parent's child list
if(ent) {
@@
-301,7
+311,10
@@
int SysFS_RemoveFile(int ID)
}
// Remove from parent directory
}
// Remove from parent directory
- prev->Next = ent->Next;
+ if(prev)
+ prev->Next = ent->Next;
+ else
+ parent->Node.ImplPtr = ent->Next;
// Free if not in use
if(file->Node.ReferenceCount == 0)
// Free if not in use
if(file->Node.ReferenceCount == 0)
UCC
git Repository :: git.ucc.asn.au