summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralberth <alberth@openttd.org>2011-07-16 18:43:22 +0000
committeralberth <alberth@openttd.org>2011-07-16 18:43:22 +0000
commitd55b380b695c184a6bfc99790f8ff738c84867cc (patch)
treec9f0dac6c86a885ba071d9497071083327e43620
parent20c2b5fdde6f3f70dc0a955ef803b8a0fa21e0e5 (diff)
downloadopenttd-d55b380b695c184a6bfc99790f8ff738c84867cc.tar.xz
(svn r22669) -Codechange: For non-windows, only test for file existence again if strtolower actually changed the name.
-rw-r--r--src/fileio.cpp6
-rw-r--r--src/string.cpp11
-rw-r--r--src/string_func.h2
3 files changed, 12 insertions, 7 deletions
diff --git a/src/fileio.cpp b/src/fileio.cpp
index 2b0f67b1e..7ac5ce7da 100644
--- a/src/fileio.cpp
+++ b/src/fileio.cpp
@@ -320,8 +320,7 @@ char *FioFindFullPath(char *buf, size_t buflen, Subdirectory subdir, const char
/* 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 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s
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
diff --git a/src/string.cpp b/src/string.cpp
index 7aa081c45..0c2777371 100644
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -319,10 +319,17 @@ size_t Utf8StringLength(const char *s)
* 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;
}
/**
diff --git a/src/string_func.h b/src/string_func.h
index 1fb58b46a..6b86dccf5 100644
--- a/src/string_func.h
+++ b/src/string_func.h
@@ -41,7 +41,7 @@ char *CDECL str_fmt(const char *str, ...) WARN_FORMAT(1, 2);
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);