/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// EXTERNAL INCLUDES
#include <stdlib.h>
-#include <string>
#include <cstdio>
+#include <string>
-#ifndef EMSCRIPTEN // cxxabi not supported
-# include <execinfo.h>
-# include <cxxabi.h>
-#endif
+#define BACKTRACE_ENABLED
+#if defined(BACKTRACE_ENABLED)
+#if defined(__GLIBC__)
+#include <execinfo.h>
+#endif
+#include <cxxabi.h>
+#endif
#include <cstring>
// INTERNAL INCLUDES
namespace Dali
{
-
#if defined(BACKTRACE_ENABLED)
namespace
{
-const int MAX_NUM_STACK_FRAMES = 25;
+const int32_t MAX_NUM_STACK_FRAMES = 25;
}
std::string Demangle(const char* symbol)
if(openParen != NULL)
{
const char* startOfToken = openParen + 1;
- const char* plus = strchr(startOfToken, '+');
- const char* closeParen = strchr(startOfToken, ')');
- const char* endOfToken = NULL;
+ const char* plus = strchr(startOfToken, '+');
+ const char* closeParen = strchr(startOfToken, ')');
+ const char* endOfToken = NULL;
if(plus != NULL)
{
endOfToken = plus;
size_t tokenLength = endOfToken - startOfToken;
// Allocate space for symbol
- char *mangledSymbol = (char*)malloc(tokenLength+1u);
+ char* mangledSymbol = reinterpret_cast<char*>(malloc(tokenLength + 1u));
if(mangledSymbol != NULL)
{
strncpy(mangledSymbol, startOfToken, tokenLength);
mangledSymbol[tokenLength] = '\0';
- size_t size;
- int status;
- char* demangled=NULL;
- demangled = abi::__cxa_demangle( mangledSymbol, NULL, &size, &status );
- if( demangled != NULL )
+ size_t size;
+ int32_t status;
+ char* demangled = NULL;
+ demangled = abi::__cxa_demangle(mangledSymbol, NULL, &size, &status);
+ if(demangled != NULL)
{
result = demangled;
free(demangled); // demangle() allocates returned string, so free it
return result;
}
-DALI_EXPORT_API DaliException::DaliException( const char* location, const char* condition )
-: location( location ), condition( condition )
+DALI_CORE_API DaliException::DaliException(const char* location, const char* condition)
+: location(location),
+ condition(condition)
{
// Note, if a memory error has occured, then the backtrace won't work - backtrace_symbols relies on
// allocating memory.
#if defined(DEBUG_ENABLED)
fprintf(stderr, "Exception: \n%s\n thrown at %s\nSee dlog for backtrace\n", condition, location);
#else
- fprintf(stderr, "Exception: \n%s\n thrown\nSee dlog for backtrace\n", condition );
+ fprintf(stderr, "Exception: \n%s\n thrown\nSee dlog for backtrace\n", condition);
#endif
DALI_LOG_ERROR_NOFN("Backtrace:\n");
- void* frameArray[MAX_NUM_STACK_FRAMES];
- int nSize = backtrace(frameArray, MAX_NUM_STACK_FRAMES);
- char** symbols = backtrace_symbols(frameArray, nSize);
- for(int i=1; i< nSize; i++)
+ void* frameArray[MAX_NUM_STACK_FRAMES];
+ int32_t nSize = backtrace(frameArray, MAX_NUM_STACK_FRAMES);
+ char** symbols = backtrace_symbols(frameArray, nSize);
+ for(int32_t i = 1; i < nSize; i++)
{
std::string demangled_symbol = Demangle(symbols[i]);
- DALI_LOG_ERROR_NOFN("[%02d] %s\n", i, demangled_symbol.c_str() );
+ DALI_LOG_ERROR_NOFN("[%02d] %s\n", i, demangled_symbol.c_str());
}
free(symbols);
}
-
#else // BACKTRACE_ENABLED
-DALI_EXPORT_API DaliException::DaliException( const char* location, const char* condition )
-: location( location ), condition( condition )
+DALI_CORE_API DaliException::DaliException(const char* location, const char* condition)
+: location(location),
+ condition(condition)
{
#if defined(DEBUG_ENABLED)
- printf("Exception: \n%s\n thrown at %s\n", condition, location );
+ printf("Exception: \n%s\n thrown at %s\n", condition, location);
#else
- printf("Exception: \n%s\n thrown\n", condition );
+ printf("Exception: \n%s\n thrown\n", condition);
#endif
}
-
#endif // BACKTRACE_ENABLED
-DALI_EXPORT_API void DaliAssertMessage( const char* location, const char* condition )
+DALI_CORE_API void DaliAssertMessage(const char* location, const char* condition)
{
#if defined(DEBUG_ENABLED)
- DALI_LOG_ERROR_NOFN( "Assert (%s) failed in: %s\n", condition, location );
+ DALI_LOG_ERROR_NOFN("Assert (%s) failed in: %s\n", condition, location);
#else
- DALI_LOG_ERROR_NOFN( "Assert (%s) failed\n", condition );
+ DALI_LOG_ERROR_NOFN("Assert (%s) failed\n", condition);
#endif
}
-} // Dali
+} // namespace Dali