Charles Davis <cdavis(a)mymail.mines.edu> writes:
@@ -1828,13 +2054,24 @@ static NTSTATUS find_file_in_dir( char *unix_name, int pos, const WCHAR *name, i if (ret >= 0 && !used_default) { unix_name[pos + ret] = 0; - if (!stat( unix_name, &st )) + /* when checking case on a case insensitive but case preserving + * fs, don't even bother doing the stat(), so we don't match the + * file case-insensitively. + */ + if ((case_sensitive || !check_case) && !stat( unix_name, &st )) { if (is_win_dir) *is_win_dir = is_same_file( &windir, &st ); return STATUS_SUCCESS; }
This still doesn't make sense. There's no reason to ever skip the stat.
@@ -2455,6 +2713,10 @@ static NTSTATUS lookup_unix_name( const WCHAR *name, int name_len, char **buffer const WCHAR *end, *next; int is_win_dir = 0;
+ unix_name[pos] = 0; + stat( unix_name, &st ); + unix_name[pos] = '/';
You can't add extra stat calls to the normal path. This is supposed to be an optimization. -- Alexandre Julliard julliard(a)winehq.org