Christian Costa wrote: > > Hi, > > This patch adds implementation for the IFilterMapper interface.
Nice. I have few comments (see below). > However filters registered with this interface require some work in > devenum to > be seen from application. This will be done when time permits. Ok. I had assumed devenum was complete, but obviously not. Does it spit out any fixme's? ... > @@ -879,7 +893,7 @@ > if (SUCCEEDED(hrSub)) > hrSub = > ICreateDevEnum_CreateClassEnumerator(pCreateDevEnum, &clsidCat, > &pEnum, 0); > > - if (SUCCEEDED(hrSub)) > + if (SUCCEEDED(hrSub) && (hrSub == S_OK)) You can remove the SUCCEEDED(hrSub) completely here. ... > + if (SUCCEEDED(hrSub)) > + { > + len = (strlenW((WCHAR*)&V_UNION(&var, bstrVal))+1) * > sizeof(WCHAR); > + if (!(regfilters[idx].Name = CoTaskMemAlloc(len*2))) > + hr = E_OUTOFMEMORY; > + } > + > + if (SUCCEEDED(hrSub)) > + { > + memcpy(regfilters[idx].Name, &V_UNION(&var, bstrVal), len); > + regfilters[idx].Clsid = clsid; > + idx++; > + } Indentation messed up a bit here and many other places. ... > + if (cFetched > 0) > + { > + for(i = 0; i < cFetched; i++) { > + /* The string in the REGFILTER structure must be > allocated in the same block as the REGFILTER structure itself */ > + ppRegFilter[i] = > (REGFILTER*)CoTaskMemAlloc(sizeof(REGFILTER)+(strlenW(This->RegFil > ters[i].Name)+1)*sizeof(WCHAR)); > + if (!ppRegFilter[i]) { > + while(i) { > + CoTaskMemFree(ppRegFilter[--i]); > + ppRegFilter[i] = NULL; > + } > + return E_OUTOFMEMORY; > + } > + ppRegFilter[i]->Clsid = This->RegFilters[i].Clsid; > + ppRegFilter[i]->Name = > (WCHAR*)((char*)ppRegFilter[i]+sizeof(REGFILTER)); > + CopyMemory(ppRegFilter[i]->Name, > This->RegFilters[i].Name, > (strlenW(This->RegFilters[i].Name)+1)*sizeof(WCHAR)); > + } Please choose one style of bracket placement and stick to it (this occurs in a few places too). Other than these things, it looks fine. Rob