ReactOS 0.4.16-dev-334-g4d9f67c
container.c File Reference
#include "dxdiag_private.h"
#include "wine/debug.h"
Include dependency graph for container.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dxdiag)
 
static IDxDiagContainerImplimpl_from_IDxDiagContainer (IDxDiagContainer *iface)
 
static HRESULT WINAPI IDxDiagContainerImpl_QueryInterface (IDxDiagContainer *iface, REFIID riid, void **ppobj)
 
static ULONG WINAPI IDxDiagContainerImpl_AddRef (IDxDiagContainer *iface)
 
static ULONG WINAPI IDxDiagContainerImpl_Release (IDxDiagContainer *iface)
 
static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfChildContainers (IDxDiagContainer *iface, DWORD *pdwCount)
 
static HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames (IDxDiagContainer *iface, DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer)
 
static HRESULT IDxDiagContainerImpl_GetChildContainerInternal (IDxDiagContainerImpl_Container *cont, LPCWSTR pwszContainer, IDxDiagContainerImpl_Container **subcont)
 
static HRESULT WINAPI IDxDiagContainerImpl_GetChildContainer (IDxDiagContainer *iface, LPCWSTR pwszContainer, IDxDiagContainer **ppInstance)
 
static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps (IDxDiagContainer *iface, DWORD *pdwCount)
 
static HRESULT WINAPI IDxDiagContainerImpl_EnumPropNames (IDxDiagContainer *iface, DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName)
 
static HRESULT WINAPI IDxDiagContainerImpl_GetProp (IDxDiagContainer *iface, LPCWSTR pwszPropName, VARIANT *pvarProp)
 
HRESULT DXDiag_CreateDXDiagContainer (REFIID riid, IDxDiagContainerImpl_Container *cont, IDxDiagProvider *pProv, LPVOID *ppobj)
 

Variables

static const IDxDiagContainerVtbl DxDiagContainer_Vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 23 of file container.c.

Function Documentation

◆ DXDiag_CreateDXDiagContainer()

HRESULT DXDiag_CreateDXDiagContainer ( REFIID  riid,
IDxDiagContainerImpl_Container cont,
IDxDiagProvider *  pProv,
LPVOID ppobj 
)

internal factory

Definition at line 267 of file container.c.

267 {
269
270 TRACE("(%s, %p)\n", debugstr_guid(riid), ppobj);
271
273 if (NULL == container) {
274 *ppobj = NULL;
275 return E_OUTOFMEMORY;
276 }
277 container->IDxDiagContainer_iface.lpVtbl = &DxDiagContainer_Vtbl;
278 container->ref = 0; /* will be inited with QueryInterface */
279 container->cont = cont;
280 container->pProv = pProv;
282 return IDxDiagContainerImpl_QueryInterface(&container->IDxDiagContainer_iface, riid, ppobj);
283}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
static HRESULT WINAPI IDxDiagContainerImpl_QueryInterface(IDxDiagContainer *iface, REFIID riid, void **ppobj)
Definition: container.c:35
static const IDxDiagContainerVtbl DxDiagContainer_Vtbl
Definition: container.c:253
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define IDxDiagProvider_AddRef(p)
Definition: dxdiag.h:60
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by IDxDiagContainerImpl_GetChildContainer(), and IDxDiagProviderImpl_GetRootContainer().

◆ IDxDiagContainerImpl_AddRef()

static ULONG WINAPI IDxDiagContainerImpl_AddRef ( IDxDiagContainer *  iface)
static

Definition at line 54 of file container.c.

55{
57 ULONG refCount = InterlockedIncrement(&This->ref);
58
59 TRACE("(%p)->(ref before=%u)\n", This, refCount - 1);
60
62
63 return refCount;
64}
#define InterlockedIncrement
Definition: armddk.h:53
static IDxDiagContainerImpl * impl_from_IDxDiagContainer(IDxDiagContainer *iface)
Definition: container.c:29
static void DXDIAGN_LockModule(void)
uint32_t ULONG
Definition: typedefs.h:59

◆ IDxDiagContainerImpl_EnumChildContainerNames()

static HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames ( IDxDiagContainer *  iface,
DWORD  dwIndex,
LPWSTR  pwszContainer,
DWORD  cchContainer 
)
static

Definition at line 97 of file container.c.

99{
102 DWORD i = 0;
103
104 TRACE("(%p, %u, %p, %u)\n", iface, dwIndex, pwszContainer, cchContainer);
105
106 if (NULL == pwszContainer || 0 == cchContainer) {
107 return E_INVALIDARG;
108 }
109
111 {
112 if (dwIndex == i) {
113 TRACE("Found container name %s, copying string\n", debugstr_w(p->contName));
114 lstrcpynW(pwszContainer, p->contName, cchContainer);
115 return (cchContainer <= lstrlenW(p->contName)) ?
117 }
118 ++i;
119 }
120
121 TRACE("Failed to find container name at specified index\n");
122 *pwszContainer = '\0';
123 return E_INVALIDARG;
124}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define lstrcpynW
Definition: compat.h:738
#define lstrlenW
Definition: compat.h:750
#define DXDIAG_E_INSUFFICIENT_BUFFER
Definition: dxdiag.h:57
unsigned long DWORD
Definition: ntddk_ex.h:95
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
uint32_t entry
Definition: isohybrid.c:63
#define debugstr_w
Definition: kernel32.h:32
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198

