X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FFilesystems%2FInitRD%2Fmain.c;h=c86c512f2abc2c8a16ec136db9dca7b095743ad7;hb=eb42cce3c834d711e888d7866db98c563710993d;hp=3ee61ac4f236189a1d3e93d609c6eb3da2beca79;hpb=abd558102d7cd4b24f9e01cdeb5f7966e69d24e9;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Filesystems/InitRD/main.c b/KernelLand/Modules/Filesystems/InitRD/main.c index 3ee61ac4..c86c512f 100644 --- a/KernelLand/Modules/Filesystems/InitRD/main.c +++ b/KernelLand/Modules/Filesystems/InitRD/main.c @@ -17,15 +17,18 @@ extern tVFS_Node * const gInitRD_FileList[]; tVFS_Node *InitRD_InitDevice(const char *Device, const char **Arguments); void InitRD_Unmount(tVFS_Node *Node); tVFS_Node *InitRD_GetNodeFromINode(tVFS_Node *Root, Uint64 Inode); -size_t InitRD_ReadFile(tVFS_Node *Node, off_t Offset, size_t Size, void *Buffer); -char *InitRD_ReadDir(tVFS_Node *Node, int ID); -tVFS_Node *InitRD_FindDir(tVFS_Node *Node, const char *Name); +size_t InitRD_ReadFile(tVFS_Node *Node, off_t Offset, size_t Size, void *Buffer, Uint Flags); + int InitRD_ReadDir(tVFS_Node *Node, int ID, char Dest[FILENAME_MAX]); +tVFS_Node *InitRD_FindDir(tVFS_Node *Node, const char *Name, Uint Flags); void InitRD_DumpDir(tVFS_Node *Node, int Indent); // === GLOBALS === MODULE_DEFINE(0, 0x0A, FS_InitRD, InitRD_Install, NULL); tVFS_Driver gInitRD_FSInfo = { - "initrd", 0, InitRD_InitDevice, InitRD_Unmount, InitRD_GetNodeFromINode + .Name = "initrd", + .InitDevice = InitRD_InitDevice, + .Unmount = InitRD_Unmount, + .GetNodeFromINode = InitRD_GetNodeFromINode }; tVFS_NodeType gInitRD_DirType = { .ReadDir = InitRD_ReadDir, @@ -40,7 +43,6 @@ tVFS_NodeType gInitRD_FileType = { */ int InitRD_Install(char **Arguments) { - Log_Notice("InitRD", "Installed"); VFS_AddDriver( &gInitRD_FSInfo ); return MODULE_ERR_OK; @@ -54,7 +56,6 @@ tVFS_Node *InitRD_InitDevice(const char *Device, const char **Arguments) #if DUMP_ON_MOUNT InitRD_DumpDir( &gInitRD_RootNode, 0 ); #endif - Log_Notice("InitRD", "Mounted (%i files)", giInitRD_NumFiles); return &gInitRD_RootNode; } @@ -76,7 +77,7 @@ tVFS_Node *InitRD_GetNodeFromINode(tVFS_Node *Root, Uint64 Inode) /** * \brief Read from a file */ -size_t InitRD_ReadFile(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) +size_t InitRD_ReadFile(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags) { if(Offset > Node->Size) return 0; @@ -91,20 +92,21 @@ size_t InitRD_ReadFile(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffe /** * \brief Read from a directory */ -char *InitRD_ReadDir(tVFS_Node *Node, int ID) +int InitRD_ReadDir(tVFS_Node *Node, int ID, char Dest[FILENAME_MAX]) { tInitRD_File *dir = Node->ImplPtr; if(ID >= Node->Size) - return NULL; + return -EINVAL; - return strdup(dir[ID].Name); + strncpy(Dest, dir[ID].Name, FILENAME_MAX); + return 0; } /** * \brief Find an element in a directory */ -tVFS_Node *InitRD_FindDir(tVFS_Node *Node, const char *Name) +tVFS_Node *InitRD_FindDir(tVFS_Node *Node, const char *Name, Uint Flags) { int i; tInitRD_File *dir = Node->ImplPtr;