From 93a05de95b0e82af83bfc3e0518d8f57b228ed62 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Tue, 17 Jul 2007 17:26:09 +0000 Subject: [PATCH] Added silc_hexdump. --- CHANGES.RUNTIME | 4 +++ lib/silcutil/silclog.c | 59 +------------------------------------ lib/silcutil/silcutil.c | 65 +++++++++++++++++++++++++++++++++++++++++ lib/silcutil/silcutil.h | 16 ++++++++++ 4 files changed, 86 insertions(+), 58 deletions(-) diff --git a/CHANGES.RUNTIME b/CHANGES.RUNTIME index 39b65e5e..f43bd6ee 100644 --- a/CHANGES.RUNTIME +++ b/CHANGES.RUNTIME @@ -1,3 +1,7 @@ +Tue Jul 17 20:10:41 EEST 2007 Pekka Riikonen + + * Added silc_hexdump to lib/silcutil/silcutil.[ch]. + Fri Jul 13 23:01:45 EEST 2007 Pekka Riikonen * Added SILC_GET32_X_MSB macro to lib/silcutil/silctypes.h. diff --git a/lib/silcutil/silclog.c b/lib/silcutil/silclog.c index 824efb70..56f5532c 100644 --- a/lib/silcutil/silclog.c +++ b/lib/silcutil/silclog.c @@ -529,10 +529,6 @@ void silc_log_output_hexdump(char *file, const char *function, int line, void *data_in, SilcUInt32 len, char *string) { - int i, k; - int off, pos, count; - unsigned char *data = (unsigned char *)data_in; - #ifndef SILC_SYMBIAN if (!silclog.debug_hexdump) goto end; @@ -550,60 +546,7 @@ void silc_log_output_hexdump(char *file, const char *function, fprintf(stderr, "%s:%d: %s\n", function, line, string); - k = 0; - pos = 0; - count = 16; - off = len % 16; - while (1) { - if (off) { - if ((len - pos) < 16 && (len - pos <= len - off)) - count = off; - } else { - if (pos == len) - count = 0; - } - if (off == len) - count = len; - - if (count) - fprintf(stderr, "%08X ", k++ * 16); - - for (i = 0; i < count; i++) { - fprintf(stderr, "%02X ", data[pos + i]); - - if ((i + 1) % 4 == 0) - fprintf(stderr, " "); - } - - if (count && count < 16) { - int j; - - for (j = 0; j < 16 - count; j++) { - fprintf(stderr, " "); - - if ((j + count + 1) % 4 == 0) - fprintf(stderr, " "); - } - } - - for (i = 0; i < count; i++) { - char ch; - - if (data[pos] < 32 || data[pos] >= 127) - ch = '.'; - else - ch = data[pos]; - - fprintf(stderr, "%c", ch); - pos++; - } - - if (count) - fprintf(stderr, "\n"); - - if (count < 16) - break; - } + silc_hexdump(data_in, len, stderr); end: silc_free(string); diff --git a/lib/silcutil/silcutil.c b/lib/silcutil/silcutil.c index 12315f7f..5cd09db0 100644 --- a/lib/silcutil/silcutil.c +++ b/lib/silcutil/silcutil.c @@ -565,3 +565,68 @@ char *silc_get_input(const char *prompt, SilcBool echo_off) return NULL; #endif /* SILC_UNIX */ } + +/* Hexdump */ + +void silc_hexdump(const unsigned char *data, SilcUInt32 data_len, + FILE *output) +{ + int i, k; + int off, pos, count; + int len = data_len; + + k = 0; + pos = 0; + count = 16; + off = len % 16; + while (1) { + if (off) { + if ((len - pos) < 16 && (len - pos <= len - off)) + count = off; + } else { + if (pos == len) + count = 0; + } + if (off == len) + count = len; + + if (count) + fprintf(output, "%08X ", k++ * 16); + + for (i = 0; i < count; i++) { + fprintf(output, "%02X ", data[pos + i]); + + if ((i + 1) % 4 == 0) + fprintf(output, " "); + } + + if (count && count < 16) { + int j; + + for (j = 0; j < 16 - count; j++) { + fprintf(output, " "); + + if ((j + count + 1) % 4 == 0) + fprintf(output, " "); + } + } + + for (i = 0; i < count; i++) { + char ch; + + if (data[pos] < 32 || data[pos] >= 127) + ch = '.'; + else + ch = data[pos]; + + fprintf(output, "%c", ch); + pos++; + } + + if (count) + fprintf(output, "\n"); + + if (count < 16) + break; + } +} diff --git a/lib/silcutil/silcutil.h b/lib/silcutil/silcutil.h index f645569f..c6b0d43f 100644 --- a/lib/silcutil/silcutil.h +++ b/lib/silcutil/silcutil.h @@ -433,4 +433,20 @@ char *silc_get_real_name(); #define silc_va_copy(dest, src) dest = src; #endif +/****f* silcutil/SilcUtilAPI/silc_hexdump + * + * SYNOPSIS + * + * void silc_hexdump(const unsigned char *data, SilcUInt32 data_len, + * FILE *output); + * + * DESCRIPTION + * + * Dumps the `data' of length of `data_len' bytes as HEX. The `output' + * file specifies the destination. + * + ***/ +void silc_hexdump(const unsigned char *data, SilcUInt32 data_len, + FILE *output); + #endif /* !SILCUTIL_H */ -- 2.24.0