diff options
author | alberth <alberth@openttd.org> | 2011-07-16 18:43:22 +0000 |
---|---|---|
committer | alberth <alberth@openttd.org> | 2011-07-16 18:43:22 +0000 |
commit | d55b380b695c184a6bfc99790f8ff738c84867cc (patch) | |
tree | c9f0dac6c86a885ba071d9497071083327e43620 | |
parent | 20c2b5fdde6f3f70dc0a955ef803b8a0fa21e0e5 (diff) | |
download | openttd-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.cpp | 6 | ||||
-rw-r--r-- | src/string.cpp | 11 | ||||
-rw-r--r-- | src/string_func.h | 2 |
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); |