diff options
author | Adrian Kummerländer | 2014-04-24 22:18:45 +0200 |
---|---|---|
committer | Adrian Kummerländer | 2014-04-24 22:18:45 +0200 |
commit | 78d3873061f1a974da4d0ccdcc1778c6a11139e8 (patch) | |
tree | 26592ea099449a8bd0617ee534990b32ff9bb25b /src/function | |
parent | ff92d0af44fa454d066f6ee3fe2becd97206b64e (diff) | |
download | InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.tar InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.tar.gz InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.tar.bz2 InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.tar.lz InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.tar.xz InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.tar.zst InputXSLT-78d3873061f1a974da4d0ccdcc1778c6a11139e8.zip |
Added XercesStringGuard scope-guard to manage XMLCh
* xercesc requires XMLCh* strings to be hand-allocated and released using the XMLString class
* XercesStringGuard works as a scope-guard for XMLCh* string lifetime and greatly simplifies xerces DOM construction
Diffstat (limited to 'src/function')
-rw-r--r-- | src/function/read_directory.cc | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/src/function/read_directory.cc b/src/function/read_directory.cc index 22653b6..245f311 100644 --- a/src/function/read_directory.cc +++ b/src/function/read_directory.cc @@ -6,6 +6,8 @@ #include <xercesc/dom/DOMText.hpp> #include <xercesc/util/XMLString.hpp> +#include "support/xerces_string_guard.h" + namespace InputXSLT { FunctionReadDirectory::FunctionReadDirectory(const FilesystemContext& context): @@ -34,31 +36,27 @@ xalan::XObjectPtr FunctionReadDirectory::execute( this->fs_context_.iterate( arguments[0]->str(), [&domDocument, &rootNode](const boost::filesystem::path& p) { - XMLCh* buffer = xercesc::XMLString::transcode("item"); - xercesc::DOMElement* const itemNode = domDocument->createElement(buffer); - xercesc::XMLString::release(&buffer); - - buffer = xercesc::XMLString::transcode("type"); + xercesc::DOMElement* const itemNode( + domDocument->createElement(*XercesStringGuard("item")) + ); if ( boost::filesystem::is_regular_file(p) ) { - XMLCh* valueBuffer = xercesc::XMLString::transcode("file"); - - itemNode->setAttribute(buffer, valueBuffer); - - xercesc::XMLString::release(&valueBuffer); + itemNode->setAttribute( + *XercesStringGuard("type"), + *XercesStringGuard("file") + ); } else if ( boost::filesystem::is_directory(p) ) { - XMLCh* valueBuffer = xercesc::XMLString::transcode("directory"); - - itemNode->setAttribute(buffer, valueBuffer); - - xercesc::XMLString::release(&valueBuffer); + itemNode->setAttribute( + *XercesStringGuard("type"), + *XercesStringGuard("directory") + ); } - xercesc::XMLString::release(&buffer); - - buffer = xercesc::XMLString::transcode(p.filename().string().data()); - xercesc::DOMText* const textNode = domDocument->createTextNode(buffer); - xercesc::XMLString::release(&buffer); + xercesc::DOMText* const textNode( + domDocument->createTextNode( + *XercesStringGuard(p.filename().string()) + ) + ); itemNode->appendChild(textNode); rootNode->appendChild(itemNode); |