Andrew Nguyen : dxdiagn: Convert the property linked list to a standard Wine list.
Alexandre Julliard
julliard at winehq.org
Tue Feb 1 12:24:59 CST 2011
Module: wine
Branch: master
Commit: 8c331e334075f42a6e8d0ecc5695b9ef700995fd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8c331e334075f42a6e8d0ecc5695b9ef700995fd
Author: Andrew Nguyen <anguyen at codeweavers.com>
Date: Tue Feb 1 04:32:15 2011 -0600
dxdiagn: Convert the property linked list to a standard Wine list.
---
dlls/dxdiagn/container.c | 54 +++++++++++++++++-----------------------
dlls/dxdiagn/dxdiag_private.h | 8 +++---
2 files changed, 27 insertions(+), 35 deletions(-)
diff --git a/dlls/dxdiagn/container.c b/dlls/dxdiagn/container.c
index 317d098..df7f5a9 100644
--- a/dlls/dxdiagn/container.c
+++ b/dlls/dxdiagn/container.c
@@ -184,7 +184,7 @@ static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps(PDXDIAGCONTAINER ifa
static HRESULT WINAPI IDxDiagContainerImpl_EnumPropNames(PDXDIAGCONTAINER iface, DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) {
IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface;
- IDxDiagContainerImpl_Property* p = NULL;
+ IDxDiagContainerImpl_Property *p;
DWORD i = 0;
TRACE("(%p, %u, %p, %u)\n", iface, dwIndex, pwszPropName, cchPropName);
@@ -193,24 +193,24 @@ static HRESULT WINAPI IDxDiagContainerImpl_EnumPropNames(PDXDIAGCONTAINER iface,
return E_INVALIDARG;
}
- p = This->properties;
- while (NULL != p) {
+ LIST_FOR_EACH_ENTRY(p, &This->properties, IDxDiagContainerImpl_Property, entry)
+ {
if (dwIndex == i) {
- TRACE("Found property name %s, copying string\n", debugstr_w(p->vName));
- lstrcpynW(pwszPropName, p->vName, cchPropName);
- return (cchPropName <= strlenW(p->vName)) ?
+ TRACE("Found property name %s, copying string\n", debugstr_w(p->propName));
+ lstrcpynW(pwszPropName, p->propName, cchPropName);
+ return (cchPropName <= strlenW(p->propName)) ?
DXDIAG_E_INSUFFICIENT_BUFFER : S_OK;
}
- p = p->next;
++i;
}
+
TRACE("Failed to find property name at specified index\n");
return E_INVALIDARG;
}
static HRESULT WINAPI IDxDiagContainerImpl_GetProp(PDXDIAGCONTAINER iface, LPCWSTR pwszPropName, VARIANT* pvarProp) {
IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface;
- IDxDiagContainerImpl_Property* p = NULL;
+ IDxDiagContainerImpl_Property *p;
TRACE("(%p, %s, %p)\n", iface, debugstr_w(pwszPropName), pvarProp);
@@ -218,24 +218,23 @@ static HRESULT WINAPI IDxDiagContainerImpl_GetProp(PDXDIAGCONTAINER iface, LPCWS
return E_INVALIDARG;
}
- p = This->properties;
- while (NULL != p) {
- if (0 == lstrcmpW(p->vName, pwszPropName)) {
+ LIST_FOR_EACH_ENTRY(p, &This->properties, IDxDiagContainerImpl_Property, entry)
+ {
+ if (0 == lstrcmpW(p->propName, pwszPropName)) {
HRESULT hr = VariantClear(pvarProp);
if (hr == DISP_E_ARRAYISLOCKED || hr == DISP_E_BADVARTYPE)
VariantInit(pvarProp);
- return VariantCopy(pvarProp, &p->v);
+ return VariantCopy(pvarProp, &p->vProp);
}
- p = p->next;
}
+
return E_INVALIDARG;
}
HRESULT WINAPI IDxDiagContainerImpl_AddProp(PDXDIAGCONTAINER iface, LPCWSTR pwszPropName, VARIANT* pVarProp) {
IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface;
- IDxDiagContainerImpl_Property* p = NULL;
- IDxDiagContainerImpl_Property* pNew = NULL;
+ IDxDiagContainerImpl_Property *pNew;
TRACE("(%p, %s, %p)\n", iface, debugstr_w(pwszPropName), pVarProp);
@@ -247,25 +246,17 @@ HRESULT WINAPI IDxDiagContainerImpl_AddProp(PDXDIAGCONTAINER iface, LPCWSTR pwsz
if (NULL == pNew) {
return E_OUTOFMEMORY;
}
- VariantInit(&pNew->v);
- VariantCopy(&pNew->v, pVarProp);
- pNew->vName = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(pwszPropName) + 1) * sizeof(WCHAR));
- if (NULL == pNew->vName) {
+
+ pNew->propName = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(pwszPropName) + 1) * sizeof(WCHAR));
+ if (NULL == pNew->propName) {
HeapFree(GetProcessHeap(), 0, pNew);
return E_OUTOFMEMORY;
}
- lstrcpyW(pNew->vName, pwszPropName);
- pNew->next = NULL;
-
- p = This->properties;
- if (NULL == p) {
- This->properties = pNew;
- } else {
- while (NULL != p->next) {
- p = p->next;
- }
- p->next = pNew;
- }
+ lstrcpyW(pNew->propName, pwszPropName);
+ VariantInit(&pNew->vProp);
+ VariantCopy(&pNew->vProp, pVarProp);
+
+ list_add_tail(&This->properties, &pNew->entry);
++This->nProperties;
return S_OK;
}
@@ -324,6 +315,7 @@ HRESULT DXDiag_CreateDXDiagContainer(REFIID riid, LPVOID *ppobj) {
}
container->lpVtbl = &DxDiagContainer_Vtbl;
container->ref = 0; /* will be inited with QueryInterface */
+ list_init(&container->properties);
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 5e6d2b8..58de882 100644
--- a/dlls/dxdiagn/dxdiag_private.h
+++ b/dlls/dxdiagn/dxdiag_private.h
@@ -62,9 +62,9 @@ typedef struct IDxDiagContainerImpl_SubContainer {
} IDxDiagContainerImpl_SubContainer;
typedef struct IDxDiagContainerImpl_Property {
- LPWSTR vName;
- VARIANT v;
- struct IDxDiagContainerImpl_Property* next;
+ struct list entry;
+ WCHAR *propName;
+ VARIANT vProp;
} IDxDiagContainerImpl_Property;
@@ -76,7 +76,7 @@ struct IDxDiagContainerImpl {
const IDxDiagContainerVtbl *lpVtbl;
LONG ref;
/* IDxDiagContainer fields */
- IDxDiagContainerImpl_Property* properties;
+ struct list properties;
struct list subContainers;
DWORD nProperties;
DWORD nSubContainers;
More information about the wine-cvs
mailing list