X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FFilesystems%2FNTFS%2Fmain.c;h=5ace333351e8feb930f384b8e634dee824fd696c;hb=0b9aaf1442259bb14619b92e251f6535b3dc0dd1;hp=3fdab017e86465db2dc0d12bfdc6072bb3dc8072;hpb=377247d261f82cc9c26ccd06cc075594b12bd760;p=tpg%2Facess2.git diff --git a/Modules/Filesystems/NTFS/main.c b/Modules/Filesystems/NTFS/main.c index 3fdab017..5ace3333 100644 --- a/Modules/Filesystems/NTFS/main.c +++ b/Modules/Filesystems/NTFS/main.c @@ -37,11 +37,40 @@ int NTFS_Install(char **Arguments) */ tVFS_Node *NTFS_InitDevice(char *Device, char **Options) { - char *path, *host; tNTFS_Disk *disk; + tNTFS_BootSector bs; disk = malloc( sizeof(tNTFS_Disk) ); + disk->FD = VFS_Open(Device, VFS_OPENFLAG_READ); + if(!disk->FD) { + free(disk); + return NULL; + } + + VFS_ReadAt(disk->FD, 0, 512, &bs); + + disk->ClusterSize = bs.BytesPerSector * bs.SectorsPerCluster; + Log_Debug("NTFS", "Cluster Size = %i KiB", disk->ClusterSize/1024); + disk->MFTBase = bs.MFTStart; + Log_Debug("NTFS", "MFT Base = %i", disk->MFTBase); + + disk->RootNode.Inode = 5; // MFT Ent #5 is '.' + disk->RootNode.ImplPtr = disk; + + disk->RootNode.UID = 0; + disk->RootNode.GID = 0; + + disk->RootNode.NumACLs = 1; + disk->RootNode.ACLs = &gVFS_ACL_EveryoneRX; + + disk->RootNode.ReadDir = NTFS_ReadDir; + disk->RootNode.FindDir = NTFS_FindDir; + disk->RootNode.MkNod = NULL; + disk->RootNode.Link = NULL; + disk->RootNode.Relink = NULL; + disk->RootNode.Close = NULL; + return &disk->RootNode; }