mirror of https://github.com/stella-emu/stella.git
Fix missing first char when navigating ZIP files (fixes #989).
This commit is contained in:
parent
cc9d26b37b
commit
e030c8dea9
|
@ -178,7 +178,6 @@ bool FSNodeZIP::getChildren(AbstractFSList& myList, ListMode mode) const
|
||||||
|
|
||||||
std::set<string> dirs;
|
std::set<string> dirs;
|
||||||
myZipHandler->open(_zipFile);
|
myZipHandler->open(_zipFile);
|
||||||
// cerr << "CHILDREN: --------------------------------\n";
|
|
||||||
while(myZipHandler->hasNext())
|
while(myZipHandler->hasNext())
|
||||||
{
|
{
|
||||||
// Only consider entries that start with '_virtualPath'
|
// Only consider entries that start with '_virtualPath'
|
||||||
|
@ -191,7 +190,7 @@ bool FSNodeZIP::getChildren(AbstractFSList& myList, ListMode mode) const
|
||||||
// First strip off the leading directory
|
// First strip off the leading directory
|
||||||
const string& curr = name.substr(
|
const string& curr = name.substr(
|
||||||
_virtualPath.empty() ? 0 : _virtualPath.size()+1);
|
_virtualPath.empty() ? 0 : _virtualPath.size()+1);
|
||||||
// cerr << " curr: " << curr << endl;
|
|
||||||
// Only add sub-directory entries once
|
// Only add sub-directory entries once
|
||||||
const auto pos = curr.find_first_of("/\\");
|
const auto pos = curr.find_first_of("/\\");
|
||||||
if(pos != string::npos)
|
if(pos != string::npos)
|
||||||
|
@ -207,10 +206,6 @@ bool FSNodeZIP::getChildren(AbstractFSList& myList, ListMode mode) const
|
||||||
myList.emplace_back(new FSNodeZIP(_zipFile, vpath, _realNode, 0, true));
|
myList.emplace_back(new FSNodeZIP(_zipFile, vpath, _realNode, 0, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
// cerr << "list: \n";
|
|
||||||
// for(auto& s: myList)
|
|
||||||
// cerr << s->getPath() << " : isdir: " << s->isDirectory() << endl;
|
|
||||||
// cerr << "------------------------------------------\n";
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,22 +262,22 @@ size_t FSNodeZIP::write(const stringstream& buffer) const
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
AbstractFSNodePtr FSNodeZIP::getParent() const
|
AbstractFSNodePtr FSNodeZIP::getParent() const
|
||||||
{
|
{
|
||||||
cerr << "zip : " << _zipFile << endl
|
|
||||||
<< "vp : " << _virtualPath << endl
|
|
||||||
<< "path: " << _path << endl
|
|
||||||
<< "name: " << _name << endl;
|
|
||||||
if(_virtualPath.empty())
|
if(_virtualPath.empty())
|
||||||
{
|
|
||||||
if(_realNode)
|
|
||||||
cerr << "parent: " << _realNode->getParent()->getPath();
|
|
||||||
else
|
|
||||||
cerr << "parent: nullptr";
|
|
||||||
cerr << "\n\n\n";
|
|
||||||
return _realNode ? _realNode->getParent() : nullptr;
|
return _realNode ? _realNode->getParent() : nullptr;
|
||||||
}
|
|
||||||
|
|
||||||
cerr << "new zip: " << stemPathComponent(_path) << "\n\n\n";
|
// TODO: For some reason, getting the stem for normal paths and zip paths
|
||||||
return make_unique<FSNodeZIP>(stemPathComponent(_path));
|
// behaves differently. For now, we'll use the old method here.
|
||||||
|
auto STEM_FOR_ZIP = [](string_view s) {
|
||||||
|
const char* const start = s.data();
|
||||||
|
const char* cur = start + s.size() - 2;
|
||||||
|
|
||||||
|
while (cur >= start && !(*cur == '/' || *cur == '\\'))
|
||||||
|
--cur;
|
||||||
|
|
||||||
|
return s.substr(0, (cur + 1) - start - 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
return make_unique<FSNodeZIP>(STEM_FOR_ZIP(_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
Loading…
Reference in New Issue