Module: wine
Branch: master
Commit: f6efe2268b0025110938846ae77cf79c029fc355
URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f6efe2268b0025110938846ae…
Author: Nikolay Sivov <nsivov(a)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);
}