Module: wine Branch: master Commit: a421adf0a0334da70e71471f9fa2956acf2938a7 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a421adf0a0334da70e71471f9f...
Author: Andrew Nguyen anguyen@codeweavers.com Date: Tue Feb 1 04:32:05 2011 -0600
dxdiagn: Convert the container linked list to a standard Wine list.
---
dlls/dxdiagn/container.c | 35 +++++++++++++---------------------- dlls/dxdiagn/dxdiag_private.h | 11 ++++++----- 2 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/dlls/dxdiagn/container.c b/dlls/dxdiagn/container.c index d3a3cc1..317d098 100644 --- a/dlls/dxdiagn/container.c +++ b/dlls/dxdiagn/container.c @@ -86,7 +86,7 @@ static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfChildContainers(PDXDIAGCON
static HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames(PDXDIAGCONTAINER iface, DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) { IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; - IDxDiagContainerImpl_SubContainer* p = NULL; + IDxDiagContainerImpl_SubContainer *p; DWORD i = 0;
TRACE("(%p, %u, %p, %u)\n", iface, dwIndex, pwszContainer, cchContainer); @@ -95,15 +95,14 @@ static HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames(PDXDIAGCONTAI return E_INVALIDARG; }
- p = This->subContainers; - while (NULL != p) { + LIST_FOR_EACH_ENTRY(p, &This->subContainers, IDxDiagContainerImpl_SubContainer, entry) + { if (dwIndex == i) { TRACE("Found container name %s, copying string\n", debugstr_w(p->contName)); lstrcpynW(pwszContainer, p->contName, cchContainer); return (cchContainer <= strlenW(p->contName)) ? DXDIAG_E_INSUFFICIENT_BUFFER : S_OK; } - p = p->next; ++i; }
@@ -114,16 +113,16 @@ static HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames(PDXDIAGCONTAI
static HRESULT IDxDiagContainerImpl_GetChildContainerInternal(PDXDIAGCONTAINER iface, LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) { IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; - IDxDiagContainerImpl_SubContainer* p = NULL; + IDxDiagContainerImpl_SubContainer *p;
- p = This->subContainers; - while (NULL != p) { + LIST_FOR_EACH_ENTRY(p, &This->subContainers, IDxDiagContainerImpl_SubContainer, entry) + { if (0 == lstrcmpW(p->contName, pwszContainer)) { *ppInstance = p->pCont; return S_OK; } - p = p->next; } + return E_INVALIDARG; }
@@ -273,8 +272,7 @@ HRESULT WINAPI IDxDiagContainerImpl_AddProp(PDXDIAGCONTAINER iface, LPCWSTR pwsz
HRESULT WINAPI IDxDiagContainerImpl_AddChildContainer(PDXDIAGCONTAINER iface, LPCWSTR pszContName, PDXDIAGCONTAINER pSubCont) { IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; - IDxDiagContainerImpl_SubContainer* p = NULL; - IDxDiagContainerImpl_SubContainer* pNew = NULL; + IDxDiagContainerImpl_SubContainer *pNew;
TRACE("(%p, %s, %p)\n", iface, debugstr_w(pszContName), pSubCont);
@@ -286,24 +284,16 @@ HRESULT WINAPI IDxDiagContainerImpl_AddChildContainer(PDXDIAGCONTAINER iface, LP if (NULL == pNew) { return E_OUTOFMEMORY; } - pNew->pCont = pSubCont; + pNew->contName = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(pszContName) + 1) * sizeof(WCHAR)); if (NULL == pNew->contName) { - HeapFree(GetProcessHeap(), 0, pNew) + HeapFree(GetProcessHeap(), 0, pNew); return E_OUTOFMEMORY; } lstrcpyW(pNew->contName, pszContName); - pNew->next = NULL; + pNew->pCont = pSubCont;
- p = This->subContainers; - if (NULL == p) { - This->subContainers = pNew; - } else { - while (NULL != p->next) { - p = p->next; - } - p->next = pNew; - } + list_add_tail(&This->subContainers, &pNew->entry); ++This->nSubContainers; return S_OK; } @@ -334,5 +324,6 @@ HRESULT DXDiag_CreateDXDiagContainer(REFIID riid, LPVOID *ppobj) { } container->lpVtbl = &DxDiagContainer_Vtbl; container->ref = 0; /* will be inited with QueryInterface */ + list_init(&container->subContainers); return IDxDiagContainerImpl_QueryInterface((PDXDIAGCONTAINER)container, riid, ppobj); } diff --git a/dlls/dxdiagn/dxdiag_private.h b/dlls/dxdiagn/dxdiag_private.h index 8a2ebad..5e6d2b8 100644 --- a/dlls/dxdiagn/dxdiag_private.h +++ b/dlls/dxdiagn/dxdiag_private.h @@ -27,6 +27,7 @@ #include "winbase.h" #include "wingdi.h"
+#include "wine/list.h" #include "dxdiag.h"
/* DXDiag Interfaces: */ @@ -55,9 +56,9 @@ struct IDxDiagProviderImpl { /* ---------------- */
typedef struct IDxDiagContainerImpl_SubContainer { - IDxDiagContainer* pCont; - WCHAR* contName; - struct IDxDiagContainerImpl_SubContainer* next; + struct list entry; + WCHAR *contName; + IDxDiagContainer *pCont; } IDxDiagContainerImpl_SubContainer;
typedef struct IDxDiagContainerImpl_Property { @@ -75,8 +76,8 @@ struct IDxDiagContainerImpl { const IDxDiagContainerVtbl *lpVtbl; LONG ref; /* IDxDiagContainer fields */ - IDxDiagContainerImpl_Property* properties; - IDxDiagContainerImpl_SubContainer* subContainers; + IDxDiagContainerImpl_Property* properties; + struct list subContainers; DWORD nProperties; DWORD nSubContainers; };