From 6452e375b1fb3b997bbe8597a681bfd50cdfeab6 Mon Sep 17 00:00:00 2001 From: Patrick McIlroy Date: Wed, 11 Aug 2010 07:56:07 +0000 Subject: [PATCH] - Add proper Win32 support for retrieving disk space git-svn-id: https://openitg.svn.sourceforge.net/svnroot/openitg/branches/dev@789 83fadc84-e282-4d84-a09a-c4228d6ae7e5 --- src/StepMania.cpp | 10 ++++++---- src/arch/ArchHooks/ArchHooks_Win32.cpp | 27 ++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/StepMania.cpp b/src/StepMania.cpp index a0e2f340..dfd2d9da 100755 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -1010,10 +1010,6 @@ int main(int argc, char* argv[]) LOG = new RageLog(); /* Whew--we should be able to crash safely now! */ - LOG->Info( "%llu bytes total, %llu bytes remaining.", - HOOKS->GetDiskSpaceTotal( "UserPacks" ), - HOOKS->GetDiskSpaceFree( "UserPacks" ) - ); // // load preferences and mount any alternative trees. @@ -1036,6 +1032,12 @@ int main(int argc, char* argv[]) WriteLogHeader(); + uint64_t iSpaceTotal = HOOKS->GetDiskSpaceTotal( "/UserPacks" ); + uint64_t iSpaceFree = HOOKS->GetDiskSpaceFree( "/UserPacks" ); + + LOG->Info( "%llu bytes total", iSpaceTotal ); + LOG->Info( "%llu bytes remaining", iSpaceFree ); + /* Set up alternative filesystem trees. */ if( PREFSMAN->m_sAdditionalFolders.Get() != "" ) { diff --git a/src/arch/ArchHooks/ArchHooks_Win32.cpp b/src/arch/ArchHooks/ArchHooks_Win32.cpp index 69280840..4a6aa93f 100755 --- a/src/arch/ArchHooks/ArchHooks_Win32.cpp +++ b/src/arch/ArchHooks/ArchHooks_Win32.cpp @@ -190,7 +190,7 @@ void ArchHooks_Win32::MountInitialFilesystems( const CString &sDirOfExecutable ) } // OpenITG-specific file paths - FILEMAN->Mount( "kry", Dir + "/CryptPackages", "/Packages" ); + FILEMAN->Mount( "oitg", Dir + "/CryptPackages", "/Packages" ); /* This mounts everything else, including Data, etc. */ FILEMAN->Mount( "dir", Dir, "/" ); @@ -219,20 +219,37 @@ void ArchHooks_Win32::SystemReboot( bool bForceSync ) static void GetDiskSpace( const CString &sDir, uint64_t *pSpaceFree, uint64_t *pSpaceTotal ) { - CString sResolvedDir = FILEMAN->ResolvePath( sDir ); - if( GetDiskFreeSpaceEx( sResolvedDir.c_str(), pSpaceFree, pSpaceTotal, NULL ) != 0 ) + if( GetDiskFreeSpaceEx( sDir.c_str(), (PULARGE_INTEGER)pSpaceFree, (PULARGE_INTEGER)pSpaceTotal, NULL ) == 0 ) LOG->Warn( werr_ssprintf(GetLastError(), "GetDiskSpace() failed") ); } -uint64_t ArchHooks_Win32::GetDiskSpaceFree( const CString &sDir ) +uint64_t ArchHooks_Win32::GetDiskSpaceFree( const CString &sDir_ ) { + CString sDir = FILEMAN->ResolvePath( sDir_ ); + + // remove beginning slash: + // /D:/path/to/stepmania + sDir = sDir.substr(1); + for( unsigned i = 0; i < sDir.size(); ++i ) + if( sDir[i] == '/' ) + sDir[i] = '\\'; + uint64_t iDiskSpaceFree = 0; GetDiskSpace( sDir, &iDiskSpaceFree, NULL ); return iDiskSpaceFree; } -uint64_t ArchHooks_Win32::GetDiskSpaceTotal( const CString &sDir ) +uint64_t ArchHooks_Win32::GetDiskSpaceTotal( const CString &sDir_ ) { + CString sDir = FILEMAN->ResolvePath( sDir_ ); + + // remove beginning slash: + // /D:/path/to/stepmania + sDir = sDir.substr(1); + for( unsigned i = 0; i < sDir.size(); ++i ) + if( sDir[i] == '/' ) + sDir[i] = '\\'; + uint64_t iDiskSpaceTotal = 0; GetDiskSpace( sDir, NULL, &iDiskSpaceTotal ); return iDiskSpaceTotal; -- 2.11.0