X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Fproc.c;h=3283c864ae0565792dab10f3fa3fe36e7660a074;hb=0542d0b19b79f6439ace9c0f9e35ec29a8af91f9;hp=cf19a66a821dd52e8de19c13904f2ccb551ad845;hpb=6a945643557084578509e149c84cf5dde3c59c3c;p=tpg%2Facess2.git diff --git a/Kernel/drv/proc.c b/Kernel/drv/proc.c index cf19a66a..3283c864 100644 --- a/Kernel/drv/proc.c +++ b/Kernel/drv/proc.c @@ -10,7 +10,6 @@ // === 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 @@ -26,9 +25,11 @@ typedef struct sSysFS_Ent int SysFS_Install(char **Arguments); int SysFS_IOCtl(tVFS_Node *Node, int Id, void *Data); - int SysFS_RegisterFile(char *Path, char *Data, int Length); - int SysFS_UpdateFile(int ID, char *Data, int Length); +#if 0 + int SysFS_RegisterFile(const char *Path, const char *Data, int Length); + int SysFS_UpdateFile(int ID, const char *Data, int Length); int SysFS_RemoveFile(int ID); +#endif char *SysFS_Comm_ReadDir(tVFS_Node *Node, int Id); tVFS_Node *SysFS_Comm_FindDir(tVFS_Node *Node, const char *Filename); @@ -44,9 +45,9 @@ tSysFS_Ent gSysFS_Version_Kernel = { &gSysFS_Version, // Parent { .Inode = 1, // File #1 - .ImplPtr = KERNEL_VERSION_STRING, + .ImplPtr = NULL, .ImplInt = (Uint)&gSysFS_Version_Kernel, // Self-Link - .Size = sizeof(KERNEL_VERSION_STRING)-1, + .Size = 0, .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRO, .Read = SysFS_Comm_ReadFile @@ -102,6 +103,13 @@ tSysFS_Ent *gSysFS_FileList; */ 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; } @@ -114,7 +122,7 @@ int SysFS_Install(char **Options) * \param Length Length of the data buffer * \return The file's identifier */ -int SysFS_RegisterFile(char *Path, char *Data, int Length) +int SysFS_RegisterFile(const char *Path, const char *Data, int Length) { int start = 0; int tmp; @@ -153,10 +161,10 @@ int SysFS_RegisterFile(char *Path, char *Data, int Length) child->Node.ReadDir = SysFS_Comm_ReadDir; child->Node.FindDir = SysFS_Comm_FindDir; if( !prev ) { - //if(ent) + if(ent) ent->Node.ImplPtr = child; - //else - // gSysFS_DriverInfo.RootNode.ImplPtr = child; + else + gSysFS_DriverInfo.RootNode.ImplPtr = child; // ^^^ Impossible (There is already /Version) } else @@ -182,7 +190,7 @@ int SysFS_RegisterFile(char *Path, char *Data, int Length) child = ent->Node.ImplPtr; else child = gSysFS_DriverInfo.RootNode.ImplPtr; - for( child = ent->Node.ImplPtr; child; prev = child, child = child->Next ) + for( ; child; child = child->Next ) { if( strcmp( &Path[start], child->Name ) == 0 ) break; @@ -199,7 +207,7 @@ int SysFS_RegisterFile(char *Path, char *Data, int Length) child->Parent = ent; child->Node.Inode = giSysFS_NextFileID++; - child->Node.ImplPtr = Data; + child->Node.ImplPtr = (void*)Data; child->Node.ImplInt = (Uint)child; // Uplink child->Node.Size = Length; child->Node.NumACLs = 1; @@ -235,7 +243,7 @@ int SysFS_RegisterFile(char *Path, char *Data, int Length) * \param Length Length of the data buffer * \return Boolean Success */ -int SysFS_UpdateFile(int ID, char *Data, int Length) +int SysFS_UpdateFile(int ID, const char *Data, int Length) { tSysFS_Ent *ent; @@ -245,7 +253,7 @@ int SysFS_UpdateFile(int ID, char *Data, int Length) if(ent->Node.Inode < ID) return 0; if(ent->Node.Inode == ID) { - ent->Node.ImplPtr = Data; + ent->Node.ImplPtr = (void*)Data; ent->Node.Size = Length; return 1; } @@ -281,7 +289,10 @@ int SysFS_RemoveFile(int ID) parent = file->Parent; // Remove from file list - prev->ListNext = file->ListNext; + if(prev) + prev->ListNext = file->ListNext; + else + gSysFS_FileList = file->ListNext; file->Node.Size = 0; file->Node.ImplPtr = NULL; @@ -296,7 +307,10 @@ int SysFS_RemoveFile(int ID) } // 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)