if (!fDsa)
return E_FAIL;
- if (cRequired > 0 || cImplemented == (ULONG)-1)
- {
- FIXME("Implement required categories class enumeration\n");
- return E_NOTIMPL;
- }
-
- // Don't do anything if we have nothing
- if (cRequired == 0 && cImplemented == (ULONG)-1)
- return E_FAIL;
+ // Parameter validation:
+ // - We must have at least one category to manage.
+ // - The array pointers must not be NULL if there is a non-zero
+ // element count specified for them.
+ if (cImplemented == 0 && cRequired == 0)
+ return E_INVALIDARG;
+ if ((cImplemented && !pImplemented) || (cRequired && !pRequired))
+ return E_INVALIDARG;
- // For each implemented category, create a cache and add it to our local DSA
+ // For each implemented category, create a cache and add it to our local DSA.
for (i = 0; i < cImplemented; i++)
{
CComCatCachedCategory cachedCat;
return hr;
cachedCat.WriteCacheToDSA(fDsa);
}
+
+ // TODO: Implement caching of the required categories.
+ if (cRequired > 0)
+ {
+ FIXME("Implement required categories class enumeration\n");
+
+ // Only fail in case we didn't look at the implemented categories.
+ if (cImplemented == 0)
+ return E_NOTIMPL;
+ }
+
return S_OK;
}