r4062 - in trunk/varnish-cache: . lib/libvarnishcompat
phk at projects.linpro.no
phk at projects.linpro.no
Sat May 9 18:39:09 CEST 2009
Author: phk
Date: 2009-05-09 18:39:08 +0200 (Sat, 09 May 2009)
New Revision: 4062
Modified:
trunk/varnish-cache/configure.ac
trunk/varnish-cache/lib/libvarnishcompat/execinfo.c
Log:
Autocrap the dladdr() functions existence.
Modified: trunk/varnish-cache/configure.ac
===================================================================
--- trunk/varnish-cache/configure.ac 2009-05-09 16:19:12 UTC (rev 4061)
+++ trunk/varnish-cache/configure.ac 2009-05-09 16:39:08 UTC (rev 4062)
@@ -106,6 +106,7 @@
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([strerror])
AC_FUNC_STRERROR_R
+AC_CHECK_FUNCS([dladdr])
AC_CHECK_FUNCS([socket])
AC_CHECK_FUNCS([strptime])
AC_CHECK_FUNCS([fmtcheck])
Modified: trunk/varnish-cache/lib/libvarnishcompat/execinfo.c
===================================================================
--- trunk/varnish-cache/lib/libvarnishcompat/execinfo.c 2009-05-09 16:19:12 UTC (rev 4061)
+++ trunk/varnish-cache/lib/libvarnishcompat/execinfo.c 2009-05-09 16:39:08 UTC (rev 4062)
@@ -26,6 +26,8 @@
* $Id: execinfo.c,v 1.3 2004/07/19 05:21:09 sobomax Exp $
*/
+#include "config.h"
+
#include <sys/types.h>
#include <sys/uio.h>
#include <dlfcn.h>
@@ -72,15 +74,20 @@
backtrace_symbols(void *const *buffer, int size)
{
size_t clen, alen;
- int i, offset;
+ int i;
char **rval;
- Dl_info info;
clen = size * sizeof(char *);
rval = malloc(clen);
if (rval == NULL)
return NULL;
for (i = 0; i < size; i++) {
+
+#ifdef HAVE_DLADDR
+ {
+ Dl_info info;
+ int offset;
+
if (dladdr(buffer[i], &info) != 0) {
if (info.dli_sname == NULL)
info.dli_sname = "???";
@@ -102,15 +109,19 @@
return NULL;
snprintf((char *) rval + clen, alen, "%p <%s+%d> at %s",
buffer[i], info.dli_sname, offset, info.dli_fname);
- } else {
- alen = 2 + /* "0x" */
- (sizeof(void *) * 2) + /* "01234567" */
- 1; /* "\0" */
- rval = realloc_safe(rval, clen + alen);
- if (rval == NULL)
- return NULL;
- snprintf((char *) rval + clen, alen, "%p", buffer[i]);
- }
+ rval[i] = (char *) clen;
+ clen += alen;
+ continue;
+ }
+ }
+#endif
+ alen = 2 + /* "0x" */
+ (sizeof(void *) * 2) + /* "01234567" */
+ 1; /* "\0" */
+ rval = realloc_safe(rval, clen + alen);
+ if (rval == NULL)
+ return NULL;
+ snprintf((char *) rval + clen, alen, "%p", buffer[i]);
rval[i] = (char *) clen;
clen += alen;
}
More information about the varnish-commit
mailing list