Module: wine Branch: master Commit: f6efe2268b0025110938846ae77cf79c029fc355 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f6efe2268b0025110938846ae7...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun Mar 30 15:58:30 2014 +0400
scrrun: Added IsReady property for a drive.
---
dlls/scrrun/filesystem.c | 13 +++++++++++-- dlls/scrrun/tests/filesystem.c | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 33344e4..d963719 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -788,8 +788,17 @@ static HRESULT WINAPI drive_get_SerialNumber(IDrive *iface, LONG *serial) static HRESULT WINAPI drive_get_IsReady(IDrive *iface, VARIANT_BOOL *ready) { struct drive *This = impl_from_IDrive(iface); - FIXME("(%p)->(%p): stub\n", This, ready); - return E_NOTIMPL; + ULARGE_INTEGER freespace; + BOOL ret; + + TRACE("(%p)->(%p)\n", This, ready); + + if (!ready) + return E_POINTER; + + ret = GetDiskFreeSpaceExW(This->root, &freespace, NULL, NULL); + *ready = ret ? VARIANT_TRUE : VARIANT_FALSE; + return S_OK; }
static const IDriveVtbl drivevtbl = { diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 63b79fa..4128bf5 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -1233,6 +1233,30 @@ static void test_DriveCollection(void) hr = IEnumVARIANT_Skip(enumvar, 1); ok(hr == S_FALSE, "got 0x%08x\n", hr);
+ /* reset and iterate again */ + hr = IEnumVARIANT_Reset(enumvar); + ok(hr == S_OK, "got 0x%08x\n", hr); + + while (IEnumVARIANT_Next(enumvar, 1, &var, &fetched) == S_OK) { + IDrive *drive = (IDrive*)V_DISPATCH(&var); + DriveTypeConst type; + + hr = IDrive_get_DriveType(drive, &type); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IDrive_get_IsReady(drive, NULL); + ok(hr == E_POINTER, "got 0x%08x\n", hr); + + if (type == Fixed) { + VARIANT_BOOL ready = VARIANT_FALSE; + + hr = IDrive_get_IsReady(drive, &ready); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(ready == VARIANT_TRUE, "got %x\n", ready); + } + VariantClear(&var); + } + IEnumVARIANT_Release(enumvar); IDriveCollection_Release(drives); }