Ejemplo n.º 1
0
HRESULT CHL_DsResizeRA(_In_ PCHL_RARRAY pra, _In_ UINT newSize)
{
    ASSERT(pra->pValArray != NULL);
    ASSERT((newSize >= RARRAY_MIN_SIZE) &&
        ((pra->maxSize == RARRAY_MAX_SIZE_NOLIMIT) || (newSize <= pra->maxSize)));

    HRESULT hr = S_OK;
    PVOID pvNew = NULL;

    if ((newSize < RARRAY_MIN_SIZE) ||
        ((pra->maxSize != RARRAY_MAX_SIZE_NOLIMIT) && (newSize > pra->maxSize)))
    {
        hr = E_INVALIDARG;
        goto func_end;
    }

    UINT curSize = CHL_DsSizeRA(pra);

    if (curSize == newSize)
    {
        goto func_end;
    }

    if (curSize > newSize)
    {
        // Array is shrinking, see if there are any stored values to be cleared
        for (UINT idx = newSize; idx < curSize; ++idx)
        {
#ifdef _DEBUG
            ASSERT(SUCCEEDED(CHL_DsClearAtRA(pra, idx)));
#else
            CHL_DsClearAtRA(pra, idx);
#endif
        }
    }

    pvNew = realloc(pra->pValArray, _CalcValArrayBytesForSize(newSize));
    if (pvNew != NULL)
    {
        pra->pValArray = pvNew;
        pra->curSize = newSize;
    }
    else
    {
        hr = E_OUTOFMEMORY;
    }

func_end:
    return hr;
}
Ejemplo n.º 2
0
BOOL RemoveFromDupWithinList(_In_ PFILEINFO pFileToDelete, _In_ PDUPFILES_WITHIN pDupWithinToSearch)
{
    WCHAR szCompareFromPath[MAX_PATH];
    if (FAILED(PathCchCombine(szCompareFromPath, ARRAYSIZE(szCompareFromPath), pFileToDelete->szPath, pFileToDelete->szFilename) == NULL))
    {
        logerr(L"PathCchCombine() failed for %s + %s", pFileToDelete->szPath, pFileToDelete->szFilename);
        return FALSE;
    }

    WCHAR szCompareToPath[MAX_PATH];
    for (int i = 0; i < pDupWithinToSearch->nCurFiles; ++i)
    {
        PFILEINFO pFile;
        if (FAILED(CHL_DsReadRA(&pDupWithinToSearch->aFiles, i, &pFile, NULL, TRUE)))
        {
            continue;
        }

        if (FAILED(PathCchCombine(szCompareToPath, ARRAYSIZE(szCompareToPath), pFile->szPath, pFile->szFilename) == NULL))
        {
            logerr(L"PathCchCombine() failed for %s + %s", pFile->szPath, pFile->szFilename);
            return FALSE;
        }

        if (_wcsnicmp(szCompareFromPath, szCompareToPath, MAX_PATH) == 0)
        {
            CHL_DsClearAtRA(&pDupWithinToSearch->aFiles, i);
            return TRUE;
        }
    }
    return FALSE;
}