=?UTF-8?Q?Lauri=20Kentt=C3=A4=20?=: comdlg32: Avoid repeated GlobalLock etc in filedlg.

Alexandre Julliard julliard at winehq.org
Fri Jul 8 10:02:04 CDT 2016


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

Author: Lauri Kenttä <lauri.kentta at gmail.com>
Date:   Wed Jul  6 13:27:44 2016 +0300

comdlg32: Avoid repeated GlobalLock etc in filedlg.

Signed-off-by: Lauri Kenttä <lauri.kentta at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comdlg32/filedlg.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
index a04e646..0fbb621 100644
--- a/dlls/comdlg32/filedlg.c
+++ b/dlls/comdlg32/filedlg.c
@@ -225,6 +225,7 @@ LPITEMIDLIST  GetParentPidl(LPITEMIDLIST pidl);
 static LPITEMIDLIST GetPidlFromName(IShellFolder *psf,LPWSTR lpcstrFileName);
 static BOOL IsPidlFolder (LPSHELLFOLDER psf, LPCITEMIDLIST pidl);
 static UINT GetNumSelected( IDataObject *doSelected );
+static void COMCTL32_ReleaseStgMedium(STGMEDIUM medium);
 
 /* Shell memory allocation */
 static void *MemAlloc(UINT size);
@@ -3649,12 +3650,18 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
     LPITEMIDLIST      pidl;
     LPWSTR            lpstrAllFiles, lpstrTmp;
     UINT nFiles = 0, nFileToOpen, nFileSelected, nAllFilesLength = 0, nThisFileLength, nAllFilesMaxLength;
+    STGMEDIUM medium;
+    LPIDA cida;
+    FORMATETC formatetc = get_def_format();
 
     TRACE("\n");
     fodInfos = GetPropA(hwnd,FileOpenDlgInfosStr);
 
-    /* Count how many files we have */
-    nFileSelected = GetNumSelected( fodInfos->Shell.FOIDataObject );
+    if (FAILED(IDataObject_GetData(fodInfos->Shell.FOIDataObject, &formatetc, &medium)))
+        return;
+
+    cida = GlobalLock(medium.u.hGlobal);
+    nFileSelected = cida->cidl;
 
     /* Allocate a buffer */
     nAllFilesMaxLength = MAX_PATH + 3;
@@ -3665,7 +3672,7 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
     /* Loop through the selection, handle only files (not folders) */
     for (nFileToOpen = 0; nFileToOpen < nFileSelected; nFileToOpen++)
     {
-        pidl = GetPidlFromDataObject( fodInfos->Shell.FOIDataObject, nFileToOpen+1 );
+        pidl = (LPITEMIDLIST)((LPBYTE)cida + cida->aoffset[nFileToOpen + 1]);
         if (pidl)
         {
             if (!IsPidlFolder(fodInfos->Shell.FOIShellFolder, pidl))
@@ -3686,7 +3693,6 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
                 lpstrAllFiles[nAllFilesLength++] = '"';
                 lpstrAllFiles[nAllFilesLength++] = ' ';
             }
-            COMDLG32_SHFree(pidl);
         }
     }
 
@@ -3707,6 +3713,7 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
 
 ret:
     HeapFree(GetProcessHeap(), 0, lpstrAllFiles);
+    COMCTL32_ReleaseStgMedium(medium);
 }
 
 




More information about the wine-cvs mailing list