◆ IDxDiagContainerImpl_EnumPropNames()

static HRESULT WINAPI IDxDiagContainerImpl_EnumPropNames ( IDxDiagContainer *  iface,
DWORD  dwIndex,
LPWSTR  pwszPropName,
DWORD  cchPropName 
)
static

Definition at line 202 of file container.c.

204{
207 DWORD i = 0;
208
209 TRACE("(%p, %u, %p, %u)\n", iface, dwIndex, pwszPropName, cchPropName);
210
211 if (NULL == pwszPropName || 0 == cchPropName) {
212 return E_INVALIDARG;
213 }
214
216 {
217 if (dwIndex == i) {
218 TRACE("Found property name %s, copying string\n", debugstr_w(p->propName));
219 lstrcpynW(pwszPropName, p->propName, cchPropName);
220 return (cchPropName <= lstrlenW(p->propName)) ?
222 }
223 ++i;
224 }
225
226 TRACE("Failed to find property name at specified index\n");
227 return E_INVALIDARG;
228}

◆ IDxDiagContainerImpl_GetChildContainer()

static HRESULT WINAPI IDxDiagContainerImpl_GetChildContainer ( IDxDiagContainer *  iface,
LPCWSTR  pwszContainer,
IDxDiagContainer **  ppInstance 
)
static

Definition at line 140 of file container.c.

142{
144 IDxDiagContainerImpl_Container *pContainer = This->cont;
145 LPWSTR tmp, orig_tmp;
146 INT tmp_len;
147 WCHAR* cur;
149
150 TRACE("(%p, %s, %p)\n", iface, debugstr_w(pwszContainer), ppInstance);
151
152 if (NULL == ppInstance || NULL == pwszContainer) {
153 return E_INVALIDARG;
154 }
155
156 *ppInstance = NULL;
157
158 tmp_len = lstrlenW(pwszContainer) + 1;
159 orig_tmp = tmp = HeapAlloc(GetProcessHeap(), 0, tmp_len * sizeof(WCHAR));
160 if (NULL == tmp) return E_FAIL;
161 lstrcpynW(tmp, pwszContainer, tmp_len);
162
163 cur = wcschr(tmp, '.');
164 while (NULL != cur) {
165 *cur = '\0'; /* cut tmp string to '.' */
166 if (!*(cur + 1)) break; /* Account for a lone terminating period, as in "cont1.cont2.". */
167 TRACE("Trying to get parent container %s\n", debugstr_w(tmp));
168 hr = IDxDiagContainerImpl_GetChildContainerInternal(pContainer, tmp, &pContainer);
169 if (FAILED(hr))
170 goto out;
171 cur++; /* go after '.' (just replaced by \0) */
172 tmp = cur;
173 cur = wcschr(tmp, '.');
174 }
175
176 TRACE("Trying to get container %s\n", debugstr_w(tmp));
177 hr = IDxDiagContainerImpl_GetChildContainerInternal(pContainer, tmp, &pContainer);
178 if (SUCCEEDED(hr)) {
179 hr = DXDiag_CreateDXDiagContainer(&IID_IDxDiagContainer, pContainer, This->pProv, (void **)ppInstance);
180 if (SUCCEEDED(hr))
181 TRACE("Succeeded in getting the container instance\n");
182 }
183
184out:
185 HeapFree(GetProcessHeap(), 0, orig_tmp);
186 return hr;
187}
#define E_FAIL
Definition: ddrawi.h:102
HRESULT DXDiag_CreateDXDiagContainer(REFIID riid, IDxDiagContainerImpl_Container *cont, IDxDiagProvider *pProv, LPVOID *ppobj)
Definition: container.c:267
static HRESULT IDxDiagContainerImpl_GetChildContainerInternal(IDxDiagContainerImpl_Container *cont, LPCWSTR pwszContainer, IDxDiagContainerImpl_Container **subcont)
Definition: container.c:126
#define wcschr
Definition: compat.h:17
#define HeapFree(x, y, z)
Definition: compat.h:735
FxCollectionEntry * cur
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
static FILE * out
Definition: regtests2xml.c:44
HRESULT hr
Definition: shlfolder.c:183
int32_t INT
Definition: typedefs.h:58
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ IDxDiagContainerImpl_GetChildContainerInternal()

