From c9729d61215382eee43340ad937c2239ac3e8e6f Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 13 Dec 2005 06:18:16 +0000 Subject: [PATCH] hcidump: Decode and display binary strings correctly --- tools/parser/sdp.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c index 3f0d12021..73b62caaf 100644 --- a/tools/parser/sdp.c +++ b/tools/parser/sdp.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -359,16 +360,24 @@ static inline void print_uuid(int n, struct frame *frm, uint16_t *psm, uint8_t * static inline void print_string(int n, struct frame *frm, const char *name) { - char *s; + int i, hex = 0; + + for (i = 0; i < n; i++) + if (!isprint(((char *) frm->ptr)[i])) { + hex = 1; + break; + } printf(" %s", name); - if ((s = malloc(n + 1))) { - strncpy(s, frm->ptr, n); - s[n] = '\0'; - printf(" \"%s\"", s); - free(s); - } else - perror("Can't allocate string buffer"); + if (hex) { + for (i = 0; i < n; i++) + printf(" %02x", ((unsigned char *) frm->ptr)[i]); + } else { + printf(" \""); + for (i = 0; i < n; i++) + printf("%c", ((char *) frm->ptr)[i]); + printf("\""); + } frm->ptr += n; frm->len -= n; -- 2.47.3