From: mental Date: Mon, 8 May 2006 23:32:44 +0000 (+0000) Subject: add missing files X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=2acb8cfac9fe3c5f11618acc5172a1cb4fe00e81;p=inkscape.git add missing files --- diff --git a/src/debug/demangle.cpp b/src/debug/demangle.cpp new file mode 100644 index 000000000..79d0275bf --- /dev/null +++ b/src/debug/demangle.cpp @@ -0,0 +1,80 @@ +/* + * Inkscape::Debug::demangle - demangle C++ symbol names + * + * Authors: + * MenTaLguY + * + * Copyright (C) 2006 MenTaLguY + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include +#include +#include +#include "debug/demangle.h" +#include "util/format.h" +#include "gc-alloc.h" + +namespace Inkscape { + +namespace Debug { + +namespace { + +char const *demangle_helper(char const *name) { + char buffer[1024]; + char const *result; + FILE *stream=popen(Util::format("c++filt %s", name), "r"); + if (fgets(buffer, sizeof(buffer), stream)) { + size_t len=strlen(buffer); + if ( buffer[len-1] == '\n' ) { + buffer[len-1] = '\000'; + } + result = strdup(buffer); + } else { + result = name; + } + pclose(stream); + return result; +} + +struct string_less_than { + bool operator()(char const *a, char const *b) { + return ( strcmp(a, b) < 0 ); + } +}; + +typedef std::map MangleCache; +MangleCache mangle_cache; + +} + +Util::ptr_shared demangle(char const *name) { + MangleCache::iterator found=mangle_cache.find(name); + + char const *result; + if ( found != mangle_cache.end() ) { + result = (*found).second; + } else { + result = demangle_helper(name); + mangle_cache[name] = result; + } + + return Util::share_unsafe(result); +} + +} + +} + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : diff --git a/src/debug/demangle.h b/src/debug/demangle.h new file mode 100644 index 000000000..8c0dd6b4e --- /dev/null +++ b/src/debug/demangle.h @@ -0,0 +1,37 @@ +/* + * Inkscape::Debug::demangle - demangle C++ symbol names + * + * Authors: + * MenTaLguY + * + * Copyright (C) 2006 MenTaLguY + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef SEEN_INKSCAPE_DEBUG_DEMANGLE_H +#define SEEN_INKSCAPE_DEBUG_DEMANGLE_H + +#include "util/share.h" + +namespace Inkscape { + +namespace Debug { + +Util::ptr_shared demangle(char const *name); + +} + +} + +#endif +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :