librpc/ndr: make use of ndr_dump_data() in ndr_print_array_uint8()
authorStefan Metzmacher <metze@samba.org>
Mon, 23 Sep 2013 05:39:43 +0000 (07:39 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 23 Sep 2013 22:11:07 +0000 (00:11 +0200)
It's much easier to look at hexdump -C style output than
a few thousand lines with 1 byte each.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Matthieu Patou <mat@matws.net>
librpc/ndr/ndr_basic.c

index e56021b606389af670c83a0dc468be2319e8121b..5c653c8e3be8dd0acfc94c90d764b90a6ad73079 100644 (file)
@@ -32,6 +32,8 @@
 #define NDR_SIVALS(ndr, ofs, v) do { if (NDR_BE(ndr))  { RSIVALS(ndr->data,ofs,v); } else SIVALS(ndr->data,ofs,v); } while (0)
 
 
+static void ndr_dump_data(struct ndr_print *ndr, const uint8_t *buf, int len);
+
 /*
   check for data leaks from the server by looking for non-zero pad bytes
   these could also indicate that real structure elements have been
@@ -1162,14 +1164,15 @@ _PUBLIC_ void ndr_print_array_uint8(struct ndr_print *ndr, const char *name,
                           const uint8_t *data, uint32_t count)
 {
        int i;
+#define _ONELINE_LIMIT 32
 
        if (data == NULL) {
                ndr->print(ndr, "%s: ARRAY(%d) : NULL", name, count);
                return;
        }
 
-       if (count <= 600 && (ndr->flags & LIBNDR_PRINT_ARRAY_HEX)) {
-               char s[1202];
+       if (count <= _ONELINE_LIMIT && (ndr->flags & LIBNDR_PRINT_ARRAY_HEX)) {
+               char s[(_ONELINE_LIMIT + 1) * 2];
                for (i=0;i<count;i++) {
                        snprintf(&s[i*2], 3, "%02x", data[i]);
                }
@@ -1179,6 +1182,11 @@ _PUBLIC_ void ndr_print_array_uint8(struct ndr_print *ndr, const char *name,
        }
 
        ndr->print(ndr, "%s: ARRAY(%d)", name, count);
+       if (count > _ONELINE_LIMIT && (ndr->flags & LIBNDR_PRINT_ARRAY_HEX)) {
+               ndr_dump_data(ndr, data, count);
+               return;
+       }
+
        ndr->depth++;
        for (i=0;i<count;i++) {
                char *idx=NULL;
@@ -1188,6 +1196,7 @@ _PUBLIC_ void ndr_print_array_uint8(struct ndr_print *ndr, const char *name,
                }
        }
        ndr->depth--;   
+#undef _ONELINE_LIMIT
 }
 
 static void ndr_print_asc(struct ndr_print *ndr, const uint8_t *buf, int len)