]> sigrok.org Git - libsigrok.git/commitdiff
strutil: introduce hex dump routines (allocate a text buffer)
authorGerhard Sittig <redacted>
Sat, 6 Oct 2018 17:02:03 +0000 (19:02 +0200)
committerUwe Hermann <redacted>
Sat, 13 Oct 2018 13:57:01 +0000 (15:57 +0200)
Introduce common support for hex dumps in the string util collection.
There are explicit allocation and release routines for the textual
representation of the data bytes, so that callers are free to chose
whether and how to decorate the dump and where to send the message.

src/libsigrok-internal.h
src/strutil.c

index 317cad4afd38e73558aebe19de7ce677f6476c70..a567d14baccc0df9b3612ed0daa414d117e17b41 100644 (file)
@@ -1026,6 +1026,9 @@ SR_PRIV int sr_atof(const char *str, float *ret);
 SR_PRIV int sr_atod_ascii(const char *str, double *ret);
 SR_PRIV int sr_atof_ascii(const char *str, float *ret);
 
+SR_PRIV GString *sr_hexdump_new(const uint8_t *data, const size_t len);
+SR_PRIV void sr_hexdump_free(GString *s);
+
 /*--- soft-trigger.c --------------------------------------------------------*/
 
 struct soft_trigger_logic {
index 73c9fc6af4a85459b75c659ede5421c2ac3f6688..93e424ee1f047d7ba96a23c4b657450597a2c94c 100644 (file)
@@ -590,6 +590,42 @@ SR_API int sr_vsnprintf_ascii(char *buf, size_t buf_size,
 #endif
 }
 
+/**
+ * Convert a sequence of bytes to its textual representation ("hex dump").
+ *
+ * Callers should free the allocated GString. See @ref sr_hexdump_free().
+ *
+ * @param[in] data Pointer to the byte sequence to print.
+ * @param[in] len Number of bytes to print.
+ *
+ * @return #NULL upon error, newly allocated GString pointer otherwise.
+ */
+SR_PRIV GString *sr_hexdump_new(const uint8_t *data, const size_t len)
+{
+       GString *s;
+       size_t i;
+
+       s = g_string_sized_new(3 * len);
+       for (i = 0; i < len; i++) {
+               if (i)
+                       g_string_append_c(s, ' ');
+               g_string_append_printf(s, "%02x", data[i]);
+       }
+
+       return s;
+}
+
+/**
+ * Free a hex dump text that was created by @ref sr_hexdump_new().
+ *
+ * @param[in] s Pointer to the GString to release.
+ */
+SR_PRIV void sr_hexdump_free(GString *s)
+{
+       if (s)
+               g_string_free(s, TRUE);
+}
+
 /**
  * Convert a string representation of a numeric value to a sr_rational.
  *