diff --git a/src/catools/tool_lib.c b/src/catools/tool_lib.c
index 380457756a2aef15925c768e05db9f9f25932f52..ddead11151eb67b1acb2b7f715222e4eeb31ee54 100644
--- a/src/catools/tool_lib.c
+++ b/src/catools/tool_lib.c
@@ -447,9 +447,11 @@ char *dbr2str (const void *value, unsigned type)
         dbr_char_t *s = (dbr_char_t*) dbr_value_ptr(pv->value, pv->dbrType); \
         size_t len = strlen((char*)s);                                  \
         unsigned long elems = reqElems && (reqElems < pv->nElems) ? reqElems : pv->nElems; \
+        int dlen;                                                       \
+        char *d;                                                        \
         if (len < elems) elems = len;                                   \
-        int dlen = epicsStrnEscapedFromRawSize((char*)s, elems);        \
-        char *d = calloc(dlen+1, sizeof(char));                         \
+        dlen = epicsStrnEscapedFromRawSize((char*)s, elems);            \
+        d = calloc(dlen+1, sizeof(char));                               \
         if(d) {                                                         \
             epicsStrnEscapedFromRaw(d, dlen+1, (char*)s, elems);        \
             printf("%c%s", fieldSeparator, d);                          \