Changeset 2879 in kBuild for trunk/src/kmk/dir-nt-bird.c
- Timestamp:
- Sep 5, 2016 8:14:21 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/dir-nt-bird.c
r2868 r2879 71 71 * Global Variables * 72 72 *********************************************************************************************************************************/ 73 PKFSCACHE g_pFsCache = NULL; 73 /** The cache.*/ 74 PKFSCACHE g_pFsCache = NULL; 75 /** Number of times dir_cache_invalid_missing was called. */ 76 static KU32 g_cInvalidates = 0; 74 77 75 78 … … 445 448 else 446 449 { 447 if ( pPathObj->cchName + 1 < cbFull)450 if ((size_t)pPathObj->cchName + 1 < cbFull) 448 451 { 449 452 memcpy(pszFull, pPathObj->pszName, pPathObj->cchName); … … 474 477 int stat_only_mtime(const char *pszPath, struct stat *pStat) 475 478 { 476 KFSLOOKUPERROR enmError; 477 PKFSOBJ pPathObj = kFsCacheLookupA(g_pFsCache, pszPath, &enmError); 478 if (pPathObj) 479 { 480 if (pPathObj->bObjType != KFSOBJ_TYPE_MISSING) 481 { 482 kHlpAssert(pPathObj->fHaveStats); /* currently always true. */ 483 pStat->st_mtime = pPathObj->Stats.st_mtime; 479 /* Currently a little expensive, so just hit the file system once the 480 jobs starts comming in. */ 481 if (g_cInvalidates == 0) 482 { 483 KFSLOOKUPERROR enmError; 484 PKFSOBJ pPathObj = kFsCacheLookupA(g_pFsCache, pszPath, &enmError); 485 if (pPathObj) 486 { 487 if (pPathObj->bObjType != KFSOBJ_TYPE_MISSING) 488 { 489 kHlpAssert(pPathObj->fHaveStats); /* currently always true. */ 490 pStat->st_mtime = pPathObj->Stats.st_mtime; 491 kFsCacheObjRelease(g_pFsCache, pPathObj); 492 return 0; 493 } 494 484 495 kFsCacheObjRelease(g_pFsCache, pPathObj); 485 return 0; 486 } 487 488 kFsCacheObjRelease(g_pFsCache, pPathObj); 489 errno = ENOENT; 490 } 491 else 492 errno = enmError == KFSLOOKUPERROR_NOT_DIR 493 || enmError == KFSLOOKUPERROR_PATH_COMP_NOT_DIR 494 ? ENOTDIR : ENOENT; 495 return -1; 496 errno = ENOENT; 497 } 498 else 499 errno = enmError == KFSLOOKUPERROR_NOT_DIR 500 || enmError == KFSLOOKUPERROR_PATH_COMP_NOT_DIR 501 ? ENOTDIR : ENOENT; 502 return -1; 503 } 504 return birdStatModTimeOnly(pszPath, &pStat->st_mtim, 1 /*fFollowLink*/); 496 505 } 497 506 … … 504 513 void dir_cache_invalid_missing(void) 505 514 { 515 g_cInvalidates++; 506 516 kFsCacheInvalidateAll(g_pFsCache); 507 517 }
Note:
See TracChangeset
for help on using the changeset viewer.