Mercurial > vim
comparison src/os_win32.c @ 2604:6a85219723b9 v7.3.027
updated for version 7.3.027
Problem: Opening a file on a network share is very slow.
Solution: When fixing file name case append "\*" to directory, server and
network share names. (David Anderson, John Beckett)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 13 Oct 2010 20:37:41 +0200 |
parents | f9bd6784f393 |
children | fa5dee44df3f |
comparison
equal
deleted
inserted
replaced
2603:ac0458d9b9dd | 2604:6a85219723b9 |
---|---|
2306 fname_case( | 2306 fname_case( |
2307 char_u *name, | 2307 char_u *name, |
2308 int len) | 2308 int len) |
2309 { | 2309 { |
2310 char szTrueName[_MAX_PATH + 2]; | 2310 char szTrueName[_MAX_PATH + 2]; |
2311 char szTrueNameTemp[_MAX_PATH + 2]; | |
2311 char *ptrue, *ptruePrev; | 2312 char *ptrue, *ptruePrev; |
2312 char *porig, *porigPrev; | 2313 char *porig, *porigPrev; |
2313 int flen; | 2314 int flen; |
2314 WIN32_FIND_DATA fb; | 2315 WIN32_FIND_DATA fb; |
2315 HANDLE hFind; | 2316 HANDLE hFind; |
2316 int c; | 2317 int c; |
2318 int slen; | |
2317 | 2319 |
2318 flen = (int)STRLEN(name); | 2320 flen = (int)STRLEN(name); |
2319 if (flen == 0 || flen > _MAX_PATH) | 2321 if (flen == 0 || flen > _MAX_PATH) |
2320 return; | 2322 return; |
2321 | 2323 |
2356 #endif | 2358 #endif |
2357 *ptrue++ = *porig++; | 2359 *ptrue++ = *porig++; |
2358 } | 2360 } |
2359 *ptrue = NUL; | 2361 *ptrue = NUL; |
2360 | 2362 |
2363 /* To avoid a slow failure append "\*" when searching a directory, | |
2364 * server or network share. */ | |
2365 STRCPY(szTrueNameTemp, szTrueName); | |
2366 slen = strlen(szTrueNameTemp); | |
2367 if (*porig == psepc && slen + 2 < _MAX_PATH) | |
2368 STRCPY(szTrueNameTemp + slen, "\\*"); | |
2369 | |
2361 /* Skip "", "." and "..". */ | 2370 /* Skip "", "." and "..". */ |
2362 if (ptrue > ptruePrev | 2371 if (ptrue > ptruePrev |
2363 && (ptruePrev[0] != '.' | 2372 && (ptruePrev[0] != '.' |
2364 || (ptruePrev[1] != NUL | 2373 || (ptruePrev[1] != NUL |
2365 && (ptruePrev[1] != '.' || ptruePrev[2] != NUL))) | 2374 && (ptruePrev[1] != '.' || ptruePrev[2] != NUL))) |
2366 && (hFind = FindFirstFile(szTrueName, &fb)) | 2375 && (hFind = FindFirstFile(szTrueNameTemp, &fb)) |
2367 != INVALID_HANDLE_VALUE) | 2376 != INVALID_HANDLE_VALUE) |
2368 { | 2377 { |
2369 c = *porig; | 2378 c = *porig; |
2370 *porig = NUL; | 2379 *porig = NUL; |
2371 | 2380 |