mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-16 06:54:37 +00:00
09c7a773a3
The xml::advance_to_next_sibling_element is redundant with the xmlNextElementSibling API of libxml. Similarly, xmlFirstElementChild is redundant with using xml::advance_to_next_sibling_element on the xmlNode::children data member. Let's use the libxml API instead. * include/abg-libxml-utils.h (advance_to_next_sibling_element): Remove the declaration of this function. * src/abg-libxml-utils.cc (go_to_next_sibling_element_or_stay) (advance_to_next_sibling_element): Remove definitions of these functions. * src/abg-reader.cc (read_translation_unit_from_input) (read_elf_needed_from_input, read_corpus_group_from_input): Use xmlNextElementSibling instead of xml::advance_to_next_sibling_element. (read_corpus_from_input): Likewise. Also, use xmlFirstElementChild instead of xml::advance_to_next_sibling_element on the xmlNode::children data member. (read_corpus_group_from_input): use xmlFirstElementChild instead of xml::advance_to_next_sibling_element on the xmlNode::children data member. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
129 lines
3.2 KiB
C++
129 lines
3.2 KiB
C++
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
// -*- mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013-2020 Red Hat, Inc.
|
|
|
|
/// @file
|
|
|
|
#ifndef __ABG_LIBXML_UTILS_H__
|
|
#define __ABG_LIBXML_UTILS_H__
|
|
|
|
#include <libxml/xmlreader.h>
|
|
|
|
#include <istream>
|
|
#include <memory>
|
|
|
|
#include "abg-sptr-utils.h"
|
|
|
|
namespace abigail
|
|
{
|
|
|
|
/// Internal namespace for xml manipulation utilities.
|
|
namespace xml
|
|
{
|
|
|
|
using sptr_utils::build_sptr;
|
|
using std::shared_ptr;
|
|
|
|
/// A convenience typedef for a shared pointer of xmlTextReader.
|
|
typedef shared_ptr<xmlTextReader> reader_sptr;
|
|
|
|
/// A convenience typedef for a shared pointer of xmlChar.
|
|
typedef shared_ptr<xmlChar> xml_char_sptr;
|
|
|
|
/// This functor is used to instantiate a shared_ptr for the
|
|
/// xmlTextReader.
|
|
struct textReaderDeleter
|
|
{
|
|
void
|
|
operator()(xmlTextReaderPtr reader)
|
|
{xmlFreeTextReader(reader);}
|
|
};
|
|
|
|
/// This functor is used to instantiate a shared_ptr for xmlChar
|
|
struct charDeleter
|
|
{
|
|
void
|
|
operator()(xmlChar* str)
|
|
{ xmlFree(str); }
|
|
};
|
|
|
|
reader_sptr new_reader_from_file(const std::string& path);
|
|
reader_sptr new_reader_from_buffer(const std::string& buffer);
|
|
reader_sptr new_reader_from_istream(std::istream*);
|
|
bool xml_char_sptr_to_string(xml_char_sptr, std::string&);
|
|
|
|
int get_xml_node_depth(xmlNodePtr);
|
|
|
|
/// Get the name of the current element node the reader is pointing
|
|
/// to. Note that this macro returns an instance of
|
|
/// shared_ptr<xmlChar> so that the caller doesn't have to worry about
|
|
/// managing memory itself. Also note that the reader is a
|
|
/// shared_ptr<xmlTextReader>
|
|
#define XML_READER_GET_NODE_NAME(reader) \
|
|
xml::build_sptr(xmlTextReaderName(reader.get()))
|
|
|
|
/// Get the type of the current node of the shared_ptr<xmlTextReader>
|
|
/// passed in argument.
|
|
#define XML_READER_GET_NODE_TYPE(reader) \
|
|
static_cast<xmlReaderTypes> (xmlTextReaderNodeType(reader.get()))
|
|
|
|
/// Get the value of attribute 'name' on the current node of 'reader'
|
|
/// which is an instance of shared_ptr<xmlTextReader>.
|
|
#define XML_READER_GET_ATTRIBUTE(reader, name) \
|
|
xml::build_sptr(xmlTextReaderGetAttribute(reader.get(), BAD_CAST(name)))
|
|
|
|
/// Get the value of attribute 'name' ont the instance of xmlNodePtr
|
|
/// denoted by 'node'.
|
|
#define XML_NODE_GET_ATTRIBUTE(node, name) \
|
|
xml::build_sptr(xmlGetProp(node, BAD_CAST(name)))
|
|
|
|
#define CHAR_STR(xml_char_str) \
|
|
reinterpret_cast<char*>(xml_char_str.get())
|
|
|
|
void
|
|
escape_xml_string(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
escape_xml_string(const std::string& str);
|
|
|
|
void
|
|
escape_xml_comment(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
escape_xml_comment(const std::string& str);
|
|
|
|
void
|
|
unescape_xml_string(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
unescape_xml_string(const std::string& str);
|
|
|
|
void
|
|
unescape_xml_comment(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
unescape_xml_comment(const std::string& str);
|
|
|
|
}//end namespace xml
|
|
|
|
namespace sptr_utils
|
|
{
|
|
/// Specialization of sptr_utils::build_sptr for xmlTextReader
|
|
template<>
|
|
xml::reader_sptr
|
|
build_sptr<xmlTextReader>(xmlTextReader *p);
|
|
|
|
/// Specialization of build_str for xmlChar.
|
|
template<>
|
|
xml::xml_char_sptr
|
|
build_sptr<xmlChar>(xmlChar *p);
|
|
}// end namespace sptr_utils
|
|
|
|
}//end namespace abigail
|
|
#endif //__ABG_LIBXML_UTILS_H__
|