[Scummvm-cvs-logs] scummvm master -> 1f6894ab25e95324e6847f3912812b4f5de8af6f

clone2727 clone2727 at gmail.com
Fri Jul 12 05:46:54 CEST 2013


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:
1f6894ab25 COMMON: Cleanup the MacResManager a bit


Commit: 1f6894ab25e95324e6847f3912812b4f5de8af6f
    https://github.com/scummvm/scummvm/commit/1f6894ab25e95324e6847f3912812b4f5de8af6f
Author: Matthew Hoops (clone2727 at gmail.com)
Date: 2013-07-11T20:45:19-07:00

Commit Message:
COMMON: Cleanup the MacResManager a bit

Changed paths:
    common/macresman.cpp
    common/macresman.h



diff --git a/common/macresman.cpp b/common/macresman.cpp
index 00562f7..ba44caa 100644
--- a/common/macresman.cpp
+++ b/common/macresman.cpp
@@ -102,18 +102,18 @@ String MacResManager::computeResForkMD5AsString(uint32 length) const {
 	return computeStreamMD5AsString(resForkStream, MIN<uint32>(length, _resForkSize));
 }
 
-bool MacResManager::open(String filename) {
+bool MacResManager::open(const String &fileName) {
 	close();
 
 #ifdef MACOSX
 	// Check the actual fork on a Mac computer
-	String fullPath = ConfMan.get("path") + "/" + filename + "/..namedfork/rsrc";
+	String fullPath = ConfMan.get("path") + "/" + fileName + "/..namedfork/rsrc";
 	FSNode resFsNode = FSNode(fullPath);
 	if (resFsNode.exists()) {
 		SeekableReadStream *macResForkRawStream = resFsNode.createReadStream();
 
 		if (macResForkRawStream && loadFromRawFork(*macResForkRawStream)) {
-			_baseFileName = filename;
+			_baseFileName = fileName;
 			return true;
 		}
 
@@ -123,38 +123,39 @@ bool MacResManager::open(String filename) {
 
 	File *file = new File();
 
-	// First, let's try to see if the Mac converted name exists
-	if (file->open(constructAppleDoubleName(filename)) && loadFromAppleDouble(*file)) {
-		_baseFileName = filename;
+	// Prefer standalone files first, starting with raw forks
+	if (file->open(fileName + ".rsrc") && loadFromRawFork(*file)) {
+		_baseFileName = fileName;
 		return true;
 	}
 	file->close();
 
-	// Check .bin too
-	if (file->open(filename + ".bin") && loadFromMacBinary(*file)) {
-		_baseFileName = filename;
+	// Then try for AppleDouble using Apple's naming
+	if (file->open(constructAppleDoubleName(fileName)) && loadFromAppleDouble(*file)) {
+		_baseFileName = fileName;
 		return true;
 	}
 	file->close();
 
-	// Maybe we have a dumped fork?
-	if (file->open(filename + ".rsrc") && loadFromRawFork(*file)) {
-		_baseFileName = filename;
+	// Check .bin for MacBinary next
+	if (file->open(fileName + ".bin") && loadFromMacBinary(*file)) {
+		_baseFileName = fileName;
 		return true;
 	}
 	file->close();
 
-	// Fine, what about just the data fork?
-	if (file->open(filename)) {
-		_baseFileName = filename;
+	// As a last resort, see if just the data fork exists
+	if (file->open(fileName)) {
+		_baseFileName = fileName;
 
+		// FIXME: Is this really needed?
 		if (isMacBinary(*file)) {
-			file->seek(0, SEEK_SET);
+			file->seek(0);
 			if (loadFromMacBinary(*file))
 				return true;
 		}
 
-		file->seek(0, SEEK_SET);
+		file->seek(0);
 		_stream = file;
 		return true;
 	}
@@ -165,18 +166,18 @@ bool MacResManager::open(String filename) {
 	return false;
 }
 
-bool MacResManager::open(FSNode path, String filename) {
+bool MacResManager::open(const FSNode &path, const String &fileName) {
 	close();
 
 #ifdef MACOSX
 	// Check the actual fork on a Mac computer
-	String fullPath = path.getPath() + "/" + filename + "/..namedfork/rsrc";
+	String fullPath = path.getPath() + "/" + fileName + "/..namedfork/rsrc";
 	FSNode resFsNode = FSNode(fullPath);
 	if (resFsNode.exists()) {
 		SeekableReadStream *macResForkRawStream = resFsNode.createReadStream();
 
 		if (macResForkRawStream && loadFromRawFork(*macResForkRawStream)) {
-			_baseFileName = filename;
+			_baseFileName = fileName;
 			return true;
 		}
 
@@ -184,52 +185,53 @@ bool MacResManager::open(FSNode path, String filename) {
 	}
 #endif
 
-	// First, let's try to see if the Mac converted name exists
-	FSNode fsNode = path.getChild(constructAppleDoubleName(filename));
+	// Prefer standalone files first, starting with raw forks
+	FSNode fsNode = path.getChild(fileName + ".rsrc");
 	if (fsNode.exists() && !fsNode.isDirectory()) {
 		SeekableReadStream *stream = fsNode.createReadStream();
-		if (loadFromAppleDouble(*stream)) {
-			_baseFileName = filename;
+		if (loadFromRawFork(*stream)) {
+			_baseFileName = fileName;
 			return true;
 		}
 		delete stream;
 	}
 
-	// Check .bin too
-	fsNode = path.getChild(filename + ".bin");
+	// Then try for AppleDouble using Apple's naming
+	fsNode = path.getChild(constructAppleDoubleName(fileName));
 	if (fsNode.exists() && !fsNode.isDirectory()) {
 		SeekableReadStream *stream = fsNode.createReadStream();
-		if (loadFromMacBinary(*stream)) {
-			_baseFileName = filename;
+		if (loadFromAppleDouble(*stream)) {
+			_baseFileName = fileName;
 			return true;
 		}
 		delete stream;
 	}
 
-	// Maybe we have a dumped fork?
-	fsNode = path.getChild(filename + ".rsrc");
+	// Check .bin for MacBinary next
+	fsNode = path.getChild(fileName + ".bin");
 	if (fsNode.exists() && !fsNode.isDirectory()) {
 		SeekableReadStream *stream = fsNode.createReadStream();
-		if (loadFromRawFork(*stream)) {
-			_baseFileName = filename;
+		if (loadFromMacBinary(*stream)) {
+			_baseFileName = fileName;
 			return true;
 		}
 		delete stream;
 	}
 
-	// Fine, what about just the data fork?
-	fsNode = path.getChild(filename);
+	// As a last resort, see if just the data fork exists
+	fsNode = path.getChild(fileName);
 	if (fsNode.exists() && !fsNode.isDirectory()) {
 		SeekableReadStream *stream = fsNode.createReadStream();
-		_baseFileName = filename;
+		_baseFileName = fileName;
 
+		// FIXME: Is this really needed?
 		if (isMacBinary(*stream)) {
-			stream->seek(0, SEEK_SET);
+			stream->seek(0);
 			if (loadFromMacBinary(*stream))
 				return true;
 		}
 
-		stream->seek(0, SEEK_SET);
+		stream->seek(0);
 		_stream = stream;
 		return true;
 	}
@@ -238,22 +240,22 @@ bool MacResManager::open(FSNode path, String filename) {
 	return false;
 }
 
-bool MacResManager::exists(const String &filename) {
+bool MacResManager::exists(const String &fileName) {
 	// Try the file name by itself
-	if (Common::File::exists(filename))
+	if (File::exists(fileName))
 		return true;
 
 	// Try the .rsrc extension
-	if (Common::File::exists(filename + ".rsrc"))
+	if (File::exists(fileName + ".rsrc"))
 		return true;
 
 	// Check if we have a MacBinary file
-	Common::File tempFile;
-	if (tempFile.open(filename + ".bin") && isMacBinary(tempFile))
+	File tempFile;
+	if (tempFile.open(fileName + ".bin") && isMacBinary(tempFile))
 		return true;
 
 	// Check if we have an AppleDouble file
-	if (tempFile.open(constructAppleDoubleName(filename)) && tempFile.readUint32BE() == 0x00051607)
+	if (tempFile.open(constructAppleDoubleName(fileName)) && tempFile.readUint32BE() == 0x00051607)
 		return true;
 
 	return false;
@@ -480,10 +482,10 @@ SeekableReadStream *MacResManager::getResource(uint32 typeID, uint16 resID) {
 	return _stream->readStream(len);
 }
 
-SeekableReadStream *MacResManager::getResource(const String &filename) {
+SeekableReadStream *MacResManager::getResource(const String &fileName) {
 	for (uint32 i = 0; i < _resMap.numTypes; i++) {
 		for (uint32 j = 0; j < _resTypes[i].items; j++) {
-			if (_resLists[i][j].nameOffset != -1 && filename.equalsIgnoreCase(_resLists[i][j].name)) {
+			if (_resLists[i][j].nameOffset != -1 && fileName.equalsIgnoreCase(_resLists[i][j].name)) {
 				_stream->seek(_dataOffset + _resLists[i][j].dataOffset);
 				uint32 len = _stream->readUint32BE();
 
@@ -499,13 +501,13 @@ SeekableReadStream *MacResManager::getResource(const String &filename) {
 	return 0;
 }
 
-SeekableReadStream *MacResManager::getResource(uint32 typeID, const String &filename) {
+SeekableReadStream *MacResManager::getResource(uint32 typeID, const String &fileName) {
 	for (uint32 i = 0; i < _resMap.numTypes; i++) {
 		if (_resTypes[i].id != typeID)
 			continue;
 
 		for (uint32 j = 0; j < _resTypes[i].items; j++) {
-			if (_resLists[i][j].nameOffset != -1 && filename.equalsIgnoreCase(_resLists[i][j].name)) {
+			if (_resLists[i][j].nameOffset != -1 && fileName.equalsIgnoreCase(_resLists[i][j].name)) {
 				_stream->seek(_dataOffset + _resLists[i][j].dataOffset);
 				uint32 len = _stream->readUint32BE();
 
@@ -574,7 +576,7 @@ void MacResManager::readMap() {
 	}
 }
 
-Common::String MacResManager::constructAppleDoubleName(Common::String name) {
+String MacResManager::constructAppleDoubleName(String name) {
 	// Insert "._" before the last portion of a path name
 	for (int i = name.size() - 1; i >= 0; i--) {
 		if (i == 0) {
diff --git a/common/macresman.h b/common/macresman.h
index ed74da9..cca6592 100644
--- a/common/macresman.h
+++ b/common/macresman.h
@@ -54,27 +54,32 @@ public:
 
 	/**
 	 * Open a Mac data/resource fork pair.
+	 *
+	 * This uses SearchMan to find the data/resource forks. This should only be used
+	 * from inside an engine.
+	 *
 	 * @param filename The base file name of the file
 	 * @note This will check for the raw resource fork, MacBinary, and AppleDouble formats.
 	 * @return True on success
 	 */
-	bool open(String filename);
+	bool open(const String &fileName);
 
 	/**
 	 * Open a Mac data/resource fork pair.
+	 *
 	 * @param path The path that holds the forks
 	 * @param filename The base file name of the file
 	 * @note This will check for the raw resource fork, MacBinary, and AppleDouble formats.
 	 * @return True on success
 	 */
-	bool open(FSNode path, String filename);
+	bool open(const FSNode &path, const String &fileName);
 
 	/**
 	 * See if a Mac data/resource fork pair exists.
 	 * @param filename The base file name of the file
 	 * @return True if either a data fork or resource fork with this name exists
 	 */
-	static bool exists(const String &filename);
+	static bool exists(const String &fileName);
 
 	/**
 	 * Close the Mac data/resource fork pair.
@@ -94,12 +99,6 @@ public:
 	bool hasResFork() const;
 
 	/**
-	 * Check if the given stream is in the MacBinary format.
-	 * @param stream The stream we're checking
-	 */
-	static bool isMacBinary(SeekableReadStream &stream);
-
-	/**
 	 * Read resource from the MacBinary file
 	 * @param typeID FourCC of the type
 	 * @param resID Resource ID to fetch
@@ -176,7 +175,13 @@ private:
 	bool loadFromMacBinary(SeekableReadStream &stream);
 	bool loadFromAppleDouble(SeekableReadStream &stream);
 
-	static Common::String constructAppleDoubleName(Common::String name);
+	static String constructAppleDoubleName(String name);
+
+	/**
+	 * Check if the given stream is in the MacBinary format.
+	 * @param stream The stream we're checking
+	 */
+	static bool isMacBinary(SeekableReadStream &stream);
 
 	enum {
 		kResForkNone = 0,






More information about the Scummvm-git-logs mailing list