static HRESULT IDxDiagContainerImpl_GetChildContainerInternal ( IDxDiagContainerImpl_Container cont,
LPCWSTR  pwszContainer,
IDxDiagContainerImpl_Container **  subcont 
)
static

Definition at line 126 of file container.c.

126 {
128
130 {
131 if (0 == lstrcmpW(p->contName, pwszContainer)) {
132 *subcont = p;
133 return S_OK;
134 }
135 }
136
137 return E_INVALIDARG;
138}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4243

Referenced by IDxDiagContainerImpl_GetChildContainer().

◆ IDxDiagContainerImpl_GetNumberOfChildContainers()

static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfChildContainers ( IDxDiagContainer *  iface,
DWORD pdwCount 
)
static

Definition at line 84 of file container.c.

86{
88
89 TRACE("(%p)\n", iface);
90 if (NULL == pdwCount) {
91 return E_INVALIDARG;
92 }
93 *pdwCount = This->cont->nSubContainers;
94 return S_OK;
95}

◆ IDxDiagContainerImpl_GetNumberOfProps()

static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps ( IDxDiagContainer *  iface,
DWORD pdwCount 
)
static

Definition at line 189 of file container.c.

191{
193
194 TRACE("(%p)\n", iface);
195 if (NULL == pdwCount) {
196 return E_INVALIDARG;
197 }
198 *pdwCount = This->cont->nProperties;
199 return S_OK;
200}

◆ IDxDiagContainerImpl_GetProp()

static HRESULT WINAPI IDxDiagContainerImpl_GetProp ( IDxDiagContainer *  iface,
LPCWSTR  pwszPropName,
VARIANT pvarProp 
)
static

Definition at line 230 of file container.c.

232{
235
236 TRACE("(%p, %s, %p)\n", iface, debugstr_w(pwszPropName), pvarProp);
237
238 if (NULL == pvarProp || NULL == pwszPropName) {
239 return E_INVALIDARG;
240 }
241
243 {
244 if (0 == lstrcmpW(p->propName, pwszPropName)) {
245 VariantInit(pvarProp);
246 return VariantCopy(pvarProp, &p->vProp);
247 }
248 }
249
250 return E_INVALIDARG;
251}
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
Definition: variant.c:748

◆ IDxDiagContainerImpl_QueryInterface()

static HRESULT WINAPI IDxDiagContainerImpl_QueryInterface ( IDxDiagContainer *  iface,
REFIID  riid,
void **  ppobj 
)
static

Definition at line 35 of file container.c.

37{
39
40 if (!ppobj) return E_INVALIDARG;
41
43 || IsEqualGUID(riid, &IID_IDxDiagContainer)) {
44 IUnknown_AddRef(iface);
45 *ppobj = This;
46 return S_OK;
47 }
48
49 WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
50 *ppobj = NULL;
51 return E_NOINTERFACE;
52}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:2364

Referenced by DXDiag_CreateDXDiagContainer().

◆ IDxDiagContainerImpl_Release()

static ULONG WINAPI IDxDiagContainerImpl_Release ( IDxDiagContainer *  iface)
static

Definition at line 66 of file container.c.

67{
69 ULONG refCount = InterlockedDecrement(&This->ref);
70
71 TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
72
73 if (!refCount) {
76 }
77
79
80 return refCount;
81}
#define InterlockedDecrement
Definition: armddk.h:52
static void DXDIAGN_UnlockModule(void)
#define IDxDiagProvider_Release(p)
Definition: dxdiag.h:61

◆ impl_from_IDxDiagContainer()

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dxdiag  )

Variable Documentation

◆ DxDiagContainer_Vtbl

const IDxDiagContainerVtbl DxDiagContainer_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps(IDxDiagContainer *iface, DWORD *pdwCount)
Definition: container.c:189
static ULONG WINAPI IDxDiagContainerImpl_AddRef(IDxDiagContainer *iface)
Definition: container.c:54
static HRESULT WINAPI IDxDiagContainerImpl_GetChildContainer(IDxDiagContainer *iface, LPCWSTR pwszContainer, IDxDiagContainer **ppInstance)
Definition: container.c:140
static HRESULT WINAPI IDxDiagContainerImpl_GetProp(IDxDiagContainer *iface, LPCWSTR pwszPropName, VARIANT *pvarProp)
Definition: container.c:230
static ULONG WINAPI IDxDiagContainerImpl_Release(IDxDiagContainer *iface)
Definition: container.c:66
static HRESULT WINAPI IDxDiagContainerImpl_EnumChildContainerNames(IDxDiagContainer *iface, DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer)
Definition: container.c:97
static HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfChildContainers(IDxDiagContainer *iface, DWORD *pdwCount)
Definition: container.c:84
static HRESULT WINAPI IDxDiagContainerImpl_EnumPropNames(IDxDiagContainer *iface, DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName)
Definition: container.c:202

Definition at line 253 of file container.c.

Referenced by DXDiag_CreateDXDiagContainer().