mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-26 03:32:08 +00:00
7350cfd893
* include/abg-libxml-utils.h (new_reader_from_istream): Declare new public entry point. * src/abg-libxml-utils.cc (xml_istream_input_read) (xml_istream_input_close): New static functions. (new_reader_from_istream): Define new public input function. * include/abg-reader.h (read_translation_unit_from_istream): Declare new entry points. * src/abg-reader.cc (read_translation_unit_from_istream): Define new entry points. * tools/bilint.cc (options::{read_from_stdin, noout}): New members. (display_usage): Document --stdin and --noout. (parse_command_line): Adjust to consider that no option on the command line means reading from stdin, just like --stdin. Support the --noout option as well. (main): Support Read the abi instr from stdin; in that case, what was read is just serialized back to stdout, unless --noout was supplied. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
103 lines
3.1 KiB
C++
103 lines
3.1 KiB
C++
// -*- mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013 Red Hat, Inc.
|
|
//
|
|
// This file is part of the GNU Application Binary Interface Generic
|
|
// Analysis and Instrumentation Library (libabigail). This library is
|
|
// free software; you can redistribute it and/or modify it under the
|
|
// terms of the GNU Lesser General Public License as published by the
|
|
// Free Software Foundation; either version 3, or (at your option) any
|
|
// later version.
|
|
|
|
// This library is distributed in the hope that it will be useful, but
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Lesser Public License for more details.
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this program; see the file COPYING-LGPLV3. If
|
|
// not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/// @file
|
|
|
|
#include <tr1/memory>
|
|
#include <istream>
|
|
#include <libxml/xmlreader.h>
|
|
|
|
namespace abigail
|
|
{
|
|
/// Internal namespace for xml.
|
|
namespace xml
|
|
{
|
|
|
|
using std::tr1::shared_ptr;
|
|
|
|
/// This functor is used to instantiate a shared_ptr for the
|
|
/// xmlTextReader.
|
|
struct textReaderDeleter
|
|
{
|
|
void
|
|
operator()(xmlTextReaderPtr reader)
|
|
{ xmlFreeTextReader(reader); }
|
|
};
|
|
|
|
|
|
typedef shared_ptr<xmlTextReader> reader_sptr;
|
|
|
|
/// This functor is used to instantiate a shared_ptr for xmlChar
|
|
struct charDeleter
|
|
{
|
|
void
|
|
operator()(xmlChar* str)
|
|
{ xmlFree(str); }
|
|
};
|
|
|
|
typedef shared_ptr<xmlChar> xml_char_sptr;
|
|
|
|
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*);
|
|
xml_char_sptr build_xml_char_sptr(xmlChar*);
|
|
|
|
template<class T>
|
|
shared_ptr<T> build_sptr(T*);
|
|
|
|
/// Specialization of build_sptr for xmlTextReader
|
|
template<>
|
|
shared_ptr<xmlTextReader> build_sptr<xmlTextReader>(xmlTextReader *p);
|
|
|
|
/// Specialization of build_str for xmlChar.
|
|
template<>
|
|
shared_ptr<xmlChar> build_sptr<xmlChar>(xmlChar *p);
|
|
|
|
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())
|
|
|
|
}//end namespace xml
|
|
}//end namespace abigail
|