--- execinfo.c.orig Sun Jul 18 22:21:09 2004 +++ execinfo.c Wed Feb 9 16:56:51 2005 @@ -78,7 +78,6 @@ 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 +91,14 @@ 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,11 +107,14 @@ 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] += (int) rval; return rval; }