gameux: Cleanup failure handling when processing main definition element, use better naming.

oldstable
Nikolay Sivov 2014-04-14 22:39:54 +04:00 committed by Alexandre Julliard
parent 52e4c5a802
commit d721eee1dd
1 changed files with 34 additions and 43 deletions

View File

@ -325,67 +325,58 @@ static HRESULT GAMEUX_ProcessGameDefinitionElement(
* GameData [O] structure where data loaded from
* XML element will be stored in
*/
static HRESULT GAMEUX_ParseGameDefinition(
IXMLDOMElement *gdElement,
struct GAMEUX_GAME_DATA *GameData)
static HRESULT GAMEUX_ParseGameDefinition(IXMLDOMElement *gamedef, struct GAMEUX_GAME_DATA *game_data)
{
static const WCHAR sGameId[] = {'g','a','m','e','I','D',0};
static const WCHAR gameidW[] = {'g','a','m','e','I','D',0};
IXMLDOMNodeList *props;
VARIANT var;
HRESULT hr;
BSTR attr;
HRESULT hr = S_OK;
BSTR bstrAttribute;
VARIANT variant;
IXMLDOMNodeList *childrenList;
IXMLDOMNode *nextNode;
IXMLDOMElement *nextElement;
TRACE("(%p, %p)\n", gamedef, game_data);
TRACE("(%p, %p)\n", gdElement, GameData);
attr = SysAllocString(gameidW);
if (!attr)
return E_OUTOFMEMORY;
bstrAttribute = SysAllocString(sGameId);
if(!bstrAttribute)
hr = E_OUTOFMEMORY;
hr = IXMLDOMElement_getAttribute(gamedef, attr, &var);
SysFreeString(attr);
hr = IXMLDOMElement_getAttribute(gdElement, bstrAttribute, &variant);
if(SUCCEEDED(hr))
if (SUCCEEDED(hr))
{
hr = ( GUIDFromStringW(V_BSTR(&variant), &GameData->guidApplicationId)==TRUE ? S_OK : E_FAIL);
SysFreeString(V_BSTR(&variant));
hr = CLSIDFromString(V_BSTR(&var), &game_data->guidApplicationId);
VariantClear(&var);
}
SysFreeString(bstrAttribute);
if (SUCCEEDED(hr))
hr = IXMLDOMElement_get_childNodes(gamedef, &props);
/* browse subnodes */
if(SUCCEEDED(hr))
hr = IXMLDOMElement_get_childNodes(gdElement, &childrenList);
if (FAILED(hr))
return hr;
if(SUCCEEDED(hr))
do
{
do
IXMLDOMNode *prop;
hr = IXMLDOMNodeList_nextNode(props, &prop);
if (hr == S_OK)
{
hr = IXMLDOMNodeList_nextNode(childrenList, &nextNode);
IXMLDOMElement *element;
if(hr == S_OK)
hr = IXMLDOMNode_QueryInterface(prop, &IID_IXMLDOMElement, (void**)&element);
if (hr == S_OK)
{
hr = IXMLDOMNode_QueryInterface(nextNode, &IID_IXMLDOMElement,
(LPVOID*)&nextElement);
if(SUCCEEDED(hr))
{
hr = GAMEUX_ProcessGameDefinitionElement(nextElement, GameData);
IXMLDOMElement_Release(nextElement);
}
IXMLDOMNode_Release(nextNode);
hr = GAMEUX_ProcessGameDefinitionElement(element, game_data);
IXMLDOMElement_Release(element);
}
IXMLDOMNode_Release(prop);
}
while(hr == S_OK);
hr = S_OK;
IXMLDOMNodeList_Release(childrenList);
}
while (hr == S_OK);
IXMLDOMNodeList_Release(props);
return hr;
return FAILED(hr) ? hr : S_OK;
}
struct parse_gdf_thread_param