From 80843d0818c61823bd9dd4c365442d29a8a6f2af Mon Sep 17 00:00:00 2001
From: Michael Drake <michael.drake@codethink.co.uk>
Date: Thu, 7 Jun 2018 12:37:13 +0100
Subject: [PATCH 6/9] lsusb: Split out field name rendering.
Splits out the rendering of fields from desc_dump() since it
is a single unit of functionality and the desc_dump() function
had grown quite complex.
Signed-off-by: Michael Drake <michael.drake@codethink.co.uk>
---
desc-dump.c | 45 +++++++++++++++++++++++++++++++++------------
1 file changed, 33 insertions(+), 12 deletions(-)
diff --git a/desc-dump.c b/desc-dump.c
index 393ff70..2f92768 100644
--- a/desc-dump.c
+++ b/desc-dump.c
@@ -446,6 +446,35 @@ static unsigned int get_char_count_for_array_index(unsigned int array_entries)
return 3;
}
+/**
+ * Render a field's name.
+ *
+ * \param[in] entry Current entry number (for arrays).
+ * \param[in] entries Entry count (for arrays).
+ * \param[in] field_len Character width of field name space for alignment.
+ * \param[in] current Descriptor definition of field to render.
+ * \param[in] indent Current indent level.
+ */
+static void field_render(
+ unsigned int entry,
+ unsigned int entries,
+ unsigned int field_len,
+ const struct desc *current,
+ unsigned int indent)
+{
+ if (current->array.array) {
+ unsigned int needed_chars = field_len -
+ get_char_count_for_array_index(entries) -
+ strlen(current->field);
+ printf("%*s%s(%u)%*s", indent * 2, "",
+ current->field, entry,
+ needed_chars, "");
+ } else {
+ printf("%*s%-*s", indent * 2, "",
+ field_len, current->field);
+ }
+}
+
/* Function documented in desc-dump.h */
void desc_dump(
libusb_device_handle *dev,
@@ -506,19 +535,11 @@ void desc_dump(
printf("\n");
return;
}
+
/* Dump the field name */
- if (current->array.array) {
- needed_chars = field_len -
- get_char_count_for_array_index(
- entries) -
- strlen(current->field);
- printf("%*s%s(%u)%*s", indent * 2, "",
- current->field, entry,
- needed_chars, "");
- } else {
- printf("%*s%-*s", indent * 2, "",
- field_len, current->field);
- }
+ field_render(entry, entries, field_len,
+ current, indent);
+
/* Dump the value */
value_renderer(dev, current, current_size, buf,
indent, offset);
--
2.14.4