std::string getMountPoint(const std::string& location) { std::string mount = PHYSFS_getMountPoint(location.c_str()); if (mount.empty()) throw Exception(PHYSFS_getLastError()); return mount; }
FileSystem::FileSystem(std::vector<UString> paths) { // FIXME: Is this the right thing to do that? LogInfo("Registering external archivers..."); PHYSFS_registerArchiver(getCueArchiver()); // Paths are supplied in inverse-search order (IE the last in 'paths' should be the first // searched) for (auto &p : paths) { if (!PHYSFS_mount(p.cStr(), "/", 0)) { LogInfo("Failed to add resource dir \"%s\", error: %s", p, PHYSFS_getErrorByCode(PHYSFS_getLastErrorCode())); continue; } else LogInfo("Resource dir \"%s\" mounted to \"%s\"", p, PHYSFS_getMountPoint(p.cStr())); } this->writeDir = PHYSFS_getPrefDir(PROGRAM_ORGANISATION, PROGRAM_NAME); LogInfo("Setting write directory to \"%s\"", this->writeDir); PHYSFS_setWriteDir(this->writeDir.cStr()); // Finally, the write directory trumps all PHYSFS_mount(this->writeDir.cStr(), "/", 0); }
string getMountPoint(const string& dir) { return PHYSFS_getMountPoint(dir.c_str()); }
const char *ex_fsys_mount_point ( const char *_dir ) { return PHYSFS_getMountPoint ( _dir ); }
Data::Data(Framework &fw, std::vector<UString> paths, int imageCacheSize, int imageSetCacheSize, int voxelCacheSize) { for (auto &imageBackend : *registeredImageBackends) { auto t = imageBackend.first; ImageLoader *l = imageBackend.second->create(); if (l) { this->imageLoaders.emplace_back(l); LogInfo("Initialised image loader %s", t.c_str()); } else LogWarning("Failed to load image loader %s", t.c_str()); } for (auto &sampleBackend : *registeredSampleLoaders) { auto t = sampleBackend.first; SampleLoader *s = sampleBackend.second->create(fw); if (s) { this->sampleLoaders.emplace_back(s); LogInfo("Initialised sample loader %s", t.c_str()); } else LogWarning("Failed to load sample loader %s", t.c_str()); } for (auto &musicLoader : *registeredMusicLoaders) { auto t = musicLoader.first; MusicLoader *m = musicLoader.second->create(fw); if (m) { this->musicLoaders.emplace_back(m); LogInfo("Initialised music loader %s", t.c_str()); } else LogWarning("Failed to load music loader %s", t.c_str()); } this->writeDir = PHYSFS_getPrefDir(PROGRAM_ORGANISATION, PROGRAM_NAME); LogInfo("Setting write directory to \"%s\"", this->writeDir.c_str()); PHYSFS_setWriteDir(this->writeDir.c_str()); for (int i = 0; i < imageCacheSize; i++) pinnedImages.push(nullptr); for (int i = 0; i < imageSetCacheSize; i++) pinnedImageSets.push(nullptr); for (int i = 0; i < voxelCacheSize; i++) pinnedLOFVoxels.push(nullptr); // Paths are supplied in inverse-search order (IE the last in 'paths' should be the first // searched) for (auto &p : paths) { if (!PHYSFS_mount(p.c_str(), "/", 0)) { LogWarning("Failed to add resource dir \"%s\"", p.c_str()); continue; } else LogInfo("Resource dir \"%s\" mounted to \"%s\"", p.c_str(), PHYSFS_getMountPoint(p.c_str())); } // Finally, the write directory trumps all PHYSFS_mount(this->writeDir.c_str(), "/", 0); }