From: Vishal Verma <vishal.l.verma@intel.com> To: <linux-cxl@vger.kernel.org> Cc: linux-nvdimm@lists.01.org, Ben Widawsky <ben.widawsky@intel.com> Subject: [ndctl PATCH v2 10/13] util/hexdump: Add a util helper to print a buffer in hex Date: Thu, 18 Feb 2021 19:03:28 -0700 [thread overview] Message-ID: <20210219020331.725687-11-vishal.l.verma@intel.com> (raw) In-Reply-To: <20210219020331.725687-1-vishal.l.verma@intel.com> In preparation for tests that may need to set, retrieve, and display opaque data, add a hexdump function in util. Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> --- util/hexdump.h | 8 ++++++++ util/hexdump.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 util/hexdump.h create mode 100644 util/hexdump.c diff --git a/util/hexdump.h b/util/hexdump.h new file mode 100644 index 0000000..d322b6a --- /dev/null +++ b/util/hexdump.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2021 Intel Corporation. All rights reserved. */ +#ifndef _UTIL_HEXDUMP_H_ +#define _UTIL_HEXDUMP_H_ + +void hex_dump_buf(unsigned char *buf, int size); + +#endif /* _UTIL_HEXDUMP_H_*/ diff --git a/util/hexdump.c b/util/hexdump.c new file mode 100644 index 0000000..1ab0118 --- /dev/null +++ b/util/hexdump.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (C) 2015-2021 Intel Corporation. All rights reserved. */ +#include <stdio.h> +#include <util/hexdump.h> + +static void print_separator(int len) +{ + int i; + + for (i = 0; i < len; i++) + fprintf(stderr, "-"); + fprintf(stderr, "\n"); +} + +void hex_dump_buf(unsigned char *buf, int size) +{ + int i; + const int grp = 4; /* Number of bytes in a group */ + const int wid = 16; /* Bytes per line. Should be a multiple of grp */ + char ascii[wid + 1]; + + /* Generate header */ + print_separator((wid * 4) + (wid / grp) + 12); + + fprintf(stderr, "Offset "); + for (i = 0; i < wid; i++) { + if (i % grp == 0) fprintf(stderr, " "); + fprintf(stderr, "%02x ", i); + } + fprintf(stderr, " Ascii\n"); + + print_separator((wid * 4) + (wid / grp) + 12); + + /* Generate hex dump */ + for (i = 0; i < size; i++) { + if (i % wid == 0) fprintf(stderr, "%08x ", i); + ascii[i % wid] = + ((buf[i] >= ' ') && (buf[i] <= '~')) ? buf[i] : '.'; + if (i % grp == 0) fprintf(stderr, " "); + fprintf(stderr, "%02x ", buf[i]); + if ((i == size - 1) && (size % wid != 0)) { + int j; + int done = size % wid; + int grps_done = (done / grp) + ((done % grp) ? 1 : 0); + int spaces = wid / grp - grps_done + ((wid - done) * 3); + + for (j = 0; j < spaces; j++) fprintf(stderr, " "); + } + if ((i % wid == wid - 1) || (i == size - 1)) + fprintf(stderr, " %.*s\n", (i % wid) + 1, ascii); + } + print_separator((wid * 4) + (wid / grp) + 12); +} -- 2.29.2 _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-leave@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: Vishal Verma <vishal.l.verma@intel.com> To: <linux-cxl@vger.kernel.org> Cc: <linux-nvdimm@lists.01.org>, Ben Widawsky <ben.widawsky@intel.com>, Dan Williams <dan.j.williams@intel.com>, Vishal Verma <vishal.l.verma@intel.com> Subject: [ndctl PATCH v2 10/13] util/hexdump: Add a util helper to print a buffer in hex Date: Thu, 18 Feb 2021 19:03:28 -0700 [thread overview] Message-ID: <20210219020331.725687-11-vishal.l.verma@intel.com> (raw) In-Reply-To: <20210219020331.725687-1-vishal.l.verma@intel.com> In preparation for tests that may need to set, retrieve, and display opaque data, add a hexdump function in util. Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> --- util/hexdump.h | 8 ++++++++ util/hexdump.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 util/hexdump.h create mode 100644 util/hexdump.c diff --git a/util/hexdump.h b/util/hexdump.h new file mode 100644 index 0000000..d322b6a --- /dev/null +++ b/util/hexdump.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2021 Intel Corporation. All rights reserved. */ +#ifndef _UTIL_HEXDUMP_H_ +#define _UTIL_HEXDUMP_H_ + +void hex_dump_buf(unsigned char *buf, int size); + +#endif /* _UTIL_HEXDUMP_H_*/ diff --git a/util/hexdump.c b/util/hexdump.c new file mode 100644 index 0000000..1ab0118 --- /dev/null +++ b/util/hexdump.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (C) 2015-2021 Intel Corporation. All rights reserved. */ +#include <stdio.h> +#include <util/hexdump.h> + +static void print_separator(int len) +{ + int i; + + for (i = 0; i < len; i++) + fprintf(stderr, "-"); + fprintf(stderr, "\n"); +} + +void hex_dump_buf(unsigned char *buf, int size) +{ + int i; + const int grp = 4; /* Number of bytes in a group */ + const int wid = 16; /* Bytes per line. Should be a multiple of grp */ + char ascii[wid + 1]; + + /* Generate header */ + print_separator((wid * 4) + (wid / grp) + 12); + + fprintf(stderr, "Offset "); + for (i = 0; i < wid; i++) { + if (i % grp == 0) fprintf(stderr, " "); + fprintf(stderr, "%02x ", i); + } + fprintf(stderr, " Ascii\n"); + + print_separator((wid * 4) + (wid / grp) + 12); + + /* Generate hex dump */ + for (i = 0; i < size; i++) { + if (i % wid == 0) fprintf(stderr, "%08x ", i); + ascii[i % wid] = + ((buf[i] >= ' ') && (buf[i] <= '~')) ? buf[i] : '.'; + if (i % grp == 0) fprintf(stderr, " "); + fprintf(stderr, "%02x ", buf[i]); + if ((i == size - 1) && (size % wid != 0)) { + int j; + int done = size % wid; + int grps_done = (done / grp) + ((done % grp) ? 1 : 0); + int spaces = wid / grp - grps_done + ((wid - done) * 3); + + for (j = 0; j < spaces; j++) fprintf(stderr, " "); + } + if ((i % wid == wid - 1) || (i == size - 1)) + fprintf(stderr, " %.*s\n", (i % wid) + 1, ascii); + } + print_separator((wid * 4) + (wid / grp) + 12); +} -- 2.29.2
next prev parent reply other threads:[~2021-02-19 2:04 UTC|newest] Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-19 2:03 [ndctl PATCH v2 00/13] Initial CXL support Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 01/13] cxl: add a cxl utility and libcxl library Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-22 21:36 ` Ben Widawsky 2021-02-22 21:36 ` Ben Widawsky 2021-02-23 19:23 ` Verma, Vishal L 2021-02-23 19:23 ` Verma, Vishal L 2021-02-19 2:03 ` [ndctl PATCH v2 02/13] cxl: add a local copy of the cxl_mem UAPI header Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-22 21:41 ` Ben Widawsky 2021-02-22 21:41 ` Ben Widawsky 2021-02-19 2:03 ` [ndctl PATCH v2 03/13] libcxl: add support for command query and submission Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-22 21:55 ` Ben Widawsky 2021-02-22 21:55 ` Ben Widawsky 2021-02-19 2:03 ` [ndctl PATCH v2 04/13] libcxl: add support for the 'Identify Device' command Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-22 22:02 ` Ben Widawsky 2021-02-22 22:02 ` Ben Widawsky 2021-02-19 2:03 ` [ndctl PATCH v2 05/13] test: rename 'ndctl_test' to 'test_ctx' Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 06/13] test: rename 'ndctl_test_*' helpers to 'test_*' Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 07/13] test: introduce a libcxl unit test Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-22 22:15 ` Ben Widawsky 2021-02-22 22:15 ` Ben Widawsky 2021-02-19 2:03 ` [ndctl PATCH v2 08/13] libcxl: add GET_HEALTH_INFO mailbox command and accessors Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 09/13] libcxl: add support for the 'GET_LSA' command Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` Vishal Verma [this message] 2021-02-19 2:03 ` [ndctl PATCH v2 10/13] util/hexdump: Add a util helper to print a buffer in hex Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 11/13] test/libcxl: add a test for {set, get}_lsa commands Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 12/13] Documentation/cxl: add library API documentation Vishal Verma 2021-02-19 2:03 ` Vishal Verma 2021-02-19 2:03 ` [ndctl PATCH v2 13/13] test/libcxl: introduce a command size fuzzing test Vishal Verma 2021-02-19 2:03 ` Vishal Verma
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210219020331.725687-11-vishal.l.verma@intel.com \ --to=vishal.l.verma@intel.com \ --cc=ben.widawsky@intel.com \ --cc=linux-cxl@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.