From f1bb53230744ece7f871d09f733255e5799fecd8 Mon Sep 17 00:00:00 2001 From: Till Straumann Date: Wed, 10 Sep 2014 12:04:36 -0700 Subject: [PATCH] - simplified some code - epicsStackTrace.c provides generic epicsStackTraceGetFeatures() testing the 'epicsBackTrace()' functionality. Call out to epicsFindAddrGetFeatures() to inquire about symbol lookup support. --- src/libCom/osi/epicsStackTrace.c | 61 ++++++++++++++--------------- src/libCom/osi/epicsStackTracePvt.h | 19 ++------- 2 files changed, 32 insertions(+), 48 deletions(-) diff --git a/src/libCom/osi/epicsStackTrace.c b/src/libCom/osi/epicsStackTrace.c index 5480d842a..3bb0cf953 100644 --- a/src/libCom/osi/epicsStackTrace.c +++ b/src/libCom/osi/epicsStackTrace.c @@ -7,7 +7,6 @@ * Author: Till Straumann , 2011, 2014 */ -#include #include #include "epicsStackTracePvt.h" @@ -41,44 +40,23 @@ static void stackTraceUnlock(void) } static int -dump(char **buf, int *buf_sz, int *good, const char *fmt, ...) -{ -va_list ap; -int rval, put; - va_start(ap, fmt); - if ( *buf ) { - put = rval = vsnprintf(*buf, *buf_sz, fmt, ap); - if ( put > *buf_sz ) - put = *buf_sz; - *buf += put; - *buf_sz -= put; - } else { - rval = errlogVprintf(fmt, ap); - } - va_end(ap); - if ( rval > 0 ) - *good += rval; - return rval; -} - -static int -symDump(char *buf, int buf_sz, void *addr, epicsSymbol *sym_p) +dumpInfo(void *addr, epicsSymbol *sym_p) { int rval = 0; - dump( &buf, &buf_sz, &rval, "[%*p]", sizeof(addr)*2 + 2, addr); + rval += errlogPrintf("[%*p]", (int)(sizeof(addr)*2 + 2), addr); if ( sym_p ) { if ( sym_p->f_nam ) { - dump( &buf, &buf_sz, &rval, ": %s", sym_p->f_nam ); + rval += errlogPrintf(": %s", sym_p->f_nam); } if ( sym_p->s_nam ) { - /* windows didn't grok the void* pointer arithmetic */ - dump( &buf, &buf_sz, &rval, "(%s+0x%lx)", sym_p->s_nam, (unsigned long)((char*)addr - (char*)sym_p->s_val)); + rval += errlogPrintf("(%s+0x%lx)", sym_p->s_nam, (unsigned long)((char*)addr - (char*)sym_p->s_val)); + } else { + rval += errlogPrintf("()"); } } - dump( &buf, &buf_sz, &rval, "\n"); - if ( ! buf ) - errlogFlush(); + rval += errlogPrintf("\n"); + errlogFlush(); return rval; } @@ -112,9 +90,9 @@ epicsSymbol sym; for ( i=0; i