diff --git a/src/PrefsManager.cpp b/src/PrefsManager.cpp index d6e7f21cc1..6e1b76e694 100644 --- a/src/PrefsManager.cpp +++ b/src/PrefsManager.cpp @@ -264,9 +264,15 @@ PrefsManager::PrefsManager() : m_CourseSortOrder ( "CourseSortOrder", COURSE_SORT_SONGS ), m_bSubSortByNumSteps ( "SubSortByNumSteps", false ), m_GetRankingName ( "GetRankingName", RANKING_ON ), - m_sAdditionalSongFolders ( "AdditionalSongFolders", "", nullptr, PreferenceType::Immutable ), - m_sAdditionalCourseFolders ( "AdditionalCourseFolders", "", nullptr, PreferenceType::Immutable ), - m_sAdditionalFolders ( "AdditionalFolders", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalSongFoldersReadOnly( "AdditionalSongFoldersReadOnly", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalSongFoldersWritable( "AdditionalSongFoldersWritable", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalCourseFoldersReadOnly( "AdditionalCourseFoldersReadOnly", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalCourseFoldersWritable( "AdditionalCourseFoldersWritable", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalFoldersReadOnly ( "AdditionalFoldersReadOnly", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalFoldersWritable ( "AdditionalFoldersWritable", "", nullptr, PreferenceType::Immutable ), + m_sAdditionalSongFolders ( "AdditionalSongFolders", "", nullptr, PreferenceType::Deprecated ), + m_sAdditionalCourseFolders ( "AdditionalCourseFolders", "", nullptr, PreferenceType::Deprecated ), + m_sAdditionalFolders ( "AdditionalFolders", "", nullptr, PreferenceType::Deprecated ), m_sDefaultTheme ( "DefaultTheme", "default" ), m_sLastSeenVideoDriver ( "LastSeenVideoDriver", "" ), m_sVideoRenderers ( "VideoRenderers", "" ), // StepMania.cpp sets these on first run: @@ -405,6 +411,8 @@ void PrefsManager::ReadPrefsFromDisk() ReadGamePrefsFromIni( SpecialFiles::PREFERENCES_INI_PATH ); ReadPrefsFromFile( SpecialFiles::STATIC_INI_PATH, GetPreferencesSection(), true ); + TranslateDeprecatedFlags(); + if( !m_sCurrentGame.Get().empty() ) RestoreGamePrefs(); } @@ -416,6 +424,8 @@ void PrefsManager::ResetToFactoryDefaults() IPreference::LoadAllDefaults(); ReadPrefsFromFile( SpecialFiles::STATIC_INI_PATH, GetPreferencesSection(), true ); + TranslateDeprecatedFlags(); + SavePrefsToDisk(); } @@ -500,6 +510,16 @@ void PrefsManager::ReadDefaultsFromIni( const IniFile &ini, const RString &sSect IPreference::ReadAllDefaultsFromNode( ini.GetChild(sSection) ); } +void PrefsManager::TranslateDeprecatedFlags() +{ + if(!m_sAdditionalFolders.Get().empty()) + m_sAdditionalFoldersReadOnly.Set(m_sAdditionalFolders.Get()); + if(!m_sAdditionalSongFolders.Get().empty()) + m_sAdditionalSongFoldersReadOnly.Set(m_sAdditionalSongFolders.Get()); + if(!m_sAdditionalCourseFolders.Get().empty()) + m_sAdditionalCourseFoldersReadOnly.Set(m_sAdditionalCourseFolders.Get()); +} + void PrefsManager::SavePrefsToDisk() { IniFile ini; diff --git a/src/PrefsManager.h b/src/PrefsManager.h index ce310af60e..de8428d435 100644 --- a/src/PrefsManager.h +++ b/src/PrefsManager.h @@ -275,9 +275,12 @@ public: Preference m_bSubSortByNumSteps; Preference m_GetRankingName; - Preference m_sAdditionalSongFolders; - Preference m_sAdditionalCourseFolders; - Preference m_sAdditionalFolders; + Preference m_sAdditionalSongFoldersReadOnly; + Preference m_sAdditionalSongFoldersWritable; + Preference m_sAdditionalCourseFoldersReadOnly; + Preference m_sAdditionalCourseFoldersWritable; + Preference m_sAdditionalFoldersReadOnly; + Preference m_sAdditionalFoldersWritable; // failsafe Preference m_sDefaultTheme; @@ -352,6 +355,11 @@ public: protected: void ReadPrefsFromFile( const RString &sIni, const RString &sSection, bool bIsStatic ); void ReadDefaultsFromFile( const RString &sIni, const RString &sSection ); + void TranslateDeprecatedFlags(); + + Preference m_sAdditionalSongFolders; // deprecated + Preference m_sAdditionalCourseFolders; // deprecated + Preference m_sAdditionalFolders; // deprecated }; /* This is global, because it can be accessed by crash handlers and error handlers diff --git a/src/RageFileManager.cpp b/src/RageFileManager.cpp index 950012f3f7..e8fbd9823f 100644 --- a/src/RageFileManager.cpp +++ b/src/RageFileManager.cpp @@ -22,7 +22,6 @@ RageFileManager *FILEMAN = nullptr; /* Lock this before touching any of these globals (except FILEMAN itself). */ static RageEvent *g_Mutex; -RString RageFileManagerUtil::sInitialWorkingDirectory; RString RageFileManagerUtil::sDirOfExecutable; struct LoadedDriver @@ -276,7 +275,6 @@ static RString GetDirOfExecutable( RString argv0 ) static void ChangeToDirOfExecutable( const RString &argv0 ) { - RageFileManagerUtil::sInitialWorkingDirectory = GetCwd(); RageFileManagerUtil::sDirOfExecutable = GetDirOfExecutable( argv0 ); /* Set the CWD. Any effects of this is platform-specific; most files are read and @@ -545,15 +543,15 @@ static void AdjustMountpoint( RString &sMountPoint ) } -static void AddFilesystemDriver( LoadedDriver *pLoadedDriver, bool bAddToEnd ) +static void AddFilesystemDriver( LoadedDriver *pLoadedDriver ) { g_Mutex->Lock(); - g_pDrivers.insert( bAddToEnd? g_pDrivers.end():g_pDrivers.begin(), pLoadedDriver ); + g_pDrivers.push_back(pLoadedDriver); g_Mountpoints->LoadFromDrivers( g_pDrivers ); g_Mutex->Unlock(); } -bool RageFileManager::Mount( const RString &sType, const RString &sRoot_, const RString &sMountPoint_, bool bAddToEnd ) +bool RageFileManager::Mount( const RString &sType, const RString &sRoot_, const RString &sMountPoint_ ) { RString sRoot = sRoot_; RString sMountPoint = sMountPoint_; @@ -593,26 +591,10 @@ bool RageFileManager::Mount( const RString &sType, const RString &sRoot_, const pLoadedDriver->m_sRoot = sRoot; pLoadedDriver->m_sMountPoint = sMountPoint; - AddFilesystemDriver( pLoadedDriver, bAddToEnd ); + AddFilesystemDriver( pLoadedDriver ); return true; } -/* Mount a custom filesystem. */ -void RageFileManager::Mount( RageFileDriver *pDriver, const RString &sMountPoint_, bool bAddToEnd ) -{ - RString sMountPoint = sMountPoint_; - - AdjustMountpoint( sMountPoint ); - - LoadedDriver *pLoadedDriver = new LoadedDriver; - pLoadedDriver->m_pDriver = pDriver; - pLoadedDriver->m_sType = ""; - pLoadedDriver->m_sRoot = ""; - pLoadedDriver->m_sMountPoint = sMountPoint; - - AddFilesystemDriver( pLoadedDriver, bAddToEnd ); -} - void RageFileManager::Unmount( const RString &sType, const RString &sRoot_, const RString &sMountPoint_ ) { RString sRoot = sRoot_; diff --git a/src/RageFileManager.h b/src/RageFileManager.h index c6ef53520c..cbe2ce64c0 100644 --- a/src/RageFileManager.h +++ b/src/RageFileManager.h @@ -3,7 +3,6 @@ /** @brief Constants for working with the RageFileManager. */ namespace RageFileManagerUtil { - extern RString sInitialWorkingDirectory; extern RString sDirOfExecutable; } @@ -48,8 +47,7 @@ public: * @return the absolute path. */ RString ResolvePath(const RString &path); - bool Mount( const RString &sType, const RString &sRealPath, const RString &sMountPoint, bool bAddToEnd = true ); - void Mount( RageFileDriver *pDriver, const RString &sMountPoint, bool bAddToEnd = true ); + bool Mount( const RString &sType, const RString &sRealPath, const RString &sMountPoint ); void Unmount( const RString &sType, const RString &sRoot, const RString &sMountPoint ); /* Change the root of a filesystem. Only a couple drivers support this; it's diff --git a/src/SpecialFiles.cpp b/src/SpecialFiles.cpp index eeab64fbed..55f3b02faf 100644 --- a/src/SpecialFiles.cpp +++ b/src/SpecialFiles.cpp @@ -1,7 +1,6 @@ #include "global.h" #include "SpecialFiles.h" -const RString SpecialFiles::USER_PACKAGES_DIR = "UserPackages/"; const RString SpecialFiles::PACKAGES_DIR = "Packages/"; const RString SpecialFiles::KEYMAPS_PATH = "Save/Keymaps.ini"; const RString SpecialFiles::EDIT_MODE_KEYMAPS_PATH = "Save/EditMode_Keymaps.ini"; diff --git a/src/SpecialFiles.h b/src/SpecialFiles.h index 0fe040e9bd..142e27d667 100644 --- a/src/SpecialFiles.h +++ b/src/SpecialFiles.h @@ -4,16 +4,6 @@ /** @brief The listing of the special files and directories in use. */ namespace SpecialFiles { - /** - * @brief The user packages directory. - * - * This should be separate from system packages so that - * we can write to it (installing a package). - */ - extern const RString USER_PACKAGES_DIR; - /** @brief The system packages directory. - * - * This is not the user packages directory. */ extern const RString PACKAGES_DIR; extern const RString KEYMAPS_PATH; /** @brief Edit Mode keymaps are separate from standard keymaps because diff --git a/src/StepMania.cpp b/src/StepMania.cpp index 8c507bbb95..518982c2d0 100644 --- a/src/StepMania.cpp +++ b/src/StepMania.cpp @@ -917,19 +917,30 @@ static void MountTreeOfZips( const RString &dir ) GetDirListing( path + "/*.zip", zips, false, true ); GetDirListing( path + "/*.smzip", zips, false, true ); - for( unsigned i = 0; i < zips.size(); ++i ) + for (const auto& zip : zips) { - if( !IsAFile(zips[i]) ) + if( !IsAFile(zip) ) continue; - LOG->Trace( "VFS: found %s", zips[i].c_str() ); - FILEMAN->Mount( "zip", zips[i], "/" ); + LOG->Trace( "VFS: found %s", zip.c_str() ); + FILEMAN->Mount( "zip", zip, "/" ); } GetDirListing( path + "/*", dirs, true, true ); } } +static void MountFolders(const RString &type, const RString &realPathList, const RString &mountPoint) +{ + if (!realPathList.empty()) + { + vector dirs; + split(realPathList, ",", dirs, true); + for (const auto& dir : dirs) + FILEMAN->Mount(type, dir, mountPoint); + } +} + static void WriteLogHeader() { LOG->Info("%s%s", PRODUCT_FAMILY, product_version); @@ -1022,30 +1033,14 @@ int sm_main(int argc, char* argv[]) WriteLogHeader(); // Set up alternative filesystem trees. - if( PREFSMAN->m_sAdditionalFolders.Get() != "" ) - { - vector dirs; - split( PREFSMAN->m_sAdditionalFolders, ",", dirs, true ); - for( unsigned i=0; i < dirs.size(); i++) - FILEMAN->Mount( "dir", dirs[i], "/" ); - } - if( PREFSMAN->m_sAdditionalSongFolders.Get() != "" ) - { - vector dirs; - split( PREFSMAN->m_sAdditionalSongFolders, ",", dirs, true ); - for( unsigned i=0; i < dirs.size(); i++) - FILEMAN->Mount( "dir", dirs[i], "/Songs" ); - } - if( PREFSMAN->m_sAdditionalCourseFolders.Get() != "" ) - { - vector dirs; - split( PREFSMAN->m_sAdditionalCourseFolders, ",", dirs, true ); - for( unsigned i=0; i < dirs.size(); i++) - FILEMAN->Mount( "dir", dirs[i], "/Courses" ); - } + MountFolders("dirro", PREFSMAN->m_sAdditionalFoldersReadOnly.Get(), "/"); + MountFolders("dir", PREFSMAN->m_sAdditionalFoldersWritable.Get(), "/"); + MountFolders("dirro", PREFSMAN->m_sAdditionalSongFoldersReadOnly.Get(), "/Songs"); + MountFolders("dir", PREFSMAN->m_sAdditionalSongFoldersWritable.Get(), "/Songs"); + MountFolders("dirro", PREFSMAN->m_sAdditionalCourseFoldersReadOnly.Get(), "/Courses"); + MountFolders("dir", PREFSMAN->m_sAdditionalCourseFoldersWritable.Get(), "/Courses"); MountTreeOfZips( SpecialFiles::PACKAGES_DIR ); - MountTreeOfZips( SpecialFiles::USER_PACKAGES_DIR ); /* One of the above filesystems might contain files that affect preferences * (e.g. Data/Static.ini). Re-read preferences. */ diff --git a/src/arch/ArchHooks/ArchHooks_MacOSX.mm b/src/arch/ArchHooks/ArchHooks_MacOSX.mm index cfb37d2eba..e748eee1ed 100644 --- a/src/arch/ArchHooks/ArchHooks_MacOSX.mm +++ b/src/arch/ArchHooks/ArchHooks_MacOSX.mm @@ -4,10 +4,10 @@ #include "RageUtil.h" #include "archutils/Unix/CrashHandler.h" #include "archutils/Unix/SignalHandler.h" -#include "SpecialFiles.h" #include "ProductInfo.h" #include #include +#include #include #include #include @@ -318,13 +318,15 @@ static void PathForFolderType( char dir[PATH_MAX], OSType folderType ) void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable ) { - char dir[PATH_MAX]; + struct stat st; + bool portable = !stat(sDirOfExecutable + "/Portable.ini", &st); + FILEMAN->Mount(portable ? "dir" : "dirro", sDirOfExecutable, "/"); + CFURLRef dataUrl = CFBundleCopyResourceURL( CFBundleGetMainBundle(), CFSTR("StepMania"), CFSTR("smzip"), nil); - - FILEMAN->Mount( "dir", sDirOfExecutable, "/" ); - if( dataUrl ) { + char dir[PATH_MAX]; + CFStringRef dataPath = CFURLCopyFileSystemPath( dataUrl, kCFURLPOSIXPathStyle ); CFStringGetCString( dataPath, dir, PATH_MAX, kCFStringEncodingUTF8 ); @@ -353,7 +355,7 @@ void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/Characters", dir), "/Characters" ); FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/Courses", dir), "/Courses" ); FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/NoteSkins", dir), "/NoteSkins" ); - FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/Packages", dir), "/" + SpecialFiles::USER_PACKAGES_DIR ); + FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/Packages", dir), "/Packages" ); FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/Songs", dir), "/Songs" ); FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/RandomMovies", dir), "/RandomMovies" ); FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID "/Themes", dir), "/Themes" ); @@ -369,29 +371,25 @@ void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) // /Logs -> ~/Library/Logs/PRODUCT_ID PathForFolderType( dir, kDomainLibraryFolderType ); FILEMAN->Mount( "dir", ssprintf("%s/Logs/" PRODUCT_ID, dir), "/Logs" ); - - NSString* resourcePath = [[NSBundle mainBundle] resourcePath]; - if( resourcePath ) - { - const char* resourcePathUTF8String = [resourcePath UTF8String]; - FILEMAN->Mount( "dir", ssprintf("%s/Announcers", resourcePathUTF8String), "/Announcers" ); - FILEMAN->Mount( "dir", ssprintf("%s/BGAnimations", resourcePathUTF8String), "/BGAnimations" ); - FILEMAN->Mount( "dir", ssprintf("%s/BackgroundEffects", resourcePathUTF8String), "/BackgroundEffects" ); - FILEMAN->Mount( "dir", ssprintf("%s/BackgroundTransitions", resourcePathUTF8String), "/BackgroundTransitions" ); - FILEMAN->Mount( "dir", ssprintf("%s/CDTitles", resourcePathUTF8String), "/CDTitles" ); - FILEMAN->Mount( "dir", ssprintf("%s/Characters", resourcePathUTF8String), "/Characters" ); - FILEMAN->Mount( "dir", ssprintf("%s/Courses", resourcePathUTF8String), "/Courses" ); - FILEMAN->Mount( "dir", ssprintf("%s/NoteSkins", resourcePathUTF8String), "/NoteSkins" ); - FILEMAN->Mount( "dir", ssprintf("%s/Packages", resourcePathUTF8String), "/" + SpecialFiles::USER_PACKAGES_DIR ); - FILEMAN->Mount( "dir", ssprintf("%s/Songs", resourcePathUTF8String), "/Songs" ); - FILEMAN->Mount( "dir", ssprintf("%s/RandomMovies", resourcePathUTF8String), "/RandomMovies" ); - FILEMAN->Mount( "dir", ssprintf("%s/Themes", resourcePathUTF8String), "/Themes" ); - FILEMAN->Mount( "dir", ssprintf("%s/Data", resourcePathUTF8String), "/Data" ); - } - // /Desktop -> /Users//Desktop/PRODUCT_ID - // PathForFolderType( dir, kDesktopFolderType ); - // FILEMAN->Mount( "dir", ssprintf("%s/" PRODUCT_ID, dir), "/Desktop" ); + NSString* resourcePath = [[NSBundle mainBundle] resourcePath]; + if( resourcePath ) + { + const char* resourcePathUTF8String = [resourcePath UTF8String]; + FILEMAN->Mount( "dirro", ssprintf("%s/Announcers", resourcePathUTF8String), "/Announcers" ); + FILEMAN->Mount( "dirro", ssprintf("%s/BGAnimations", resourcePathUTF8String), "/BGAnimations" ); + FILEMAN->Mount( "dirro", ssprintf("%s/BackgroundEffects", resourcePathUTF8String), "/BackgroundEffects" ); + FILEMAN->Mount( "dirro", ssprintf("%s/BackgroundTransitions", resourcePathUTF8String), "/BackgroundTransitions" ); + FILEMAN->Mount( "dirro", ssprintf("%s/CDTitles", resourcePathUTF8String), "/CDTitles" ); + FILEMAN->Mount( "dirro", ssprintf("%s/Characters", resourcePathUTF8String), "/Characters" ); + FILEMAN->Mount( "dirro", ssprintf("%s/Courses", resourcePathUTF8String), "/Courses" ); + FILEMAN->Mount( "dirro", ssprintf("%s/NoteSkins", resourcePathUTF8String), "/NoteSkins" ); + FILEMAN->Mount( "dirro", ssprintf("%s/Packages", resourcePathUTF8String), "/Packages" ); + FILEMAN->Mount( "dirro", ssprintf("%s/Songs", resourcePathUTF8String), "/Songs" ); + FILEMAN->Mount( "dirro", ssprintf("%s/RandomMovies", resourcePathUTF8String), "/RandomMovies" ); + FILEMAN->Mount( "dirro", ssprintf("%s/Themes", resourcePathUTF8String), "/Themes" ); + FILEMAN->Mount( "dirro", ssprintf("%s/Data", resourcePathUTF8String), "/Data" ); + } } static inline int GetIntValue( CFTypeRef r ) diff --git a/src/arch/ArchHooks/ArchHooks_Unix.cpp b/src/arch/ArchHooks/ArchHooks_Unix.cpp index 3463f29997..c48bac13fc 100644 --- a/src/arch/ArchHooks/ArchHooks_Unix.cpp +++ b/src/arch/ArchHooks/ArchHooks_Unix.cpp @@ -1,11 +1,11 @@ #include "global.h" #include "ArchHooks_Unix.h" #include "ProductInfo.h" +#include "RageFileManager.h" #include "RageLog.h" #include "RageUtil.h" #include "RageThreads.h" #include "LocalizedString.h" -#include "SpecialFiles.h" #include "archutils/Unix/SignalHandler.h" #include "archutils/Unix/GetSysInfo.h" #include "archutils/Common/PthreadHelpers.h" @@ -15,6 +15,7 @@ #include #endif #include +#include #include #include @@ -380,24 +381,11 @@ RString ArchHooks_Unix::GetClipboard() #endif } -#include "RageFileManager.h" -#include - -static LocalizedString COULDNT_FIND_SONGS( "ArchHooks_Unix", "Couldn't find 'Songs'" ); void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable ) { - RString Root; struct stat st; - if( !stat(sDirOfExecutable + "/Packages", &st) && st.st_mode&S_IFDIR ) - Root = sDirOfExecutable; - else if( !stat(sDirOfExecutable + "/Songs", &st) && st.st_mode&S_IFDIR ) - Root = sDirOfExecutable; - else if( !stat(RageFileManagerUtil::sInitialWorkingDirectory + "/Songs", &st) && st.st_mode&S_IFDIR ) - Root = RageFileManagerUtil::sInitialWorkingDirectory; - else - RageException::Throw( "%s", COULDNT_FIND_SONGS.GetValue().c_str() ); - - FILEMAN->Mount( "dir", Root, "/" ); + bool portable = !stat(sDirOfExecutable + "/Portable.ini", &st); + FILEMAN->Mount(portable ? "dir" : "dirro", sDirOfExecutable, "/"); } void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) @@ -417,7 +405,7 @@ void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) FILEMAN->Mount( "dir", sUserDataPath + "/Courses", "/Courses" ); FILEMAN->Mount( "dir", sUserDataPath + "/Logs", "/Logs" ); FILEMAN->Mount( "dir", sUserDataPath + "/NoteSkins", "/NoteSkins" ); - FILEMAN->Mount( "dir", sUserDataPath + "/Packages", "/" + SpecialFiles::USER_PACKAGES_DIR ); + FILEMAN->Mount( "dir", sUserDataPath + "/Packages", "/Packages" ); FILEMAN->Mount( "dir", sUserDataPath + "/Save", "/Save" ); FILEMAN->Mount( "dir", sUserDataPath + "/Screenshots", "/Screenshots" ); FILEMAN->Mount( "dir", sUserDataPath + "/Songs", "/Songs" ); diff --git a/src/arch/ArchHooks/ArchHooks_Win32Static.cpp b/src/arch/ArchHooks/ArchHooks_Win32Static.cpp index 6325bc5df0..8676702add 100644 --- a/src/arch/ArchHooks/ArchHooks_Win32Static.cpp +++ b/src/arch/ArchHooks/ArchHooks_Win32Static.cpp @@ -5,7 +5,6 @@ #include "archutils/Win32/SpecialDirs.h" #include "ProductInfo.h" #include "RageFileManager.h" -#include "SpecialFiles.h" // for timeGetTime #include @@ -56,8 +55,9 @@ static RString GetMountDir( const RString &sDirOfExecutable ) void ArchHooks::MountInitialFilesystems( const RString &sDirOfExecutable ) { RString sDir = GetMountDir( sDirOfExecutable ); - - FILEMAN->Mount( "dir", sDir, "/" ); + + bool portable = GetFileAttributes(sDir + "/Portable.ini", &st) != INVALID_FILE_ATTRIBUTES; + FILEMAN->Mount(portable ? "dir" : "dirro", sDir, "/"); } void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) @@ -84,7 +84,7 @@ void ArchHooks::MountUserFilesystems( const RString &sDirOfExecutable ) FILEMAN->Mount( "dir", sAppDataDir + "/Courses", "/Courses" ); FILEMAN->Mount( "dir", sAppDataDir + "/Logs", "/Logs" ); FILEMAN->Mount( "dir", sAppDataDir + "/NoteSkins", "/NoteSkins" ); - FILEMAN->Mount( "dir", sAppDataDir + "/Packages", "/" + SpecialFiles::USER_PACKAGES_DIR ); + FILEMAN->Mount( "dir", sAppDataDir + "/Packages", "/Packages" ); FILEMAN->Mount( "dir", sAppDataDir + "/Save", "/Save" ); FILEMAN->Mount( "dir", sAppDataDir + "/Screenshots", "/Screenshots" ); FILEMAN->Mount( "dir", sAppDataDir + "/Songs", "/Songs" ); diff --git a/src/arch/MemoryCard/MemoryCardDriver.cpp b/src/arch/MemoryCard/MemoryCardDriver.cpp index 230cf96ca9..48167473a2 100644 --- a/src/arch/MemoryCard/MemoryCardDriver.cpp +++ b/src/arch/MemoryCard/MemoryCardDriver.cpp @@ -122,9 +122,9 @@ bool MemoryCardDriver::DoOneUpdate( bool bMount, vector& vStor * and then unmount it until Mount() is called. */ d.m_State = UsbStorageDevice::STATE_READY; - FILEMAN->Mount( "dir", d.sOsMountDir, TEMP_MOUNT_POINT ); + FILEMAN->Mount( "dirro", d.sOsMountDir, TEMP_MOUNT_POINT ); d.bIsNameAvailable = PROFILEMAN->FastLoadProfileNameFromMemoryCard( TEMP_MOUNT_POINT, d.sName ); - FILEMAN->Unmount( "dir", d.sOsMountDir, TEMP_MOUNT_POINT ); + FILEMAN->Unmount( "dirro", d.sOsMountDir, TEMP_MOUNT_POINT ); } this->Unmount( &d );