#include "initrd.h"
#include <modules.h>
-#define DUMP_ON_MOUNT 1
+#define DUMP_ON_MOUNT 0
// === IMPORTS ==
extern tVFS_Node gInitRD_RootNode;
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);
-Uint64 InitRD_ReadFile(tVFS_Node *Node, Uint64 Offset, Uint64 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_ReadFile,
+ .ReadDir = InitRD_ReadDir,
.FindDir = InitRD_FindDir
};
tVFS_NodeType gInitRD_FileType = {
*/
int InitRD_Install(char **Arguments)
{
- Log_Notice("InitRD", "Installed");
VFS_AddDriver( &gInitRD_FSInfo );
return MODULE_ERR_OK;
#if DUMP_ON_MOUNT
InitRD_DumpDir( &gInitRD_RootNode, 0 );
#endif
- Log_Notice("InitRD", "Mounted (%i files)", giInitRD_NumFiles);
return &gInitRD_RootNode;
}
/**
* \brief Read from a file
*/
-Uint64 InitRD_ReadFile(tVFS_Node *Node, Uint64 Offset, Uint64 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;
/**
* \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;