summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2019-08-12 10:21:21 +0200
committerDavid Tardon <dtardon@redhat.com>2019-08-12 10:32:56 +0200
commitf3170bccf216d25fd730d2a59cebb87eff19ad3b (patch)
tree236e57ea98a561b9a683c47d47525b3d6b9f7add
parente27270abd5508c9bd7f4d2ea862ffb2ed9977985 (diff)
simplify creation of xmlTextReader
Change-Id: I135b4da84290816860e002c33a85b22a2f3dff47
-rw-r--r--src/lib/EtonyekDocument.cpp2
-rw-r--r--src/lib/IWORKParser.cpp2
-rw-r--r--src/lib/libetonyek_xml.cpp8
-rw-r--r--src/lib/libetonyek_xml.h9
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