Show sizes for virtual drives

This commit is contained in:
d0k3 2017-01-17 23:24:46 +01:00
parent ae2adbceea
commit 74ff158c93
9 changed files with 31 additions and 1 deletions

View File

@ -194,7 +194,8 @@ uint64_t GetFreeSpace(const char* path)
uint64_t GetTotalSpace(const char* path) uint64_t GetTotalSpace(const char* path)
{ {
FATFS* fsobj = GetMountedFSObject(path); FATFS* fsobj = GetMountedFSObject(path);
return (fsobj) ? ((uint64_t) (fsobj->n_fatent - 2) * fsobj->csize * _MAX_SS) : 0; return (fsobj) ? ((uint64_t) (fsobj->n_fatent - 2) * fsobj->csize * _MAX_SS) :
GetVirtualDriveSize(path);
} }
uint64_t GetPartitionOffsetSector(const char* path) uint64_t GetPartitionOffsetSector(const char* path)

View File

@ -44,3 +44,7 @@ int ReadVCartFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count) {
return ReadCartPrivateHeader(buffer, offset, count, cdata); return ReadCartPrivateHeader(buffer, offset, count, cdata);
else return ReadCartBytes(buffer, offset, count, cdata); else return ReadCartBytes(buffer, offset, count, cdata);
} }
u64 GetVCartDriveSize(void) {
return cart_init ? cdata->cart_size : 0;
}

View File

@ -7,3 +7,4 @@ u32 InitVCartDrive(void);
bool ReadVCartDir(VirtualFile* vfile, VirtualDir* vdir); bool ReadVCartDir(VirtualFile* vfile, VirtualDir* vdir);
int ReadVCartFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count); int ReadVCartFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count);
// int WriteVCartFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count); // no writes // int WriteVCartFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count); // no writes
u64 GetVCartDriveSize(void);

View File

@ -743,3 +743,7 @@ bool MatchVGameLv3Filename(const char* name, const VirtualFile* vfile, u32 n_cha
if (!GetVGameLv3Filename(lv3_name, vfile, 256)) return false; if (!GetVGameLv3Filename(lv3_name, vfile, 256)) return false;
return (strncasecmp(name, lv3_name, n_chars) == 0); return (strncasecmp(name, lv3_name, n_chars) == 0);
} }
u64 GetVGameDriveSize(void) {
return (vgame_type) ? GetMountSize() : 0;
}

View File

@ -15,3 +15,5 @@ int ReadVGameFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count);
bool FindVirtualFileInLv3Dir(VirtualFile* vfile, const VirtualDir* vdir, const char* name); bool FindVirtualFileInLv3Dir(VirtualFile* vfile, const VirtualDir* vdir, const char* name);
bool GetVGameLv3Filename(char* name, const VirtualFile* vfile, u32 n_chars); bool GetVGameLv3Filename(char* name, const VirtualFile* vfile, u32 n_chars);
bool MatchVGameLv3Filename(const char* name, const VirtualFile* vfile, u32 n_chars); bool MatchVGameLv3Filename(const char* name, const VirtualFile* vfile, u32 n_chars);
u64 GetVGameDriveSize(void);

View File

@ -193,3 +193,14 @@ int WriteVirtualFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32
return -1; return -1;
} }
u64 GetVirtualDriveSize(const char* path) {
u32 virtual_src = GetVirtualSource(path);
if (virtual_src & (VRT_SYSNAND|VRT_EMUNAND|VRT_IMGNAND))
return GetVNandDriveSize(virtual_src);
else if (virtual_src & VRT_GAME)
return GetVGameDriveSize();
else if (virtual_src & VRT_CART)
return GetVCartDriveSize();
return 0;
}

View File

@ -59,3 +59,5 @@ bool GetVirtualFilename(char* name, const VirtualFile* vfile, u32 n_chars);
int ReadVirtualFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count, u32* bytes_read); int ReadVirtualFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count, u32* bytes_read);
int WriteVirtualFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count, u32* bytes_written); int WriteVirtualFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count, u32* bytes_written);
u64 GetVirtualDriveSize(const char* path);

View File

@ -97,3 +97,7 @@ int WriteVNandFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 c
if ((res == 0) && (vfile->flags & VFLAG_GBA_VC)) res = FixAgbSaveCmac(nand_dst); if ((res == 0) && (vfile->flags & VFLAG_GBA_VC)) res = FixAgbSaveCmac(nand_dst);
return res; return res;
} }
u64 GetVNandDriveSize(u32 nand_src) {
return GetNandSizeSectors(nand_src) * 0x200;
}

View File

@ -7,3 +7,4 @@ bool CheckVNandDrive(u32 nand_src);
bool ReadVNandDir(VirtualFile* vfile, VirtualDir* vdir); bool ReadVNandDir(VirtualFile* vfile, VirtualDir* vdir);
int ReadVNandFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count); int ReadVNandFile(const VirtualFile* vfile, u8* buffer, u32 offset, u32 count);
int WriteVNandFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count); int WriteVNandFile(const VirtualFile* vfile, const u8* buffer, u32 offset, u32 count);
u64 GetVNandDriveSize(u32 nand_src);