codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
//! Adds an archive to the file system. bool CFileSystem::addFileArchive(const io::path& filename, bool ignoreCase, bool ignorePaths, E_FILE_ARCHIVE_TYPE archiveType, const core::stringc& password, IFileArchive** retArchive) { IFileArchive* archive = 0; bool ret = false; // see if archive is already added if (changeArchivePassword(filename, password, retArchive)) return true; s32 i; // do we know what type it should be? if (archiveType == EFAT_UNKNOWN || archiveType == EFAT_FOLDER) { // try to load archive based on file name for (i = ArchiveLoader.size()-1; i >=0 ; --i) { if (ArchiveLoader[i]->isALoadableFileFormat(filename)) { archive = ArchiveLoader[i]->createArchive(filename, ignoreCase, ignorePaths); if (archive) break; } } // try to load archive based on content if (!archive) { io::IReadFile* file = createAndOpenFile(filename); if (file) { for (i = ArchiveLoader.size()-1; i >= 0; --i) { file->seek(0); if (ArchiveLoader[i]->isALoadableFileFormat(file)) { file->seek(0); archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); if (archive) break; } } file->drop(); } } } else { // try to open archive based on archive loader type io::IReadFile* file = 0; for (i = ArchiveLoader.size()-1; i >= 0; --i) { if (ArchiveLoader[i]->isALoadableFileFormat(archiveType)) { // attempt to open file if (!file) file = createAndOpenFile(filename); // is the file open? if (file) { // attempt to open archive file->seek(0); if (ArchiveLoader[i]->isALoadableFileFormat(file)) { file->seek(0); archive = ArchiveLoader[i]->createArchive(file, ignoreCase, ignorePaths); if (archive) break; } } else { // couldn't open file break; } } } // if open, close the file if (file) file->drop(); } if (archive) { FileArchives.push_back(archive); if (password.size()) archive->Password=password; if (retArchive) *retArchive = archive; ret = true; } else { os::Printer::log("Could not create archive for", filename, ELL_ERROR); } _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; return ret; }
Private
[
?
]
Run code
Submit