[Scummvm-git-logs] scummvm master -> aee61827cafd137c6ec646e4ac754f48ab433d92

lephilousophe noreply at scummvm.org
Sun Mar 17 13:01:21 UTC 2024


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
aee61827ca WINTERMUTE: Fix path handling inside packages


Commit: aee61827cafd137c6ec646e4ac754f48ab433d92
    https://github.com/scummvm/scummvm/commit/aee61827cafd137c6ec646e4ac754f48ab433d92
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2024-03-17T14:00:53+01:00

Commit Message:
WINTERMUTE: Fix path handling inside packages

Changed paths:
    engines/wintermute/base/file/base_package.cpp
    engines/wintermute/base/file/base_package.h


diff --git a/engines/wintermute/base/file/base_package.cpp b/engines/wintermute/base/file/base_package.cpp
index 51e7477b131..933905eb9b0 100644
--- a/engines/wintermute/base/file/base_package.cpp
+++ b/engines/wintermute/base/file/base_package.cpp
@@ -194,8 +194,7 @@ PackageSet::PackageSet(Common::FSNode file, const Common::String &filename, bool
 			}
 			debugC(kWintermuteDebugFileAccess, "Package contains %s", name);
 
-			Common::String upcName = name;
-			upcName.toUppercase();
+			Common::Path path(name, '\\');
 			delete[] name;
 			name = nullptr;
 
@@ -209,7 +208,9 @@ PackageSet::PackageSet(Common::FSNode file, const Common::String &filename, bool
 				/* timeDate1 = */ stream->readUint32LE();
 				/* timeDate2 = */ stream->readUint32LE();
 			}
-			_filesIter = _files.find(upcName);
+
+			FilesMap::iterator _filesIter;
+			_filesIter = _files.find(path);
 			if (_filesIter == _files.end()) {
 				BaseFileEntry *fileEntry = new BaseFileEntry();
 				fileEntry->_package = pkg;
@@ -217,9 +218,9 @@ PackageSet::PackageSet(Common::FSNode file, const Common::String &filename, bool
 				fileEntry->_length = length;
 				fileEntry->_compressedLength = compLength;
 				fileEntry->_flags = flags;
-				fileEntry->_filename = upcName;
+				fileEntry->_filename = path;
 
-				_files[upcName] = Common::ArchiveMemberPtr(fileEntry);
+				_files[path] = Common::ArchiveMemberPtr(fileEntry);
 			} else {
 				// current package has higher priority than the registered
 				// TODO: This cast might be a bit ugly.
@@ -247,17 +248,14 @@ PackageSet::~PackageSet() {
 }
 
 bool PackageSet::hasFile(const Common::Path &path) const {
-	Common::String name = path.toString();
-	Common::String upcName = name;
-	upcName.toUppercase();
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr>::const_iterator it;
-	it = _files.find(upcName.c_str());
+	FilesMap::const_iterator it;
+	it = _files.find(path);
 	return (it != _files.end());
 }
 
 int PackageSet::listMembers(Common::ArchiveMemberList &list) const {
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr>::const_iterator it = _files.begin();
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr>::const_iterator end = _files.end();
+	FilesMap::const_iterator it = _files.begin();
+	FilesMap::const_iterator end = _files.end();
 	int count = 0;
 	for (; it != end; ++it) {
 		const Common::ArchiveMemberPtr ptr(it->_value);
@@ -268,20 +266,14 @@ int PackageSet::listMembers(Common::ArchiveMemberList &list) const {
 }
 
 const Common::ArchiveMemberPtr PackageSet::getMember(const Common::Path &path) const {
-	Common::String name = path.toString();
-	Common::String upcName = name;
-	upcName.toUppercase();
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr>::const_iterator it;
-	it = _files.find(upcName.c_str());
+	FilesMap::const_iterator it;
+	it = _files.find(path);
 	return Common::ArchiveMemberPtr(it->_value);
 }
 
 Common::SeekableReadStream *PackageSet::createReadStreamForMember(const Common::Path &path) const {
-	Common::String name = path.toString();
-	Common::String upcName = name;
-	upcName.toUppercase();
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr>::const_iterator it;
-	it = _files.find(upcName.c_str());
+	FilesMap::const_iterator it;
+	it = _files.find(path);
 	if (it != _files.end()) {
 		return it->_value->createReadStream();
 	}
diff --git a/engines/wintermute/base/file/base_package.h b/engines/wintermute/base/file/base_package.h
index 31b5f670f0d..99b61f1e5c3 100644
--- a/engines/wintermute/base/file/base_package.h
+++ b/engines/wintermute/base/file/base_package.h
@@ -83,8 +83,8 @@ private:
 	byte _priority;
 	uint32 _version;
 	Common::Array<BasePackage *> _packages;
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr> _files;
-	Common::HashMap<Common::String, Common::ArchiveMemberPtr>::iterator _filesIter;
+	typedef Common::HashMap<Common::Path, Common::ArchiveMemberPtr, Common::Path::IgnoreCase_Hash, Common::Path::IgnoreCase_EqualTo> FilesMap;
+	FilesMap _files;
 };
 
 } // End of namespace Wintermute




More information about the Scummvm-git-logs mailing list