[Libreoffice-commits] libvisio.git: src/lib

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Aug 12 08:08:04 UTC 2019


 src/lib/VDXParser.cpp     |    4 +---
 src/lib/VSDXMLHelper.cpp  |    4 +---
 src/lib/VSDXMetaData.cpp  |    4 +---
 src/lib/VSDXParser.cpp    |    4 +---
 src/lib/VSDXTheme.cpp     |    4 +---
 src/lib/VisioDocument.cpp |    4 +---
 src/lib/libvisio_xml.cpp  |   14 +++++++++++---
 src/lib/libvisio_xml.h    |   11 +++--------
 8 files changed, 20 insertions(+), 29 deletions(-)

New commits:
commit 8f0ce0bb48185458bcaa0efb8cc01da7386e208a
Author:     David Tardon <dtardon at redhat.com>
AuthorDate: Mon Aug 12 10:01:14 2019 +0200
Commit:     David Tardon <dtardon at redhat.com>
CommitDate: Mon Aug 12 10:01:14 2019 +0200

    simplify creation of xmlReader
    
    Change-Id: I95815a3f19c612a2926ea1d80f07abbaba1f5595

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index aecdf20..a5c204d 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -75,9 +75,7 @@ bool libvisio::VDXParser::processXmlDocument(librevenge::RVNGInputStream *input)
   if (!input)
     return false;
 
-  const std::shared_ptr<xmlTextReader> reader(
-    xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
-    xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input);
   if (!reader)
     return false;
   int ret = xmlTextReaderRead(reader.get());
diff --git a/src/lib/VSDXMLHelper.cpp b/src/lib/VSDXMLHelper.cpp
index aa6a595..24045b6 100644
--- a/src/lib/VSDXMLHelper.cpp
+++ b/src/lib/VSDXMLHelper.cpp
@@ -91,9 +91,7 @@ libvisio::VSDXRelationships::VSDXRelationships(librevenge::RVNGInputStream *inpu
 {
   if (input)
   {
-    const std::shared_ptr<xmlTextReader> reader(
-      xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
-      xmlFreeTextReader);
+    auto reader = xmlReaderForStream(input);
     if (reader)
     {
       bool inRelationships = false;
diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index 33a6679..b0e5e69 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -120,9 +120,7 @@ bool libvisio::VSDXMetaData::parse(librevenge::RVNGInputStream *input)
 
   XMLErrorWatcher watcher;
 
-  const std::shared_ptr<xmlTextReader> reader(
-    xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NONET, &watcher),
-    xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input, &watcher, false);
   if (!reader)
     return false;
 
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index a7f40db..1167ccb 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -304,9 +304,7 @@ void libvisio::VSDXParser::processXmlDocument(librevenge::RVNGInputStream *input
 
   XMLErrorWatcher watcher;
 
-  const std::shared_ptr<xmlTextReader> reader(
-    xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NONET, &watcher),
-    xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input, &watcher, false);
   if (!reader)
     return;
 
diff --git a/src/lib/VSDXTheme.cpp b/src/lib/VSDXTheme.cpp
index f2c5660..59044b5 100644
--- a/src/lib/VSDXTheme.cpp
+++ b/src/lib/VSDXTheme.cpp
@@ -83,9 +83,7 @@ bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream *input)
   if (!input)
     return false;
 
-  const shared_ptr<xmlTextReader> reader(
-    xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NONET),
-    xmlFreeTextReader);
+  auto reader = xmlReaderForStream(input, nullptr, false);
   if (!reader)
     return false;
 
diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index 5b76be1..7541fd7 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -163,9 +163,7 @@ catch (...)
 static bool isXmlVisioDocument(librevenge::RVNGInputStream *input) try
 {
   input->seek(0, librevenge::RVNG_SEEK_SET);
-  const std::shared_ptr<xmlTextReader> reader(
-    libvisio::xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NONET|XML_PARSE_RECOVER),
-    xmlFreeTextReader);
+  auto reader = libvisio::xmlReaderForStream(input);
   if (!reader)
     return false;
   int ret = xmlTextReaderRead(reader.get());
diff --git a/src/lib/libvisio_xml.cpp b/src/lib/libvisio_xml.cpp
index df0c5f9..d92e7c4 100644
--- a/src/lib/libvisio_xml.cpp
+++ b/src/lib/libvisio_xml.cpp
@@ -96,11 +96,19 @@ void XMLErrorWatcher::setError()
   m_error = true;
 }
 
-xmlTextReaderPtr xmlReaderForStream(librevenge::RVNGInputStream *input, const char *URL, const char *encoding, int options, XMLErrorWatcher *const watcher)
+std::unique_ptr<xmlTextReader, void (*)(xmlTextReaderPtr)>
+xmlReaderForStream(librevenge::RVNGInputStream *input, XMLErrorWatcher *const watcher, bool recover)
 {
-  xmlTextReaderPtr reader = xmlReaderForIO(vsdxInputReadFunc, vsdxInputCloseFunc, (void *)input, URL, encoding, options);
+  int options = XML_PARSE_NOBLANKS | XML_PARSE_NONET;
+  if (recover)
+    options |= XML_PARSE_RECOVER;
+  std::unique_ptr<xmlTextReader, void (*)(xmlTextReaderPtr)> reader
+  {
+    xmlReaderForIO(vsdxInputReadFunc, vsdxInputCloseFunc, (void *)input, nullptr, nullptr, options),
+    xmlFreeTextReader
+  };
   if (reader)
-    xmlTextReaderSetErrorHandler(reader, vsdxReaderErrorFunc, watcher);
+    xmlTextReaderSetErrorHandler(reader.get(), vsdxReaderErrorFunc, watcher);
   return reader;
 }
 
diff --git a/src/lib/libvisio_xml.h b/src/lib/libvisio_xml.h
index 2739742..c3625a9 100644
--- a/src/lib/libvisio_xml.h
+++ b/src/lib/libvisio_xml.h
@@ -37,14 +37,9 @@ private:
   bool m_error;
 };
 
-// create an xmlTextReader pointer from a librevenge::RVNGInputStream pointer
-// needs to be freed using xmlTextReaderFree function.
-
-xmlTextReaderPtr xmlReaderForStream(librevenge::RVNGInputStream *input,
-                                    const char *URL,
-                                    const char *encoding,
-                                    int options,
-                                    XMLErrorWatcher *watcher = nullptr);
+// create an xmlTextReader from a librevenge::RVNGInputStream
+std::unique_ptr<xmlTextReader, void (*)(xmlTextReaderPtr)>
+xmlReaderForStream(librevenge::RVNGInputStream *input, XMLErrorWatcher *watcher = nullptr, bool recover = true);
 
 Colour xmlStringToColour(const xmlChar *s);
 Colour xmlStringToColour(const std::shared_ptr<xmlChar> &s);


More information about the Libreoffice-commits mailing list