scsi.c: use print_array function
* scsi.c (print_uchar): New function.
(print_sg_io_buffer): Use it via print_array.
diff --git a/scsi.c b/scsi.c
index 9038c3c..01c5db2 100644
--- a/scsi.c
+++ b/scsi.c
@@ -42,29 +42,21 @@
# include "xlat/bsg_subprotocol.h"
# endif
-static void
-print_sg_io_buffer(struct tcb *tcp, unsigned long addr, const unsigned int len)
+static bool
+print_uchar(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
{
- unsigned char *buf = NULL;
- unsigned int allocated, i;
+ tprintf("%02x", (unsigned int) (* (unsigned char *) elem_buf));
- tprints("[");
- if (len == 0)
- goto out;
- allocated = (len > max_strlen) ? max_strlen : len;
- buf = malloc(allocated);
- if (!buf || umoven(tcp, addr, allocated, buf) < 0) {
- printaddr(addr);
- goto out;
- }
- tprintf("%02x", buf[0]);
- for (i = 1; i < allocated; ++i)
- tprintf(", %02x", buf[i]);
- if (allocated != len)
- tprints(", ...");
-out:
- free(buf);
- tprints("]");
+ return true;
+}
+
+static void
+print_sg_io_buffer(struct tcb *tcp, const unsigned long addr, const unsigned int len)
+{
+ unsigned char buf;
+
+ print_array(tcp, addr, len, &buf, sizeof(buf),
+ umoven_or_printaddr, print_uchar, 0);
}
static int