[PATCH 09/13] hexdump: Allow ctrl-c to interrupt output
Simon Glass
sjg at chromium.org
Wed Mar 17 19:18:36 CET 2021
If a long hexdump is initated the user may wish to interrupt it. Add
support for this.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
include/hexdump.h | 6 ++++--
lib/hexdump.c | 13 +++++++++----
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/include/hexdump.h b/include/hexdump.h
index b75e26025a4..f2ca4793d69 100644
--- a/include/hexdump.h
+++ b/include/hexdump.h
@@ -125,6 +125,8 @@ int hex_dump_to_buffer(const void *buf, size_t len, int rowsize, int groupsize,
* @buf: data blob to dump
* @len: number of bytes in the @buf
* @ascii: include ASCII after the hex output
+ * Returns: 0 if finished normally, -EINTR if Ctrl-C was pressed, -ENOSYS if not
+ * supported
*
* Given a buffer of u8 data, print_hex_dump() prints a hex + ASCII dump
* to the stdio, with an optional leading prefix.
@@ -143,8 +145,8 @@ int hex_dump_to_buffer(const void *buf, size_t len, int rowsize, int groupsize,
* Example output using %DUMP_PREFIX_ADDRESS and 4-byte mode:
* ffffffff88089af0: 73727170 77767574 7b7a7978 7f7e7d7c pqrstuvwxyz{|}~.
*/
-void print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
- int groupsize, const void *buf, size_t len, bool ascii);
+int print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
+ int groupsize, const void *buf, size_t len, bool ascii);
/**
* print_hex_dump_bytes - shorthand form of print_hex_dump() with default params
diff --git a/lib/hexdump.c b/lib/hexdump.c
index a56e108164d..149c93ead8b 100644
--- a/lib/hexdump.c
+++ b/lib/hexdump.c
@@ -125,8 +125,8 @@ overflow1:
return ascii ? ascii_column + len : (groupsize * 2 + 1) * ngroups - 1;
}
-void print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
- int groupsize, const void *buf, size_t len, bool ascii)
+int print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
+ int groupsize, const void *buf, size_t len, bool ascii)
{
const u8 *ptr = buf;
int i, linelen, remaining = len;
@@ -157,7 +157,11 @@ void print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
printf("%s%s\n", prefix_str, linebuf);
break;
}
+ if (!IS_ENABLED(CONFIG_SPL_BUILD) && ctrlc())
+ return -EINTR;
}
+
+ return 0;
}
void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
@@ -170,9 +174,10 @@ void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
* Some code in U-Boot copy-pasted from Linux kernel uses both
* functions below so to keep stuff compilable we keep these stubs here.
*/
-void print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
- int groupsize, const void *buf, size_t len, bool ascii)
+int print_hex_dump(const char *prefix_str, int prefix_type, int rowsize,
+ int groupsize, const void *buf, size_t len, bool ascii)
{
+ return -ENOSYS;
}
void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
--
2.31.0.rc2.261.g7f71774620-goog
More information about the U-Boot
mailing list