Module: wine Branch: master Commit: ded68e8a4f698369801570dca294e489727cc901 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ded68e8a4f698369801570dca2...
Author: Christian Costa titan.costa@wanadoo.fr Date: Tue Oct 7 22:52:55 2008 +0200
d3dxof: Enumerate only 2 levels of objects obtained from a reference.
---
dlls/d3dxof/d3dxof.c | 12 ++++++++++++ dlls/d3dxof/d3dxof_private.h | 2 ++ 2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c index 553dbf9..6d4d496 100644 --- a/dlls/d3dxof/d3dxof.c +++ b/dlls/d3dxof/d3dxof.c @@ -1409,6 +1409,12 @@ static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject(IDirectXFileData* iface if (This->cur_enum_object >= This->pobj->nb_childs) return DXFILEERR_NOMOREOBJECTS;
+ if (This->from_ref && (This->level >= 1)) + { + /* Only 2 levels can enumerated if the object is obtained from a reference */ + return DXFILEERR_NOMOREOBJECTS; + } + if (This->pobj->childs[This->cur_enum_object]->ptarget) { IDirectXFileDataReferenceImpl *object; @@ -1431,6 +1437,8 @@ static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject(IDirectXFileData* iface
object->pobj = This->pobj->childs[This->cur_enum_object++]; object->cur_enum_object = 0; + object->from_ref = This->from_ref; + object->level = This->level + 1;
*ppChildObj = (LPDIRECTXFILEOBJECT)object; } @@ -1590,6 +1598,8 @@ static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataRefe
object->pobj = This->ptarget; object->cur_enum_object = 0; + object->level = 0; + object->from_ref = TRUE;
*ppDataObj = (LPDIRECTXFILEDATA)object;
@@ -1981,6 +1991,8 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
object->pobj = This->buf.pxo; object->cur_enum_object = 0; + object->level = 0; + object->from_ref = FALSE;
*ppDataObj = (LPDIRECTXFILEDATA)object;
diff --git a/dlls/d3dxof/d3dxof_private.h b/dlls/d3dxof/d3dxof_private.h index 99bec1c..3a4735d 100644 --- a/dlls/d3dxof/d3dxof_private.h +++ b/dlls/d3dxof/d3dxof_private.h @@ -98,6 +98,8 @@ typedef struct { LONG ref; xobject* pobj; int cur_enum_object; + BOOL from_ref; + ULONG level; } IDirectXFileDataImpl;
typedef struct {