Alexandre Julliard : winex11: Correctly free CF_DIB format, and don' t free unknown GDI formats.

Alexandre Julliard julliard at winehq.org
Thu Aug 18 10:23:25 CDT 2016


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Aug 18 18:24:28 2016 +0900

winex11: Correctly free CF_DIB format, and don't free unknown GDI formats.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winex11.drv/clipboard.c | 44 ++++++++++++++++++--------------------------
 1 file changed, 18 insertions(+), 26 deletions(-)

diff --git a/dlls/winex11.drv/clipboard.c b/dlls/winex11.drv/clipboard.c
index 9b6c749..460440d 100644
--- a/dlls/winex11.drv/clipboard.c
+++ b/dlls/winex11.drv/clipboard.c
@@ -577,38 +577,30 @@ static void X11DRV_CLIPBOARD_FreeData(LPWINE_CLIPDATA lpData)
 {
     TRACE("%04x\n", lpData->wFormatID);
 
-    if ((lpData->wFormatID >= CF_GDIOBJFIRST &&
-        lpData->wFormatID <= CF_GDIOBJLAST) || 
-        lpData->wFormatID == CF_BITMAP || 
-        lpData->wFormatID == CF_DIB || 
-        lpData->wFormatID == CF_PALETTE)
-    {
-      if (lpData->hData)
-	DeleteObject(lpData->hData);
+    if (!lpData->hData) return;
 
-      if ((lpData->wFormatID == CF_DIB) && lpData->drvData)
-          XFreePixmap(gdi_display, lpData->drvData);
-    }
-    else if (lpData->wFormatID == CF_METAFILEPICT)
+    switch (lpData->wFormatID)
     {
-      if (lpData->hData)
-      {
+    case CF_BITMAP:
+    case CF_PALETTE:
+        DeleteObject(lpData->hData);
+        break;
+    case CF_DIB:
+        if (lpData->drvData) XFreePixmap(gdi_display, lpData->drvData);
+        GlobalFree(lpData->hData);
+        break;
+    case CF_METAFILEPICT:
         DeleteMetaFile(((METAFILEPICT *)GlobalLock( lpData->hData ))->hMF );
         GlobalFree(lpData->hData);
-      }
-    }
-    else if (lpData->wFormatID == CF_ENHMETAFILE)
-    {
-        if (lpData->hData)
-            DeleteEnhMetaFile(lpData->hData);
-    }
-    else if (lpData->wFormatID < CF_PRIVATEFIRST ||
-             lpData->wFormatID > CF_PRIVATELAST)
-    {
-      if (lpData->hData)
+        break;
+    case CF_ENHMETAFILE:
+        DeleteEnhMetaFile(lpData->hData);
+        break;
+    default:
+        if (lpData->wFormatID >= CF_PRIVATEFIRST && lpData->wFormatID <= CF_PRIVATELAST) break;
         GlobalFree(lpData->hData);
+        break;
     }
-
     lpData->hData = 0;
     lpData->drvData = 0;
 }




More information about the wine-cvs mailing list