Listing 1: FileSearch::Search().
STDMETHODIMP FileSearch::Search( BSTR searchRoot, BSTR pattern , long flags, IUnknown **ppenum) { HRESULT hr; if(NULL == ppenum) { hr = E_POINTER; } else { *ppenum = NULL; hrecls_t hSrch; #ifdef RECLS_CHAR_TYPE_IS_CHAR recls_rc_t rc = Recls_Search( winstl::w2a(searchRoot) , winstl::w2a(pattern), flags, &hSrch); #elif defined(RECLS_CHAR_TYPE_IS_WCHAR) recls_rc_t rc = Recls_Search( searchRoot, pattern, flags, &hSrch); #endif /* RECLS_CHAR_TYPE_IS_WCHAR */ if( RECLS_FAILED(rc) && rc != RECLS_RC_NO_MORE_DATA) { set_error_info_from_recls_rc_t(rc); hr = E_FAIL; } else { typedef CComObject<SearchCollection> _Search_t; _Search_t *pSrch = new _Search_t(); if(NULL == pSrch) { Recls_SearchClose(hSrch); hr = E_OUTOFMEMORY; } else { pSrch->AddRef(); SearchInfo info; if(rc == RECLS_RC_NO_MORE_DATA) { info.bEmpty = true; } else { info.hSrch = hSrch; info.flags = flags; info.pattern = pattern; info.searchRoot = searchRoot; } pSrch->SetVoid(&info); ATLASSERT(NULL == info.hSrch); *ppenum = pSrch; hr = S_OK; } } } return hr; }