Demangle.cc
924 Bytes
/*
* Demangle.cc
*
* Created on: Nov 16, 2012
* Author: f.casimir
*/
#include "Demangle.hh"
namespace AMDA {
namespace Helpers {
// KeithB's solution is good, but has one serious flaw in that unless buf is static
// it'll get trashed from the stack before it is returned in res - and will point who-knows-where
// Here's that problem fixed, but the code is still non-re-entrant and not thread-safe.
// Anyone care to improve it?
#include <cxxabi.h>
const char* Demangle(const char* name)
{
static char buf[1024];
size_t size = sizeof(buf);
int status;
char* res = abi::__cxa_demangle (name,
buf,
&size,
&status);
buf[sizeof(buf) - 1] = 0; // I'd hope __cxa_demangle does this when the name is huge, but just in case.
return res;
}
} /* namespace Helpers */
} /* namespace AMDA */