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 <dtar...@redhat.com> AuthorDate: Mon Aug 12 10:01:14 2019 +0200 Commit: David Tardon <dtar...@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); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits