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; }
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; }