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