VFS - Rework to remove function pointers from tVFS_Node
[tpg/acess2.git] / Modules / Filesystems / FAT / fat.c
index af73322..f5d1916 100644 (file)
@@ -90,6 +90,24 @@ MODULE_DEFINE(0, (0<<8)|50 /*v0.50*/, VFAT, FAT_Install, NULL, NULL);
 tFAT_VolInfo   gFAT_Disks[8];\r
  int   giFAT_PartCount = 0;\r
 tVFS_Driver    gFAT_FSInfo = {"fat", 0, FAT_InitDevice, FAT_Unmount, FAT_GetNodeFromINode, NULL};\r
+tVFS_NodeType  gFAT_DirType = {\r
+       .TypeName = "FAT-Dir",\r
+       .ReadDir = FAT_ReadDir,\r
+       .FindDir = FAT_FindDir,\r
+       #if SUPPORT_WRITE\r
+       .MkNod = FAT_Mknod,\r
+       .Relink = FAT_Relink,\r
+       #endif\r
+       .Close = FAT_CloseFile\r
+       };\r
+tVFS_NodeType  gFAT_FileType = {\r
+       .TypeName = "FAT-File",\r
+       .Read = FAT_Read,\r
+       #if SUPPORT_WRITE\r
+       .Write = FAT_Write,\r
+       #endif\r
+       .Close = FAT_CloseFile\r
+       };\r
 \r
 // === CODE ===\r
 /**\r
@@ -273,18 +291,8 @@ tVFS_Node *FAT_InitDevice(const char *Device, const char **Options)
        node->ACLs = &gVFS_ACL_EveryoneRWX;\r
        node->Flags = VFS_FFLAG_DIRECTORY;\r
        node->CTime = node->MTime = node->ATime = now();\r
-       \r
-       node->Read = node->Write = NULL;\r
-       node->ReadDir = FAT_ReadDir;\r
-       node->FindDir = FAT_FindDir;\r
-       #if SUPPORT_WRITE\r
-       node->Relink = FAT_Relink;\r
-       node->MkNod = FAT_Mknod;\r
-       #else\r
-       node->Relink = NULL;\r
-       node->MkNod = NULL;\r
-       #endif\r
-       //node->Close = FAT_Unmount;\r
+\r
+       node->Type = &gFAT_DirType;     \r
        \r
        giFAT_PartCount ++;\r
        return node;\r
@@ -977,21 +985,12 @@ tVFS_Node *FAT_int_CreateNode(tVFS_Node *Parent, fat_filetable *Entry, int Pos)
        // Set pointers\r
        if(node.Flags & VFS_FFLAG_DIRECTORY) {\r
                //Log_Debug("FAT", "Directory %08x has size 0x%x", node.Inode, node.Size);\r
-               node.ReadDir = FAT_ReadDir;\r
-               node.FindDir = FAT_FindDir;\r
-               #if SUPPORT_WRITE\r
-               node.MkNod = FAT_Mknod;\r
-               node.Relink = FAT_Relink;\r
-               #endif\r
+               node.Type = &gFAT_DirType;      \r
                node.Size = -1;\r
        }\r
        else {\r
-               node.Read = FAT_Read;\r
-               #if SUPPORT_WRITE\r
-               node.Write = FAT_Write;\r
-               #endif\r
+               node.Type = &gFAT_FileType;\r
        }\r
-       node.Close = FAT_CloseFile;\r
        \r
        ret = Inode_CacheNode(disk->inodeHandle, &node);\r
        LEAVE('p', ret);\r

UCC git Repository :: git.ucc.asn.au