Nikolay Sivov : gdiplus: Fix GdipGetPathData implementation and test.

Alexandre Julliard julliard at winehq.org
Thu Jun 26 06:48:21 CDT 2008


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

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Wed Jun 25 21:56:27 2008 +0400

gdiplus: Fix GdipGetPathData implementation and test. 

Previous version (commit 3bacdaf664593b720afeb55a94225aab5aa04c80) was totally incorrect.
Thanks to Paul Vriens for pointing this out.

---

 dlls/gdiplus/graphicspath.c       |   13 ++-----------
 dlls/gdiplus/tests/graphicspath.c |   10 +++++++++-
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c
index 24f25e1..d17b392 100644
--- a/dlls/gdiplus/graphicspath.c
+++ b/dlls/gdiplus/graphicspath.c
@@ -484,17 +484,8 @@ GpStatus WINGDIPAPI GdipGetPathData(GpPath *path, GpPathData* pathData)
     if(!path || !pathData)
         return InvalidParameter;
 
-    pathData->Count = path->pathdata.Count;
-
-    pathData->Points = GdipAlloc(sizeof(PointF) * pathData->Count);
-    if(!pathData->Points)
-        return OutOfMemory;
-
-    pathData->Types  = GdipAlloc(pathData->Count);
-    if(!pathData->Points)
-        return OutOfMemory;
-
-    /* copy data */
+    /* Only copy data. pathData allocation/freeing controlled by wrapper class.
+       Assumed that pathData is enough wide to get all data - controlled by wrapper too. */
     memcpy(pathData->Points, path->pathdata.Points, sizeof(PointF) * pathData->Count);
     memcpy(pathData->Types , path->pathdata.Types , pathData->Count);
 
diff --git a/dlls/gdiplus/tests/graphicspath.c b/dlls/gdiplus/tests/graphicspath.c
index 672f6da..262a527 100644
--- a/dlls/gdiplus/tests/graphicspath.c
+++ b/dlls/gdiplus/tests/graphicspath.c
@@ -154,14 +154,22 @@ static void test_getpathdata(void)
     GpPath *path;
     GpPathData data;
     GpStatus status;
+    INT count;
 
     GdipCreatePath(FillModeAlternate, &path);
     status = GdipAddPathLine(path, 5.0, 5.0, 100.0, 50.0);
     expect(Ok, status);
 
+    /* Prepare storage. Made by wrapper class. */
+    status = GdipGetPointCount(path, &count);
+    expect(Ok, status);
+
+    data.Count  = 2;
+    data.Types  = GdipAlloc(sizeof(BYTE) * count);
+    data.Points = GdipAlloc(sizeof(PointF) * count);
+
     status = GdipGetPathData(path, &data);
     expect(Ok, status);
-    expect((data.Count == 2), TRUE);
     expect((data.Points[0].X == 5.0) && (data.Points[0].Y == 5.0) &&
            (data.Points[1].X == 100.0) && (data.Points[1].Y == 50.0), TRUE);
     expect((data.Types[0] == PathPointTypeStart) && (data.Types[1] == PathPointTypeLine), TRUE);




More information about the wine-cvs mailing list