skip *.pk3dir in root in DirectoryArchive::forEachFile
This commit is contained in:
parent
7396eef067
commit
3fb507e860
|
|
@ -90,7 +90,8 @@ public:
|
||||||
dirs.pop_back();
|
dirs.pop_back();
|
||||||
path.pop();
|
path.pop();
|
||||||
}
|
}
|
||||||
else if ( !string_equal( name, "." ) && !string_equal( name, ".." ) ) {
|
else if ( !string_equal( name, "." ) && !string_equal( name, ".." )
|
||||||
|
&& !( string_empty( root ) && string_equal_suffix_nocase( name, ".pk3dir" ) ) ) { //skip *.pk3dir in root, it is processed as DirectoryArchive
|
||||||
path.push_filename( name );
|
path.push_filename( name );
|
||||||
|
|
||||||
bool is_directory = file_is_directory( path.c_str() );
|
bool is_directory = file_is_directory( path.c_str() );
|
||||||
|
|
|
||||||
|
|
@ -1183,12 +1183,11 @@ class ModelPaths_ArchiveVisitor : public Archive::Visitor
|
||||||
ModelFS& m_modelFS;
|
ModelFS& m_modelFS;
|
||||||
public:
|
public:
|
||||||
const ModelFoldersMap& m_modelFoldersMap;
|
const ModelFoldersMap& m_modelFoldersMap;
|
||||||
bool m_avoid_pk3dir;
|
|
||||||
ModelPaths_ArchiveVisitor( const StringSetWithLambda& modelExtensions, ModelFS& modelFS, const ModelFoldersMap& modelFoldersMap )
|
ModelPaths_ArchiveVisitor( const StringSetWithLambda& modelExtensions, ModelFS& modelFS, const ModelFoldersMap& modelFoldersMap )
|
||||||
: m_modelExtensions( modelExtensions ), m_modelFS( modelFS ), m_modelFoldersMap( modelFoldersMap ){
|
: m_modelExtensions( modelExtensions ), m_modelFS( modelFS ), m_modelFoldersMap( modelFoldersMap ){
|
||||||
}
|
}
|
||||||
void visit( const char* name ) override {
|
void visit( const char* name ) override {
|
||||||
if( m_modelExtensions.count( path_get_extension( name ) ) && ( !m_avoid_pk3dir || !string_in_string_nocase( name, ".pk3dir/" ) ) ){
|
if( m_modelExtensions.count( path_get_extension( name ) ) ){
|
||||||
m_modelFS.insert( name );
|
m_modelFS.insert( name );
|
||||||
//% globalOutputStream() << name << " name\n";
|
//% globalOutputStream() << name << " name\n";
|
||||||
}
|
}
|
||||||
|
|
@ -1200,11 +1199,6 @@ void ModelPaths_addFromArchive( ModelPaths_ArchiveVisitor& visitor, const char *
|
||||||
Archive *archive = GlobalFileSystem().getArchive( archiveName, false );
|
Archive *archive = GlobalFileSystem().getArchive( archiveName, false );
|
||||||
if ( archive != nullptr ) {
|
if ( archive != nullptr ) {
|
||||||
for( const auto& folder : visitor.m_modelFoldersMap ){
|
for( const auto& folder : visitor.m_modelFoldersMap ){
|
||||||
/* should better avoid .pk3dir traversal right in archive implementation for normal folders */
|
|
||||||
visitor.m_avoid_pk3dir = string_empty( folder.first.c_str() ) // root
|
|
||||||
&& folder.second > 1 // deep nuff
|
|
||||||
&& string_equal_suffix( archiveName, "/" ) // normal folder, not archive
|
|
||||||
&& !string_equal_suffix_nocase( archiveName, ".pk3dir/" ); // not .pk3dir
|
|
||||||
archive->forEachFile( Archive::VisitorFunc( visitor, Archive::eFiles, folder.second ), folder.first.c_str() );
|
archive->forEachFile( Archive::VisitorFunc( visitor, Archive::eFiles, folder.second ), folder.first.c_str() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user