changeset 18023:2188c95d0311

applied changes from 4b489c7fd0ca6d775558656ce19ba53d7209bb26 through ff100777af0314cd00df42f69ae90121a3eee728 - Add purple_base16_encode_chunked
author William Ehlhardt <williamehlhardt@gmail.com>
date Wed, 30 May 2007 03:59:52 +0000
parents b1e453e4e62a
children 92e27556160c
files libpurple/util.c libpurple/util.h
diffstat 2 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/util.c	Mon May 28 08:10:38 2007 +0000
+++ b/libpurple/util.c	Wed May 30 03:59:52 2007 +0000
@@ -155,6 +155,31 @@
 	return data;
 }
 
+gchar *
+purple_base16_encode_chunked(const guchar *data, gsize len)
+{
+	int i;
+	gchar *ascii = NULL;
+
+	g_return_val_if_fail(data != NULL, NULL);
+	g_return_val_if_fail(len > 0,   NULL);
+
+	/* For each byte of input, we need 2 bytes for the hex representation
+	 * and 1 for the colon.
+	 * The final colon will be replaced by a terminating NULL
+	 */
+	ascii = g_malloc(len * 3 + 1);
+
+	for (i = 0; i < len; i++)
+		g_snprintf(&ascii[i * 3], 4, "%02hhx:", data[i]);
+
+	/* Replace the final colon with NULL */
+	ascii[len * 3 - 1] = 0;
+
+	return ascii;
+}
+
+
 /**************************************************************************
  * Base64 Functions
  **************************************************************************/
--- a/libpurple/util.h	Mon May 28 08:10:38 2007 +0000
+++ b/libpurple/util.h	Wed May 30 03:59:52 2007 +0000
@@ -118,6 +118,21 @@
  */
 guchar *purple_base16_decode(const char *str, gsize *ret_len);
 
+/**
+ * Converts a chunk of binary data to a chunked base-16 representation
+ * (handy for key fingerprints)
+ *
+ * Example output: 01:23:45:67:89:AB:CD:EF
+ *
+ * @param data The data to convert.
+ * @param len  The length of the data.
+ *
+ * @return The base-16 string in the ASCII chunked encoding.  Must be
+ *         g_free'd when no longer needed.
+ */
+gchar *purple_base16_encode_chunked(const guchar *data, gsize len);
+
+
 /*@}*/
 
 /**************************************************************************/