X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fvfs%2Fmain.c;fp=Kernel%2Fvfs%2Fmain.c;h=795a64fa905fbf7718fe833e1d951f57335c5efb;hb=243bdab4e7acc8516d9b1c138f45dc1195f97767;hp=3d1f8e58201aa715afaa38a3e655b58c0f13e4e9;hpb=f035491c949cb86d92a93fc3d9d033538704256b;p=tpg%2Facess2.git diff --git a/Kernel/vfs/main.c b/Kernel/vfs/main.c index 3d1f8e58..795a64fa 100644 --- a/Kernel/vfs/main.c +++ b/Kernel/vfs/main.c @@ -3,6 +3,7 @@ * Virtual File System */ #include +#include #include "vfs.h" #include "vfs_int.h" #include "vfs_ext.h" @@ -11,10 +12,23 @@ extern tVFS_Driver gRootFS_Info; extern tVFS_Driver gDevFS_Info; +// === PROTOTYPES === + int VFS_Init(); +char *VFS_GetTruePath(char *Path); +void VFS_GetMemPath(void *Base, Uint Length, char *Dest); +tVFS_Driver *VFS_GetFSByName(char *Name); + int VFS_AddDriver(tVFS_Driver *Info); +void VFS_UpdateDriverFile(); + // === GLOBALS === tVFS_Node NULLNode = {0}; -static int siDriverListLock = 0; +tSpinlock siDriverListLock = 0; tVFS_Driver *gVFS_Drivers = NULL; +char *gsVFS_DriverFile = NULL; + int giVFS_DriverFileID = 0; + +char *gsVFS_MountFile = NULL; + int giVFS_MountFileID = 0; // === CODE === /** @@ -26,6 +40,11 @@ int VFS_Init() // Core Drivers gVFS_Drivers = &gRootFS_Info; gVFS_Drivers->Next = &gDevFS_Info; + VFS_UpdateDriverFile(); + + // Register with SysFS + giVFS_MountFileID = SysFS_RegisterFile("VFS/Mounts", NULL, 0); + giVFS_DriverFileID = SysFS_RegisterFile("VFS/Drivers", NULL, 0); VFS_Mount("root", "/", "rootfs", ""); VFS_MkDir("/Devices"); @@ -99,5 +118,38 @@ int VFS_AddDriver(tVFS_Driver *Info) gVFS_Drivers = Info; RELEASE( &siDriverListLock ); + VFS_UpdateDriverFile(); + return 0; } + +/** + * \fn void VFS_UpdateDriverFile() + * \brief Updates the driver list file + */ +void VFS_UpdateDriverFile() +{ + tVFS_Driver *drv; + int len = 0; + char *buf; + + // Format: + // \n + for( drv = gVFS_Drivers; drv; drv = drv->Next ) + { + len += 1 + strlen(drv->Name); + } + buf = malloc(len+1); + len = 0; + for( drv = gVFS_Drivers; drv; drv = drv->Next ) + { + strcpy( &buf[len], drv->Name ); + len += strlen(drv->Name); + buf[len++] = '\n'; + } + buf[len] = '\0'; + + SysFS_UpdateFile( giVFS_DriverFileID, buf, len ); + if(gsVFS_DriverFile) free(gsVFS_DriverFile); + gsVFS_DriverFile = buf; +}