From 108c27313bc1c5d4c95f1ddc5d7d8ee57a79071c Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Sat, 17 May 2014 15:15:42 +0400 Subject: [PATCH] scrrun: Implement Count() property for file collection. --- dlls/scrrun/filesystem.c | 28 ++++++++++++++++++++++++++-- dlls/scrrun/tests/filesystem.c | 4 ---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index aead0d264af..f5afb9174c3 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -1831,8 +1831,32 @@ static HRESULT WINAPI filecoll_get__NewEnum(IFileCollection *iface, IUnknown **p static HRESULT WINAPI filecoll_get_Count(IFileCollection *iface, LONG *count) { struct filecollection *This = impl_from_IFileCollection(iface); - FIXME("(%p)->(%p)\n", This, count); - return E_NOTIMPL; + static const WCHAR allW[] = {'\\','*',0}; + WIN32_FIND_DATAW data; + WCHAR pathW[MAX_PATH]; + HANDLE handle; + + TRACE("(%p)->(%p)\n", This, count); + + if(!count) + return E_POINTER; + + *count = 0; + + strcpyW(pathW, This->path); + strcatW(pathW, allW); + handle = FindFirstFileW(pathW, &data); + if (handle == INVALID_HANDLE_VALUE) + return HRESULT_FROM_WIN32(GetLastError()); + + do + { + if (is_file_data(&data)) + *count += 1; + } while (FindNextFileW(handle, &data)); + FindClose(handle); + + return S_OK; } static const IFileCollectionVtbl filecollectionvtbl = { diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index c004eaf612f..531b73276d7 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -1084,9 +1084,7 @@ static void test_FileCollection(void) count = 0; hr = IFileCollection_get_Count(files, &count); -todo_wine ok(hr == S_OK, "got 0x%08x\n", hr); -todo_wine ok(count == 2, "got %d\n", count); lstrcpyW(pathW, buffW); @@ -1097,9 +1095,7 @@ todo_wine /* every time property is requested it scans directory */ count = 0; hr = IFileCollection_get_Count(files, &count); -todo_wine ok(hr == S_OK, "got 0x%08x\n", hr); -todo_wine ok(count == 3, "got %d\n", count); hr = IFileCollection_get__NewEnum(files, NULL);