Andrew Nguyen : dxdiagn: Convert the container linked list to a standard Wine list.

Alexandre Julliard julliard at winehq.org
Tue Feb 1 12:24:58 CST 2011


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

Author: Andrew Nguyen <anguyen at 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;
 };




More information about the wine-cvs mailing list