From 3828c76c76e4e9ce7bdb33bc4871f5cf571cc18b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 9 Aug 2010 16:37:52 +1000 Subject: ndr: allow ndr_print to print DATA_BLOB this prints DATA_BLOB structures using the ndr->print() calls Signed-off-by: Andrew Bartlett --- librpc/ndr/ndr_basic.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) (limited to 'librpc/ndr/ndr_basic.c') diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index d0d58b0884..0becf38f7b 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -1021,11 +1021,58 @@ _PUBLIC_ void ndr_print_array_uint8(struct ndr_print *ndr, const char *name, ndr->depth--; } +static void ndr_print_asc(struct ndr_print *ndr, const uint8_t *buf, int len) +{ + int i; + for (i=0;iprint(ndr, "%c", isprint(buf[i])?buf[i]:'.'); +} + +/* + ndr_print version of dump_data() + */ +static void ndr_dump_data(struct ndr_print *ndr, const uint8_t *buf, int len) +{ + int i=0; + + ndr->no_newline = true; + + for (i=0;iprint(ndr, "[%04X] ",i); + } + + ndr->print(ndr, "%02X ",(int)buf[i]); + i++; + if (i%8 == 0) ndr->print(ndr," "); + if (i%16 == 0) { + ndr_print_asc(ndr,&buf[i-16],8); ndr->print(ndr," "); + ndr_print_asc(ndr,&buf[i-8],8); ndr->print(ndr, "\n"); + } + } + + if (i%16) { + int n; + n = 16 - (i%16); + ndr->print(ndr, " "); + if (n>8) ndr->print(ndr," "); + while (n--) ndr->print(ndr," "); + n = MIN(8,i%16); + ndr_print_asc(ndr,&buf[i-(i%16)],n); ndr->print(ndr, " "); + n = (i%16) - n; + if (n>0) ndr_print_asc(ndr,&buf[i-n],n); + ndr->print(ndr,"\n"); + } + + ndr->no_newline = false; +} + + _PUBLIC_ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_BLOB r) { ndr->print(ndr, "%-25s: DATA_BLOB length=%u", name, (unsigned)r.length); if (r.length) { - dump_data(10, r.data, r.length); + ndr_dump_data(ndr, r.data, r.length); } } -- cgit