gdiplus: Fix GdipCreatePathIter to handle NULL as path. Fix tests.

This commit is contained in:
Nikolay Sivov 2008-07-13 11:52:12 +04:00 committed by Alexandre Julliard
parent 6ef6f7167d
commit dcfbe58ef7
2 changed files with 22 additions and 12 deletions

View File

@ -31,24 +31,30 @@ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator **iterator, GpPath* path)
{
INT size;
if(!iterator || !path)
if(!iterator)
return InvalidParameter;
size = path->pathdata.Count;
*iterator = GdipAlloc(sizeof(GpPathIterator));
if(!*iterator) return OutOfMemory;
(*iterator)->pathdata.Types = GdipAlloc(size);
(*iterator)->pathdata.Points = GdipAlloc(size * sizeof(PointF));
if(path){
size = path->pathdata.Count;
memcpy((*iterator)->pathdata.Types, path->pathdata.Types, size);
memcpy((*iterator)->pathdata.Points, path->pathdata.Points,
size * sizeof(PointF));
(*iterator)->pathdata.Count = size;
(*iterator)->pathdata.Types = GdipAlloc(size);
(*iterator)->pathdata.Points = GdipAlloc(size * sizeof(PointF));
(*iterator)->subpath_pos = 0;
(*iterator)->marker_pos = 0;
memcpy((*iterator)->pathdata.Types, path->pathdata.Types, size);
memcpy((*iterator)->pathdata.Points, path->pathdata.Points,size * sizeof(PointF));
(*iterator)->pathdata.Count = size;
}
else{
(*iterator)->pathdata.Types = NULL;
(*iterator)->pathdata.Points = NULL;
(*iterator)->pathdata.Count = 0;
}
(*iterator)->subpath_pos = 0;
(*iterator)->marker_pos = 0;
(*iterator)->pathtype_pos = 0;
return Ok;
@ -156,6 +162,10 @@ GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator* iterator,
count = iterator->pathdata.Count;
/* iterator created with NULL path */
if(count == 0)
return Ok;
if(iterator->subpath_pos == count){
*startIndex = *endIndex = *resultCount = 0;
*isClosed = 1;

View File

@ -37,7 +37,7 @@ static void test_constructor_destructor(void)
stat = GdipCreatePathIter(NULL, NULL);
expect(InvalidParameter, stat);
stat = GdipCreatePathIter(&iter, NULL);
expect(InvalidParameter, stat);
expect(Ok, stat);
stat = GdipCreatePathIter(NULL, path);
expect(InvalidParameter, stat);
stat = GdipDeletePathIter(NULL);