Ticket #4014: path_match_v1.patch

File path_match_v1.patch, 1.9 KB (added by lordhoto, 12 years ago)

Patch against r35113.

  • engines/kyra/gui_v2.cpp

     
    730730                Common::String oldName = _vm->getSavegameFilename(*i);
    731731                Common::String newName = _vm->getSavegameFilename(*i-1);
    732732                _vm->_saveFileMan->renameSavefile(oldName.c_str(), newName.c_str());
    733         }       
     733        }
    734734        _saveMenu.menuNameId = _vm->gameFlags().isTalkie ? 9 : 17;
    735735        return 0;
    736736}
  • common/archive.cpp

     
    242242
    243243}
    244244
     245namespace {
     246
     247void setupPathMatch(const Common::String &pattern, StringList &out) {
     248        Common::StringTokenizer tokenizer(pattern, "/");
     249        while (!tokenizer.empty())
     250                out.push_back(tokenizer.nextToken());
     251}
     252
     253bool pathMatch(const Common::String &name, const StringList &matchAgainst) {
     254        StringList nameSubs;
     255        setupPathMatch(name, nameSubs);
     256
     257        if (nameSubs.size() != matchAgainst.size())
     258                return false;
     259
     260        for (Common::StringList::const_iterator i = nameSubs.begin(), j = matchAgainst.begin(); i != nameSubs.end(); ++i, ++j)
     261                if (!Common::matchString(i->c_str(), j->c_str()))
     262                        return false;
     263
     264        return true;
     265}
     266
     267} // end of namespace
     268
    245269int FSDirectory::listMatchingMembers(ArchiveMemberList &list, const String &pattern) {
    246270        if (!_node.isDirectory())
    247271                return 0;
     
    255279        String lowercasePattern(pattern);
    256280        lowercasePattern.toLowercase();
    257281
     282        StringList patternSubs;
     283        setupPathMatch(lowercasePattern, patternSubs);
     284
    258285        int matches = 0;
    259286        NodeCache::iterator it = _fileCache.begin();
    260287        for ( ; it != _fileCache.end(); it++) {
    261                 if ((*it)._key.matchString(lowercasePattern)) {
     288                if (pathMatch(it->_key, patternSubs)) {
    262289                        list.push_back(FSDirectoryMemberPtr(new FSDirectoryMember((*it)._value)));
    263290                        matches++;
    264291                }