Francois Gouget : shell32: Get rid of TRASH_ELEMENT and TRASH_DisposeElement().

Alexandre Julliard julliard at winehq.org
Mon Feb 9 10:29:35 CST 2009


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

Author: Francois Gouget <fgouget at free.fr>
Date:   Sat Feb  7 16:09:05 2009 +0100

shell32: Get rid of TRASH_ELEMENT and TRASH_DisposeElement().

The latter was unused while the former did not seem very useful.

---

 dlls/shell32/recyclebin.c |    4 +-
 dlls/shell32/trash.c      |   59 ++++++++++++++------------------------------
 dlls/shell32/xdg.h        |    6 +----
 3 files changed, 22 insertions(+), 47 deletions(-)

diff --git a/dlls/shell32/recyclebin.c b/dlls/shell32/recyclebin.c
index fef478d..a538b3c 100644
--- a/dlls/shell32/recyclebin.c
+++ b/dlls/shell32/recyclebin.c
@@ -311,7 +311,7 @@ static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMID
     WIN32_FIND_DATAW data;
 
     TRACE("(%p, %p, %x, %p)\n", This, pidl, uFlags, pName);
-    TRASH_UnpackItemID(&pidl->mkid, NULL, &data);
+    TRASH_UnpackItemID(&pidl->mkid, &data);
     pName->uType = STRRET_WSTR;
     pName->u.pOleStr = StrDupW(PathFindFileNameW(data.cFileName));
     if (pName->u.pOleStr == NULL)
@@ -414,7 +414,7 @@ static HRESULT WINAPI RecycleBin_GetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIS
     if (iColumn == COLUMN_NAME)
         return RecycleBin_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &pDetails->str);
 
