VirtualBox

Changeset 2879 in kBuild for trunk/src/kmk/dir-nt-bird.c


Ignore:
Timestamp:
Sep 5, 2016 8:14:21 PM (9 years ago)
Author:
bird
Message:

fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/dir-nt-bird.c

    r2868 r2879  
    7171*   Global Variables                                                                                                             *
    7272*********************************************************************************************************************************/
    73 PKFSCACHE g_pFsCache = NULL;
     73/** The cache.*/
     74PKFSCACHE   g_pFsCache = NULL;
     75/** Number of times dir_cache_invalid_missing was called. */
     76static KU32 g_cInvalidates = 0;
    7477
    7578
     
    445448        else
    446449        {
    447             if (pPathObj->cchName + 1 < cbFull)
     450            if ((size_t)pPathObj->cchName + 1 < cbFull)
    448451            {
    449452                memcpy(pszFull, pPathObj->pszName, pPathObj->cchName);
     
    474477int stat_only_mtime(const char *pszPath, struct stat *pStat)
    475478{
    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
    484495            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*/);
    496505}
    497506
     
    504513void dir_cache_invalid_missing(void)
    505514{
     515    g_cInvalidates++;
    506516    kFsCacheInvalidateAll(g_pFsCache);
    507517}
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette