From 47830a68aa617cd5b1700c04d677a7ec93674aa2 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Wed, 3 Jun 2009 22:51:42 +0000 Subject: [PATCH] Made ASN.1 memory dump also display printable characters. git-svn-id: https://origsvn.digium.com/svn/libpri/branches/1.4@848 2fbb986a-6c06-0410-b554-c9c1f0a7f128 --- asn1_primitive.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/asn1_primitive.c b/asn1_primitive.c index 8044b9a..40c8335 100644 --- a/asn1_primitive.c +++ b/asn1_primitive.c @@ -33,6 +33,7 @@ #include +#include #include "compat.h" #include "libpri.h" @@ -41,6 +42,26 @@ /* ------------------------------------------------------------------- */ +/*! + * \internal + * \brief Dump the memory contents indicated in printable characters. (Helper function.) + * + * \param ctrl D channel controller for any diagnostic messages. + * \param start Dump memory starting position. + * \param end Dump memory ending position. (Not included in dump.) + * + * \return Nothing + */ +static void asn1_dump_mem_helper(struct pri *ctrl, const unsigned char *start, + const unsigned char *end) +{ + pri_message(ctrl, " - \""); + for (; start < end; ++start) { + pri_message(ctrl, "%c", (isprint(*start)) ? *start : '~'); + } + pri_message(ctrl, "\"\n"); +} + /*! * \internal * \brief Dump the memory contents indicated. @@ -55,10 +76,12 @@ static void asn1_dump_mem(struct pri *ctrl, unsigned indent, const unsigned char *pos, unsigned length) { + const unsigned char *seg_start; const unsigned char *end; unsigned delimiter; unsigned count; + seg_start = pos; end = pos + length; if (pos < end) { delimiter = '<'; @@ -71,12 +94,14 @@ static void asn1_dump_mem(struct pri *ctrl, unsigned indent, const unsigned char if (end <= pos) { break; } - pri_message(ctrl, "\n"); + asn1_dump_mem_helper(ctrl, seg_start, pos); + seg_start = pos; } } else { pri_message(ctrl, "%*s<", indent, ""); } - pri_message(ctrl, ">\n"); + pri_message(ctrl, ">"); + asn1_dump_mem_helper(ctrl, seg_start, end); } /*!