Dylan Smith : ddraw: Avoid clearing some memory unnecessarily.

Alexandre Julliard julliard at winehq.org
Tue May 24 12:53:48 CDT 2011


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

Author: Dylan Smith <dylan.ah.smith at gmail.com>
Date:   Mon May 23 17:58:36 2011 -0400

ddraw: Avoid clearing some memory unnecessarily.

---

 dlls/ddraw/ddraw.c         |    2 --
 dlls/ddraw/ddraw_private.h |   23 +++++++++--------------
 2 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 58eb452..3b12003 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -3125,10 +3125,8 @@ static HRESULT CreateSurface(IDirectDrawImpl *ddraw, DDSURFACEDESC2 *DDSD,
         DDSD->ddsCaps.dwCaps2 &= ~DDSCAPS2_MIPMAPSUBLEVEL;
 
     /* Modify some flags */
-    memset(&desc2, 0, sizeof(desc2));
     desc2.dwSize = sizeof(desc2);   /* For the struct copy */
     DD_STRUCT_COPY_BYSIZE(&desc2, DDSD);
-    desc2.dwSize = sizeof(desc2);   /* To override a possibly smaller size */
     desc2.u4.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT); /* Just to be sure */
 
     /* Get the video mode from WineD3D - we will need it */
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index 8aa69c1..78cb3b4 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -588,20 +588,15 @@ typedef struct
 /* Structure copy */
 #define ME(x,f,e) { x, #x, (void (*)(const void *))(f), offsetof(STRUCT, e) }
 
-#define DD_STRUCT_COPY_BYSIZE(to,from)                  \
-        do {                                            \
-                DWORD __size = (to)->dwSize;            \
-                DWORD __copysize = __size;              \
-                DWORD __resetsize = __size;             \
-                assert(to != from);                     \
-                if (__resetsize > sizeof(*to))          \
-                    __resetsize = sizeof(*to);          \
-                memset(to,0,__resetsize);               \
-                if ((from)->dwSize < __size)            \
-                    __copysize = (from)->dwSize;        \
-                memcpy(to,from,__copysize);             \
-                (to)->dwSize = __size;/*restore size*/  \
-        } while (0)
+#define DD_STRUCT_COPY_BYSIZE(to,from)                            \
+    do {                                                          \
+        DWORD __size = (to)->dwSize;                              \
+        DWORD __copysize = min(__size, (from)->dwSize);           \
+        assert(to != from);                                       \
+        memcpy(to, from, __copysize);                             \
+        memset((char*)(to) + __copysize, 0, __size - __copysize); \
+        (to)->dwSize = __size; /* restore size */                 \
+    } while (0)
 
 
 #endif




More information about the wine-cvs mailing list