diff options
author | Michael Stahl <mst@openoffice.org> | 2011-01-19 20:27:28 +0100 |
---|---|---|
committer | Michael Stahl <mst@openoffice.org> | 2011-01-19 20:27:28 +0100 |
commit | 75b70f1477292cf3cff3905fbcf3a3c387c17c7e (patch) | |
tree | 693db77df90750e12a652991b7056dcbb11a9796 /unoxml/source | |
parent | 34da472b449abca15c64f3d9254ec93fd0622898 (diff) |
xmlfix3: unoxml: XPath cleanup
Diffstat (limited to 'unoxml/source')
-rw-r--r-- | unoxml/source/xpath/nodelist.hxx | 1 | ||||
-rw-r--r-- | unoxml/source/xpath/xpathapi.cxx | 18 | ||||
-rw-r--r-- | unoxml/source/xpath/xpathobject.cxx | 6 | ||||
-rw-r--r-- | unoxml/source/xpath/xpathobject.hxx | 2 |
4 files changed, 13 insertions, 14 deletions
diff --git a/unoxml/source/xpath/nodelist.hxx b/unoxml/source/xpath/nodelist.hxx index e191fc2a9857..fd6b428af27e 100644 --- a/unoxml/source/xpath/nodelist.hxx +++ b/unoxml/source/xpath/nodelist.hxx @@ -62,6 +62,7 @@ namespace XPath /// #i115995# keep document alive ::rtl::Reference< DOM::CDocument > const m_pDocument; ::osl::Mutex & m_rMutex; + /// retain the result set in case the CXPathObject is released boost::shared_ptr<xmlXPathObject> m_pXPathObj; xmlNodeSetPtr m_pNodeSet; diff --git a/unoxml/source/xpath/xpathapi.cxx b/unoxml/source/xpath/xpathapi.cxx index d7e1077b5e84..d2dc86570ab9 100644 --- a/unoxml/source/xpath/xpathapi.cxx +++ b/unoxml/source/xpath/xpathapi.cxx @@ -353,9 +353,6 @@ namespace XPath extensions = m_extensions; } - xmlXPathContextPtr xpathCtx; - xmlXPathObjectPtr xpathObj; - // get the node and document ::rtl::Reference<DOM::CDocument> const pCDoc( dynamic_cast<DOM::CDocument*>( DOM::CNode::GetImplementation( @@ -383,8 +380,9 @@ namespace XPath } /* Create xpath evaluation context */ - xpathCtx = xmlXPathNewContext(pDoc); - if (xpathCtx == NULL) throw XPathException(); + ::boost::shared_ptr<xmlXPathContext> const xpathCtx( + xmlXPathNewContext(pDoc), xmlXPathFreeContext); + if (xpathCtx == NULL) { throw XPathException(); } // set context node xpathCtx->node = pNode; @@ -393,18 +391,18 @@ namespace XPath xmlSetGenericErrorFunc(NULL, generic_error_func); // register namespaces and extension - lcl_registerNamespaces(xpathCtx, nsmap); - lcl_registerExtensions(xpathCtx, extensions); + lcl_registerNamespaces(xpathCtx.get(), nsmap); + lcl_registerExtensions(xpathCtx.get(), extensions); /* run the query */ OString o1 = OUStringToOString(expr, RTL_TEXTENCODING_UTF8); xmlChar *xStr = (xmlChar*)o1.getStr(); - if ((xpathObj = xmlXPathEval(xStr, xpathCtx)) == NULL) { + ::boost::shared_ptr<xmlXPathObject> const xpathObj( + xmlXPathEval(xStr, xpathCtx.get()), xmlXPathFreeObject); + if (0 == xpathObj) { // OSL_ENSURE(xpathCtx->lastError == NULL, xpathCtx->lastError->message); - xmlXPathFreeContext(xpathCtx); throw XPathException(); } - xmlXPathFreeContext(xpathCtx); Reference<XXPathObject> const xObj( new CXPathObject(pCDoc, pCDoc->GetMutex(), xpathObj)); return xObj; diff --git a/unoxml/source/xpath/xpathobject.cxx b/unoxml/source/xpath/xpathobject.cxx index ea63bb716736..48b680698e87 100644 --- a/unoxml/source/xpath/xpathobject.cxx +++ b/unoxml/source/xpath/xpathobject.cxx @@ -67,11 +67,11 @@ namespace XPath CXPathObject::CXPathObject( ::rtl::Reference<DOM::CDocument> const& pDocument, ::osl::Mutex & rMutex, - xmlXPathObjectPtr const xpathObj) + ::boost::shared_ptr<xmlXPathObject> const& pXPathObj) : m_pDocument(pDocument) , m_rMutex(rMutex) - , m_pXPathObj(xpathObj, xmlXPathFreeObject) - , m_XPathObjectType(lcl_GetType(xpathObj)) + , m_pXPathObj(pXPathObj) + , m_XPathObjectType(lcl_GetType(pXPathObj.get())) { } diff --git a/unoxml/source/xpath/xpathobject.hxx b/unoxml/source/xpath/xpathobject.hxx index 56a8d65996f5..f15aed9ded95 100644 --- a/unoxml/source/xpath/xpathobject.hxx +++ b/unoxml/source/xpath/xpathobject.hxx @@ -66,7 +66,7 @@ namespace XPath public: CXPathObject( ::rtl::Reference<DOM::CDocument> const& pDocument, ::osl::Mutex & rMutex, - xmlXPathObjectPtr const xpathObj); + ::boost::shared_ptr<xmlXPathObject> const& pXPathObj); /** get object type |