Jay Yang : shell32: Implement SHQueryRecycleBin.

Alexandre Julliard julliard at winehq.org
Mon Jul 11 13:17:46 CDT 2011


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

Author: Jay Yang <jkelleyy at gmail.com>
Date:   Fri Jul  8 10:46:44 2011 -0400

shell32: Implement SHQueryRecycleBin.

---

 dlls/shell32/recyclebin.c       |   31 +++++++++++++++++++++++++++++++
 dlls/shell32/shellord.c         |   20 --------------------
 dlls/shell32/tests/recyclebin.c |    4 ++--
 3 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/dlls/shell32/recyclebin.c b/dlls/shell32/recyclebin.c
index 47d2775..4787ad7 100644
--- a/dlls/shell32/recyclebin.c
+++ b/dlls/shell32/recyclebin.c
@@ -2,6 +2,7 @@
  * Trash virtual folder support. The trashing engine is implemented in trash.c
  *
  * Copyright (C) 2006 Mikolaj Zalewski
+ * Copyright 2011 Jay Yang
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -34,6 +35,7 @@
 #include "shlwapi.h"
 #include "shlobj.h"
 #include "shresdef.h"
+#include "shellapi.h"
 #include "wine/debug.h"
 
 #include "shell32_main.h"
@@ -524,6 +526,35 @@ static const IPersistFolder2Vtbl recycleBinPersistVtbl =
     RecycleBin_GetCurFolder
 };
 
+HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
+{
+    WCHAR wszRootPath[MAX_PATH];
+    MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, wszRootPath, MAX_PATH);
+    return SHQueryRecycleBinW(wszRootPath, pSHQueryRBInfo);
+}
+
+HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
+{
+    LPITEMIDLIST *apidl;
+    INT cidl;
+    INT i=0;
+    TRACE("(%s, %p)\n", debugstr_w(pszRootPath), pSHQueryRBInfo);
+    FIXME("Ignoring pszRootPath=%s\n",debugstr_w(pszRootPath));
+
+    TRASH_EnumItems(&apidl,&cidl);
+    pSHQueryRBInfo->i64NumItems = cidl;
+    pSHQueryRBInfo->i64Size = 0;
+    for (; i<cidl; i++)
+    {
+        WIN32_FIND_DATAW data;
+        TRASH_UnpackItemID(&((apidl[i])->mkid),&data);
+        pSHQueryRBInfo->i64Size += ((DWORDLONG)data.nFileSizeHigh << 32) + data.nFileSizeLow;
+        ILFree(apidl[i]);
+    }
+    SHFree(apidl);
+    return S_OK;
+}
+
 /*************************************************************************
  * SHUpdateRecycleBinIcon                                [SHELL32.@]
  *
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index 051154d..8d7ce89 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -2119,26 +2119,6 @@ DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options)
     return SHFMT_NOFORMAT;
 }
 
-HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
-{
-    FIXME("%s, %p - stub\n", debugstr_a(pszRootPath), pSHQueryRBInfo);
-
-    pSHQueryRBInfo->i64Size = 0;
-    pSHQueryRBInfo->i64NumItems = 0;
-
-    return S_OK;
-}
-
-HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
-{
-    FIXME("%s, %p - stub\n", debugstr_w(pszRootPath), pSHQueryRBInfo);
-
-    pSHQueryRBInfo->i64Size = 0;
-    pSHQueryRBInfo->i64NumItems = 0;
-
-    return S_OK;
-}
-
 /*************************************************************************
  *              SHSetLocalizedName (SHELL32.@)
  */
diff --git a/dlls/shell32/tests/recyclebin.c b/dlls/shell32/tests/recyclebin.c
index ed30464..ce101a6 100644
--- a/dlls/shell32/tests/recyclebin.c
+++ b/dlls/shell32/tests/recyclebin.c
@@ -90,8 +90,8 @@ static void test_query_recyclebin(void)
     ok(!pSHFileOperationA(&shfo), "Deletion was not successful\n");
     hr = pSHQueryRecycleBinA(buf,&info2);
     ok(hr == S_OK, "SHQueryRecycleBinW failed with error 0x%x\n", hr);
-    todo_wine ok(info2.i64Size==info1.i64Size+written,"Expected recycle bin to have 0x%s bytes\n",str_from_int64(info1.i64Size+written));
-    todo_wine ok(info2.i64NumItems==info1.i64NumItems+1,"Expected recycle bin to have 0x%s items\n",str_from_int64(info1.i64NumItems+1));
+    ok(info2.i64Size==info1.i64Size+written,"Expected recycle bin to have 0x%s bytes\n",str_from_int64(info1.i64Size+written));
+    ok(info2.i64NumItems==info1.i64NumItems+1,"Expected recycle bin to have 0x%s items\n",str_from_int64(info1.i64NumItems+1));
 }
 
 




More information about the wine-cvs mailing list