diff options
author | David Tardon <dtardon@redhat.com> | 2019-08-12 10:21:21 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2019-08-12 10:32:56 +0200 |
commit | f3170bccf216d25fd730d2a59cebb87eff19ad3b (patch) | |
tree | 236e57ea98a561b9a683c47d47525b3d6b9f7add | |
parent | e27270abd5508c9bd7f4d2ea862ffb2ed9977985 (diff) |
simplify creation of xmlTextReader
Change-Id: I135b4da84290816860e002c33a85b22a2f3dff47
-rw-r--r-- | src/lib/EtonyekDocument.cpp | 2 | ||||
-rw-r--r-- | src/lib/IWORKParser.cpp | 2 | ||||
-rw-r--r-- | src/lib/libetonyek_xml.cpp | 8 | ||||
-rw-r--r-- | src/lib/libetonyek_xml.h | 9 |
4 files changed, 15 insertions, 6 deletions
diff --git a/src/lib/EtonyekDocument.cpp b/src/lib/EtonyekDocument.cpp index 5377b6a..6b61611 100644 --- a/src/lib/EtonyekDocument.cpp +++ b/src/lib/EtonyekDocument.cpp @@ -115,7 +115,7 @@ void handleError(void * /*arg*/, const char * /*msg*/, xmlParserSeverities /*sev bool probeXML(DetectionInfo &info) { - const shared_ptr<xmlTextReader> reader(xmlReaderForIO(readFromStream, closeStream, info.m_input.get(), "", nullptr, 0), xmlFreeTextReader); + const auto reader = xmlReaderForStream(info.m_input); if (!reader) return false; diff --git a/src/lib/IWORKParser.cpp b/src/lib/IWORKParser.cpp index fd83d36..024d3c1 100644 --- a/src/lib/IWORKParser.cpp +++ b/src/lib/IWORKParser.cpp @@ -51,7 +51,7 @@ IWORKParser::~IWORKParser() bool IWORKParser::parse() { - const shared_ptr<xmlTextReader> sharedReader(xmlReaderForIO(readFromStream, closeStream, m_input.get(), "", nullptr, 0), xmlFreeTextReader); + auto sharedReader = xmlReaderForStream(m_input); if (!sharedReader) return false; diff --git a/src/lib/libetonyek_xml.cpp b/src/lib/libetonyek_xml.cpp index 72b1062..46abde4 100644 --- a/src/lib/libetonyek_xml.cpp +++ b/src/lib/libetonyek_xml.cpp @@ -53,6 +53,14 @@ extern "C" int closeStream(void * /* context */) namespace libetonyek { +std::unique_ptr<xmlTextReader, void (*)(xmlTextReaderPtr)> xmlReaderForStream(const RVNGInputStreamPtr_t &input) +{ + return std::unique_ptr<xmlTextReader, void (*)(xmlTextReaderPtr)>( + xmlReaderForIO(readFromStream, closeStream, input.get(), "", nullptr, 0), + xmlFreeTextReader + ); +} + bool bool_cast(const char *value) { return get(try_bool_cast(value)); diff --git a/src/lib/libetonyek_xml.h b/src/lib/libetonyek_xml.h index b2637c2..21c1807 100644 --- a/src/lib/libetonyek_xml.h +++ b/src/lib/libetonyek_xml.h @@ -10,19 +10,20 @@ #ifndef LIBETONYEK_XML_H_INCLUDED #define LIBETONYEK_XML_H_INCLUDED +#include <memory> #include <string> #include <boost/optional.hpp> -#include "libetonyek_utils.h" - -extern "C" int readFromStream(void *context, char *buffer, int len); +#include <libxml/xmlreader.h> -extern "C" int closeStream(void * /* context */); +#include "libetonyek_utils.h" namespace libetonyek { +std::unique_ptr<xmlTextReader, void (*)(xmlTextReaderPtr)> xmlReaderForStream(const RVNGInputStreamPtr_t &input); + /** Convert string value to bool. * * @arg value the string |