(svn r22669) -Codechange: For non-windows, only test for file existence again if strtolower actually changed the name.

This commit is contained in:
alberth 2011-07-16 18:43:22 +00:00
parent 20c2b5fdde
commit d55b380b69
3 changed files with 12 additions and 7 deletions

View File

@ -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

View File

@ -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;
}
/**

View File

@ -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);