diff options
| -rw-r--r-- | common/advancedDetector.cpp | 29 | 
1 files changed, 15 insertions, 14 deletions
| diff --git a/common/advancedDetector.cpp b/common/advancedDetector.cpp index adc6f9e327..8bd019018a 100644 --- a/common/advancedDetector.cpp +++ b/common/advancedDetector.cpp @@ -456,13 +456,16 @@ static ADGameDescList detectGame(const FSList &fslist, const Common::ADParams &p  	return matched;  } +/** + * Check for each ADFileBasedFallback record whether all files listed + * in it  are present. If multiple pass this test, we pick the one with + * the maximal number of matching files. In case of a tie, the entry + * coming first in the list is chosen. + */  static ADGameDescList detectGameFilebased(const StringMap &allFiles, const Common::ADParams ¶ms) {  	const ADFileBasedFallback *ptr;  	const char* const* filenames; -	// Then we perform the actual filename matching. If there are -	// several matches, only the one with the maximum numbers of -	// files is considered.  	int maxNumMatchedFiles = 0;  	const ADGameDescription *matchedDesc = 0; @@ -472,26 +475,24 @@ static ADGameDescList detectGameFilebased(const StringMap &allFiles, const Commo  		bool fileMissing = false;  		for (filenames = ptr->filenames; *filenames; ++filenames) { -			if (fileMissing) -				continue; -  			debug(3, "++ %s", *filenames);  			if (!allFiles.contains(*filenames)) {  				fileMissing = true; -				continue; +				break;  			}  			numMatchedFiles++;  		} -		if (!fileMissing) +		if (!fileMissing) {  			debug(4, "Matched: %s", agdesc->gameid); - -		if (!fileMissing && numMatchedFiles > maxNumMatchedFiles) { -			matchedDesc = agdesc; -			maxNumMatchedFiles = numMatchedFiles; - -			debug(4, "and overriden"); +	 +			if (numMatchedFiles > maxNumMatchedFiles) { +				matchedDesc = agdesc; +				maxNumMatchedFiles = numMatchedFiles; +	 +				debug(4, "and overriden"); +			}  		}  	} | 
