diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-05-29 13:35:54 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-05-29 13:35:54 +0100 |
| commit | be9da616df3826eb7c9ba7448adcdc56a97d479b (patch) | |
| tree | cf34cdb0c669f40a1fe28e4d949fb397fde1065a /src/backtrace.cc | |
| parent | 3c86484c4ed284fa8f1feff380959f5b52b264c6 (diff) | |
Return a String in Backtrace::desc
Diffstat (limited to 'src/backtrace.cc')
| -rw-r--r-- | src/backtrace.cc | 22 |
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 |
