diff options
author | Ondřej Surý <ondrej@sury.org> | 2013-06-28 12:59:40 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2013-06-28 12:59:40 +0200 |
commit | 124965832295a277b9ca6ae9fac4f45a74a36b2a (patch) | |
tree | f299e2335863f74e0be0707f84b85211baaf2d03 /src/common/print.c | |
parent | 3d2d198c71a6b844b60fa9ef68801b66bba93361 (diff) | |
download | knot-upstream/1.3.0_rc3.tar.gz |
New upstream version 1.3.0~rc3upstream/1.3.0_rc3
Diffstat (limited to 'src/common/print.c')
-rw-r--r-- | src/common/print.c | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/src/common/print.c b/src/common/print.c index 9764568..4735e54 100644 --- a/src/common/print.c +++ b/src/common/print.c @@ -16,29 +16,54 @@ #include <config.h> #include <stdio.h> - +#include <ctype.h> #include "print.h" -void hex_printf(const char *data, int length, printf_t print_handler) +void array_printf(const uint8_t *data, const unsigned length, + printf_t print_handler, const char type) { - int ptr = 0; - for (; ptr < length; ptr++) { - print_handler("0x%02x ", (unsigned char)*(data + ptr)); + for (unsigned i = 0; i < length; i++) { + uint8_t ch = data[i]; + + switch (type) { + case 't': + if (isprint(ch) != 0) { + print_handler("%c ", ch); + } else { + print_handler(" "); + } + break; + case 'x': + print_handler("%02X ", ch); + break; + default: + print_handler("0x%02X ", ch); + } } print_handler("\n"); } -void hex_print(const char *data, int length) +void hex_print(const uint8_t *data, unsigned length) +{ + array_printf(data, length, &printf, 0); +} + +void short_hex_print(const uint8_t *data, unsigned length) { - hex_printf(data, length, &printf); + array_printf(data, length, &printf, 'x'); } -void bit_printf(const char *data, int length, printf_t print_handler) +void txt_print(const uint8_t *data, unsigned length) +{ + array_printf(data, length, &printf, 't'); +} + +void bit_printf(const uint8_t *data, unsigned length, printf_t print_handler) { unsigned char mask = 0x01; - int ptr = 0; + unsigned ptr; int bit = 0; - for (; ptr < length; ptr++) { + for (ptr = 0; ptr < length; ptr++) { for (bit = 7; bit >= 0; bit--) { if ((mask << bit) & (unsigned char)*(data + ptr)) { print_handler("1"); @@ -51,7 +76,14 @@ void bit_printf(const char *data, int length, printf_t print_handler) print_handler("\n"); } -void bit_print(const char *data, int length) +void bit_print(const uint8_t *data, unsigned length) { bit_printf(data, length, &printf); } + +float time_diff(struct timeval *begin, struct timeval *end) +{ + return (end->tv_sec - begin->tv_sec) * 1000 + + (end->tv_usec - begin->tv_usec) / 1000.0; + +} |