diff --git a/src/fileio.cpp b/src/fileio.cpp index 2b0f67b1ef..7ac5ce7da7 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 7aa081c452..0c27773716 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 1fb58b46a3..6b86dccf59 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);