From 0810817773fb81d7383d2fa8464244c8f79845fb Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 19 Mar 2017 16:16:18 -0700 Subject: [PATCH 2/2] execinfo: Fix compiler errors found with newer gcc/clang Signed-off-by: Khem Raj --- execinfo.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/execinfo.c b/execinfo.c index 906fb14..9448b60 100644 --- a/execinfo.c +++ b/execinfo.c @@ -69,7 +69,8 @@ backtrace(void **buffer, int size) char ** backtrace_symbols(void *const *buffer, int size) { - int i, clen, alen, offset; + size_t clen, alen; + int i, offset; char **rval; char *cp; Dl_info info; @@ -78,7 +79,6 @@ backtrace_symbols(void *const *buffer, int size) rval = malloc(clen); if (rval == NULL) return NULL; - (char **)cp = &(rval[size]); for (i = 0; i < size; i++) { if (dladdr(buffer[i], &info) != 0) { if (info.dli_sname == NULL) @@ -92,14 +92,14 @@ backtrace_symbols(void *const *buffer, int size) 2 + /* " <" */ strlen(info.dli_sname) + /* "function" */ 1 + /* "+" */ - D10(offset) + /* "offset */ + 10 + /* "offset */ 5 + /* "> at " */ strlen(info.dli_fname) + /* "filename" */ 1; /* "\0" */ rval = realloc_safe(rval, clen + alen); if (rval == NULL) return NULL; - snprintf(cp, alen, "%p <%s+%d> at %s", + snprintf((char *) rval + clen, alen, "%p <%s+%d> at %s", buffer[i], info.dli_sname, offset, info.dli_fname); } else { alen = 2 + /* "0x" */ @@ -108,12 +108,15 @@ backtrace_symbols(void *const *buffer, int size) rval = realloc_safe(rval, clen + alen); if (rval == NULL) return NULL; - snprintf(cp, alen, "%p", buffer[i]); + snprintf((char *) rval + clen, alen, "%p", buffer[i]); } - rval[i] = cp; - cp += alen; + rval[i] = (char *) clen; + clen += alen; } + for (i = 0; i < size; i++) + rval[i] += (long) rval; + return rval; } @@ -155,6 +158,6 @@ backtrace_symbols_fd(void *const *buffer, int size, int fd) return; snprintf(buf, len, "%p\n", buffer[i]); } - write(fd, buf, len - 1); + write(fd, buf, strlen(buf)); } } -- 2.12.0