From d721eee1ddbd4fc56947573b83c8642d73688e85 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 14 Apr 2014 22:39:54 +0400 Subject: [PATCH] gameux: Cleanup failure handling when processing main definition element, use better naming. --- dlls/gameux/gameexplorer.c | 77 +++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 43 deletions(-) diff --git a/dlls/gameux/gameexplorer.c b/dlls/gameux/gameexplorer.c index cbe3e8d8c37..1690bd7339a 100644 --- a/dlls/gameux/gameexplorer.c +++ b/dlls/gameux/gameexplorer.c @@ -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