X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Fproc.c;h=cf19a66a821dd52e8de19c13904f2ccb551ad845;hb=05a77640b59762adb12a71927ea4e003fd033102;hp=c007c32676d692788f00bf24b84cfb31e3da3d00;hpb=4ab9a574c9301d9590c91209f62c348e1d8c8883;p=tpg%2Facess2.git diff --git a/Kernel/drv/proc.c b/Kernel/drv/proc.c index c007c326..cf19a66a 100644 --- a/Kernel/drv/proc.c +++ b/Kernel/drv/proc.c @@ -18,8 +18,8 @@ typedef struct sSysFS_Ent struct sSysFS_Ent *Next; struct sSysFS_Ent *ListNext; struct sSysFS_Ent *Parent; - char *Name; tVFS_Node Node; + char Name[]; } tSysFS_Ent; // === PROTOTYPES === @@ -31,7 +31,7 @@ typedef struct sSysFS_Ent int SysFS_RemoveFile(int ID); char *SysFS_Comm_ReadDir(tVFS_Node *Node, int Id); -tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, char *Filename); +tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, const char *Filename); Uint64 SysFS_Comm_ReadFile(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer); void SysFS_Comm_CloseFile(tVFS_Node *Node); @@ -42,7 +42,6 @@ MODULE_DEFINE(0, VERSION, SysFS, SysFS_Install, NULL, NULL); tSysFS_Ent gSysFS_Version_Kernel = { NULL, NULL, // Nexts &gSysFS_Version, // Parent - "Kernel", { .Inode = 1, // File #1 .ImplPtr = KERNEL_VERSION_STRING, @@ -51,12 +50,12 @@ tSysFS_Ent gSysFS_Version_Kernel = { .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRO, .Read = SysFS_Comm_ReadFile - } + }, + "Kernel" }; tSysFS_Ent gSysFS_Version = { NULL, NULL, &gSysFS_Root, - "Version", { .Size = 1, .ImplPtr = &gSysFS_Version_Kernel, @@ -66,18 +65,19 @@ tSysFS_Ent gSysFS_Version = { .Flags = VFS_FFLAG_DIRECTORY, .ReadDir = SysFS_Comm_ReadDir, .FindDir = SysFS_Comm_FindDir - } + }, + "Version" }; // Root of the SysFS tree (just used to keep the code clean) tSysFS_Ent gSysFS_Root = { NULL, NULL, NULL, - "/", { .Size = 1, .ImplPtr = &gSysFS_Version, .ImplInt = (Uint)&gSysFS_Root // Self-Link - } + }, + "/" }; tDevFS_Driver gSysFS_DriverInfo = { NULL, "system", @@ -139,9 +139,8 @@ int SysFS_RegisterFile(char *Path, char *Data, int Length) // Need a new directory? if( !child ) { - child = calloc( 1, sizeof(tSysFS_Ent) ); + child = calloc( 1, sizeof(tSysFS_Ent)+tmp+1 ); child->Next = NULL; - child->Name = malloc(tmp+1); memcpy(child->Name, &Path[start], tmp); child->Name[tmp] = '\0'; child->Parent = ent; @@ -194,9 +193,9 @@ int SysFS_RegisterFile(char *Path, char *Data, int Length) } // Create new node - child = calloc( 1, sizeof(tSysFS_Ent) ); + child = calloc( 1, sizeof(tSysFS_Ent)+strlen(&Path[start])+1 ); child->Next = NULL; - child->Name = strdup(&Path[start]); + strcpy(child->Name, &Path[start]); child->Parent = ent; child->Node.Inode = giSysFS_NextFileID++; @@ -323,10 +322,10 @@ char *SysFS_Comm_ReadDir(tVFS_Node *Node, int Pos) } /** - * \fn tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, char *Filename) + * \fn tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, const char *Filename) * \brief Find a file in a SysFS directory */ -tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, char *Filename) +tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, const char *Filename) { tSysFS_Ent *child = (tSysFS_Ent*)Node->ImplPtr;