summaryrefslogtreecommitdiff
path: root/src/backtrace.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-05-29 13:35:54 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-05-29 13:35:54 +0100
commitbe9da616df3826eb7c9ba7448adcdc56a97d479b (patch)
treecf34cdb0c669f40a1fe28e4d949fb397fde1065a /src/backtrace.cc
parent3c86484c4ed284fa8f1feff380959f5b52b264c6 (diff)
Return a String in Backtrace::desc
Diffstat (limited to 'src/backtrace.cc')
-rw-r--r--src/backtrace.cc22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/backtrace.cc b/src/backtrace.cc
index 4f8aacf8..a4c65876 100644
--- a/src/backtrace.cc
+++ b/src/backtrace.cc
@@ -1,12 +1,12 @@
#include "backtrace.hh"
-#include <string.h>
-#include <stdlib.h>
+#include "string.hh"
#if defined(__linux__) || defined(__APPLE__)
# include <execinfo.h>
#elif defined(__CYGWIN__)
# include <windows.h>
+#include <stdio.h>
#endif
namespace Kakoune
@@ -21,31 +21,29 @@ Backtrace::Backtrace()
#endif
}
-char* Backtrace::desc() const
+String Backtrace::desc() const
{
#if defined(__linux__) || defined(__APPLE__)
char** symbols = backtrace_symbols(stackframes, num_frames);
- int size = 0;
+ ByteCount size = 0;
for (int i = 0; i < num_frames; ++i)
- size += strlen(symbols[i]) + 1;
+ size += StringView::strlen(symbols[i]) + 1;
- char* res = (char*)malloc(size+1);
- res[0] = 0;
+ String res; res.reserve(size);
for (int i = 0; i < num_frames; ++i)
{
- strcat(res, symbols[i]);
- strcat(res, "\n");
+ res += symbols[i];
+ res += "\n";
}
free(symbols);
return res;
#elif defined(__CYGWIN__)
- char* res = (char*)malloc(num_frames * 20);
- res[0] = 0;
+ String res; res.reserve(num_frames * 20);
for (int i = 0; i < num_frames; ++i)
{
char addr[20];
snprintf(addr, 20, "0x%p", stackframes[i]);
- strcat(res, addr);
+ res += addr;
}
return res;
#else