changeset 18025:7a87d9ed25a1 draft

(svn r22834) -Codechange: unify some code, and extend it to work for other filenames that should end in a particular way
author rubidium <rubidium@openttd.org>
date Thu, 25 Aug 2011 10:24:49 +0000
parents ea6373c142b4
children eace4d79d513
files src/fileio.cpp
diffstat 1 files changed, 15 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -1231,6 +1231,19 @@
 	return mem;
 }
 
+/**
+ * Helper to see whether a given filename matches the extension.
+ * @param extension The extension to look for.
+ * @param filename  The filename to look in for the extension.
+ * @return True iff the extension is NULL, or the filename ends with it.
+ */
+static bool MatchesExtension(const char *extension, const char *filename)
+{
+	if (extension == NULL) return true;
+
+	const char *ext = strrchr(filename, extension[0]);
+	return ext != NULL && strcasecmp(ext, extension) == 0;
+}
 
 /**
  * Scan a single directory (and recursively its children) and add
@@ -1268,15 +1281,7 @@
 			num += ScanPath(fs, extension, filename, basepath_length, recursive);
 		} else if (S_ISREG(sb.st_mode)) {
 			/* File */
-			if (extension != NULL) {
-				char *ext = strrchr(filename, '.');
-
-				/* If no extension or extension isn't .grf, skip the file */
-				if (ext == NULL) continue;
-				if (strcasecmp(ext, extension) != 0) continue;
-			}
-
-			if (fs->AddFile(filename, basepath_length)) num++;
+			if (MatchesExtension(extension, filename) && fs->AddFile(filename, basepath_length)) num++;
 		}
 	}
 
@@ -1296,15 +1301,7 @@
 	uint num = 0;
 	const char *filename = (*tar).first.c_str();
 
-	if (extension != NULL) {
-		const char *ext = strrchr(filename, '.');
-
-		/* If no extension or extension isn't .grf, skip the file */
-		if (ext == NULL) return false;
-		if (strcasecmp(ext, extension) != 0) return false;
-	}
-
-	if (fs->AddFile(filename, 0)) num++;
+	if (MatchesExtension(extension, filename) && fs->AddFile(filename, 0)) num++;
 
 	return num;
 }