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