changeset 17873:9c497cde37af draft

(svn r22669) -Codechange: For non-windows, only test for file existence again if strtolower actually changed the name.
author alberth <alberth@openttd.org>
date Sat, 16 Jul 2011 18:43:22 +0000
parents 339c99ac8633
children b3544f85de6c
files src/fileio.cpp src/string.cpp src/string_func.h
diffstat 3 files changed, 12 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -320,8 +320,7 @@
 		/* Be, as opening files, aware that sometimes the filename
 		 * might be in uppercase when it is in lowercase on the
 		 * disk. Ofcourse Windows doesn't care about casing. */
-		strtolower(buf + strlen(_searchpaths[sp]) - 1);
-		if (FileExists(buf)) return buf;
+		if (strtolower(buf + strlen(_searchpaths[sp]) - 1) && FileExists(buf)) return buf;
 #endif
 	}
 
@@ -378,8 +377,7 @@
 
 	f = fopen(buf, mode);
 #if !defined(WIN32)
-	if (f == NULL) {
-		strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1));
+	if (f == NULL && strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1))) {
 		f = fopen(buf, mode);
 	}
 #endif
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -319,10 +319,17 @@
  * using certain locales: eg in Turkish the uppercase 'I' was converted to
  * '?', so just revert to the old functionality
  * @param str string to convert
+ * @return String has changed.
  */
-void strtolower(char *str)
+bool strtolower(char *str)
 {
-	for (; *str != '\0'; str++) *str = tolower(*str);
+	bool changed = false;
+	for (; *str != '\0'; str++) {
+		char new_str = tolower(*str);
+		changed |= new_str != *str;
+		*str = new_str;
+	}
+	return changed;
 }
 
 /**
--- a/src/string_func.h
+++ b/src/string_func.h
@@ -41,7 +41,7 @@
 
 void str_validate(char *str, const char *last, bool allow_newlines = false, bool ignore = false);
 void str_strip_colours(char *str);
-void strtolower(char *str);
+bool strtolower(char *str);
 
 bool StrValid(const char *str, const char *last);