[Spice-devel] [PATCH libcacard 08/45] hex_dump: Helper function to allow inspection of internal buffers
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Jul 31 21:58:14 UTC 2018
Hi
On Tue, Jul 31, 2018 at 11:53 PM, Marc-André Lureau
<marcandre.lureau at gmail.com> wrote:
> Hi
>
> On Tue, Jul 31, 2018 at 4:50 PM, Jakub Jelen <jjelen at redhat.com> wrote:
>> Signed-off-by: Jakub Jelen <jjelen at redhat.com>
>> Reviewed-by: Robert Relyea <rrelyea at redhat.com>
>
> This isn't used in your tree, let's not add dead code.
My bad, the function is called hex_dump(), that confused me (usually
it's hexdump, like the command)
>
> fwiw, there are more elegant implementations we could adopt if needed,
> like _g_dbus_hexdump() in glib.
let's use your implementation for now
>
>> ---
>> src/common.c | 40 ++++++++++++++++++++++++++++++++++++++++
>> src/common.h | 2 ++
>> 2 files changed, 42 insertions(+)
>>
>> diff --git a/src/common.c b/src/common.c
>> index 521ef51..2e06314 100644
>> --- a/src/common.c
>> +++ b/src/common.c
>> @@ -26,7 +26,9 @@
>> #endif
>>
>> #include <stddef.h>
>> +#include <stdio.h>
>>
>> +#include "vcard.h"
>> #include "common.h"
>>
>> unsigned char *
>> @@ -46,4 +48,42 @@ lebytes2ushort(const unsigned char *buf)
>> return 0U;
>> return (unsigned short)buf[1] << 8 | (unsigned short)buf[0];
>> }
>> +
>> +#define MAX_STATIC_BYTES 1024
>> +static char hexdump_buffer[5*MAX_STATIC_BYTES];
>> +/*
>> + * Creates printable representation in hexadecimal format of the data
>> + * provided in the buf buffer. If out buffer is provided, the data
>> + * will be written into it. Otherwise, static buffer will be used, which
>> + * can hold up to 1024 bytes (longer will get truncated).
>> + */
>> +char *
>> +hex_dump(unsigned char *buf, size_t buflen, unsigned char **out, size_t outlen)
>> +{
>> + char *p, *start;
>> + size_t i, expect_len = buflen*5;
>> +
>> + if (buflen <= 0)
>> + return NULL;
>> +
>> + if (out == NULL) {
>> + start = hexdump_buffer;
>> + buflen = MIN(buflen, MAX_STATIC_BYTES);
>> + } else {
>> + if (outlen < expect_len) {
>> + /* too short output buffer */
>> + return NULL;
>> + }
>> + start = (char *) *out;
>> + }
>> +
>> + p = start;
>> + for (i = 0; i < buflen; i++) {
>> + sprintf(p, "0x%02X ", buf[i]);
>> + p += 5;
>> + }
>> + /* terminate */
>> + *--p = '\x00';
>> + return start;
>> +}
>> /* vim: set ts=4 sw=4 tw=0 noet expandtab: */
>> diff --git a/src/common.h b/src/common.h
>> index 83c8f33..e9fae67 100644
>> --- a/src/common.h
>> +++ b/src/common.h
>> @@ -27,4 +27,6 @@
>> unsigned char *ushort2lebytes(unsigned char *buf, unsigned short x);
>> unsigned short lebytes2ushort(const unsigned char *buf);
>>
>> +char *hex_dump(unsigned char *, size_t, unsigned char **, size_t);
>> +
>> #endif
>> --
>> 2.17.1
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/spice-devel
>
>
>
> --
> Marc-André Lureau
--
Marc-André Lureau
More information about the Spice-devel
mailing list