-    TRASH_UnpackItemID(&pidl->mkid, NULL, &data);
+    TRASH_UnpackItemID(&pidl->mkid, &data);
     switch (iColumn)
     {
         case COLUMN_DATEDEL:
diff --git a/dlls/shell32/trash.c b/dlls/shell32/trash.c
index d692046..6f9cae4 100644
--- a/dlls/shell32/trash.c
+++ b/dlls/shell32/trash.c
@@ -320,24 +320,18 @@ BOOL TRASH_TrashFile(LPCWSTR wszPath)
  *  bucket name                 - currently only an empty string meaning the home bucket is supported
  *  trash file name             - a NUL-terminated string
  */
-struct tagTRASH_ELEMENT
+static HRESULT TRASH_CreateSimplePIDL(LPCSTR filename, const WIN32_FIND_DATAW *data, LPITEMIDLIST *pidlOut)
 {
-    TRASH_BUCKET *bucket;
-    LPSTR filename;
-};
-
-static HRESULT TRASH_CreateSimplePIDL(const TRASH_ELEMENT *element, const WIN32_FIND_DATAW *data, LPITEMIDLIST *pidlOut)
-{
-    LPITEMIDLIST pidl = SHAlloc(2+1+sizeof(WIN32_FIND_DATAW)+1+lstrlenA(element->filename)+1+2);
+    LPITEMIDLIST pidl = SHAlloc(2+1+sizeof(WIN32_FIND_DATAW)+1+lstrlenA(filename)+1+2);
     *pidlOut = NULL;
     if (pidl == NULL)
         return E_OUTOFMEMORY;
-    pidl->mkid.cb = (USHORT)(2+1+sizeof(WIN32_FIND_DATAW)+1+lstrlenA(element->filename)+1);
+    pidl->mkid.cb = (USHORT)(2+1+sizeof(WIN32_FIND_DATAW)+1+lstrlenA(filename)+1);
     pidl->mkid.abID[0] = 0;
     memcpy(pidl->mkid.abID+1, data, sizeof(WIN32_FIND_DATAW));
     pidl->mkid.abID[1+sizeof(WIN32_FIND_DATAW)] = 0;
-    lstrcpyA((LPSTR)(pidl->mkid.abID+1+sizeof(WIN32_FIND_DATAW)+1), element->filename);
-    *(USHORT *)(pidl->mkid.abID+1+sizeof(WIN32_FIND_DATAW)+1+lstrlenA(element->filename)+1) = 0;
+    lstrcpyA((LPSTR)(pidl->mkid.abID+1+sizeof(WIN32_FIND_DATAW)+1), filename);
+    *(USHORT *)(pidl->mkid.abID+1+sizeof(WIN32_FIND_DATAW)+1+lstrlenA(filename)+1) = 0;
     *pidlOut = pidl;
     return S_OK;
 }
@@ -346,17 +340,15 @@ static HRESULT TRASH_CreateSimplePIDL(const TRASH_ELEMENT *element, const WIN32_
  *      TRASH_UnpackItemID [Internal]
  *
  * DESCRIPTION:
- * Extract the information stored in an Item ID. The TRASH_ELEMENT
- * identifies the element in the Trash. The WIN32_FIND_DATA contains the
- * information about the original file. The data->ftLastAccessTime contains
+ * Extract the information stored in an Item ID. The WIN32_FIND_DATA contains
+ * the information about the original file. The data->ftLastAccessTime contains
  * the deletion time
  *
  * PARAMETER(S):
  * [I] id : the ID of the item
- * [O] element : the trash element this item id contains. Can be NULL if not needed
  * [O] data : the WIN32_FIND_DATA of the original file. Can be NULL is not needed
  */                 
-HRESULT TRASH_UnpackItemID(LPCSHITEMID id, TRASH_ELEMENT *element, WIN32_FIND_DATAW *data)
+HRESULT TRASH_UnpackItemID(LPCSHITEMID id, WIN32_FIND_DATAW *data)
 {
     if (id->cb < 2+1+sizeof(WIN32_FIND_DATAW)+2)
         return E_INVALIDARG;
@@ -367,22 +359,10 @@ HRESULT TRASH_UnpackItemID(LPCSHITEMID id, TRASH_ELEMENT *element, WIN32_FIND_DA
 
     if (data != NULL)
         *data = *(WIN32_FIND_DATAW *)(id->abID+1);
-    if (element != NULL)
-    {
-        element->bucket = home_trash;
-        element->filename = StrDupA((LPCSTR)(id->abID+1+sizeof(WIN32_FIND_DATAW)+1));
-        if (element->filename == NULL)
-            return E_OUTOFMEMORY;
-    }
     return S_OK;
 }
 
-void TRASH_DisposeElement(TRASH_ELEMENT *element)
-{
-    SHFree(element->filename);
-}
-
-static HRESULT TRASH_GetDetails(const TRASH_ELEMENT *element, WIN32_FIND_DATAW *data)
+static HRESULT TRASH_GetDetails(const TRASH_BUCKET *bucket, LPCSTR filename, WIN32_FIND_DATAW *data)
 {
     LPSTR path = NULL;
     XDG_PARSED_FILE *parsed = NULL;
@@ -393,21 +373,21 @@ static HRESULT TRASH_GetDetails(const TRASH_ELEMENT *element, WIN32_FIND_DATAW *
     HRESULT ret = S_FALSE;
     LPWSTR original_dos_name;
     int suffix_length = lstrlenA(trashinfo_suffix);
-    int filename_length = lstrlenA(element->filename);
-    int files_length = lstrlenA(element->bucket->files_dir);
-    int path_length = max(lstrlenA(element->bucket->info_dir), files_length);
+    int filename_length = lstrlenA(filename);
+    int files_length = lstrlenA(bucket->files_dir);
+    int path_length = max(lstrlenA(bucket->info_dir), files_length);
     
     path = SHAlloc(path_length + filename_length + 1);
     if (path == NULL) return E_OUTOFMEMORY;
-    wsprintfA(path, "%s%s", element->bucket->files_dir, element->filename);
+    wsprintfA(path, "%s%s", bucket->files_dir, filename);
     path[path_length + filename_length - suffix_length] = 0;  /* remove the '.trashinfo' */    
     if (lstat(path, &stats) == -1)
     {
-        ERR("Error accessing data file for trashinfo %s (errno=%d)\n", element->filename, errno);
+        ERR("Error accessing data file for trashinfo %s (errno=%d)\n", filename, errno);
         goto failed;
     }
     
-    wsprintfA(path, "%s%s", element->bucket->info_dir, element->filename);
+    wsprintfA(path, "%s%s", bucket->info_dir, filename);
     fd = open(path, O_RDONLY);
     if (fd == -1)
     {
@@ -536,15 +516,14 @@ HRESULT TRASH_EnumItems(LPITEMIDLIST **pidls, int *count)
     for (i=0; i<ti_count; i++)
     {
         WIN32_FIND_DATAW data;
-        TRASH_ELEMENT elem;
+        LPCSTR filename;
         
-        elem.bucket = home_trash;
-        elem.filename = DPA_GetPtr(tinfs, i);
-        if (FAILED(err = TRASH_GetDetails(&elem, &data)))
+        filename = DPA_GetPtr(tinfs, i);
+        if (FAILED(err = TRASH_GetDetails(home_trash, filename, &data)))
             goto failed;
         if (err == S_FALSE)
             continue;
-        if (FAILED(err = TRASH_CreateSimplePIDL(&elem, &data, &(*pidls)[pos])))
+        if (FAILED(err = TRASH_CreateSimplePIDL(filename, &data, &(*pidls)[pos])))
             goto failed;
         pos++;
     }
diff --git a/dlls/shell32/xdg.h b/dlls/shell32/xdg.h
index daa864f..f010632 100644
--- a/dlls/shell32/xdg.h
+++ b/dlls/shell32/xdg.h
@@ -37,14 +37,10 @@ XDG_PARSED_FILE *XDG_ParseDesktopFile(int fd);
 char *XDG_GetStringValue(XDG_PARSED_FILE *file, const char *group_name, const char *value_name, DWORD dwFlags);
 void XDG_FreeParsedFile(XDG_PARSED_FILE *file);
 
-/* implemented in trash.c */
-typedef struct tagTRASH_ELEMENT TRASH_ELEMENT;
-
 BOOL TRASH_CanTrashFile(LPCWSTR wszPath);
 BOOL TRASH_TrashFile(LPCWSTR wszPath);
-HRESULT TRASH_UnpackItemID(LPCSHITEMID id, TRASH_ELEMENT *element, WIN32_FIND_DATAW *data);
+HRESULT TRASH_UnpackItemID(LPCSHITEMID id, WIN32_FIND_DATAW *data);
 HRESULT TRASH_EnumItems(LPITEMIDLIST **pidls, int *count);
-void TRASH_DisposeElement(TRASH_ELEMENT *element);
 
 HRESULT XDG_UserDirLookup(const char * const *xdg_dirs, const unsigned int num_dirs, char *** out_ptr);
 




More information about the wine-cvs mailing list