| From 0810817773fb81d7383d2fa8464244c8f79845fb Mon Sep 17 00:00:00 2001 |
| From: Khem Raj <raj.khem@gmail.com> |
| 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 <raj.khem@gmail.com> |
| --- |
| 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 |
| |