Nikolay Sivov : scrrun: Added IsReady property for a drive.

Alexandre Julliard julliard at winehq.org
Mon Mar 31 13:32:43 CDT 2014


Module: wine
Branch: master
Commit: f6efe2268b0025110938846ae77cf79c029fc355
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f6efe2268b0025110938846ae77cf79c029fc355

Author: Nikolay Sivov <nsivov at 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);
 }




More information about the wine-cvs mailing list