Mercurial > hg > openttd
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);