[gnome-keyring] egg-hex: Use a full string as the hex delimiter
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-keyring] egg-hex: Use a full string as the hex delimiter
- Date: Mon, 12 Nov 2012 08:15:48 +0000 (UTC)
commit a901798e025389f3c4414406b6144687f85aa552
Author: Stef Walter <stefw gnome org>
Date: Wed Nov 7 09:19:19 2012 +0100
egg-hex: Use a full string as the hex delimiter
So that we can better print out escape encodings in our test data.
egg/egg-hex.c | 29 ++++++++++++++++++-----------
egg/egg-hex.h | 4 ++--
egg/tests/test-hex.c | 8 ++++----
pkcs11/gnome2-store/gkm-gnome2-file.c | 2 +-
4 files changed, 25 insertions(+), 18 deletions(-)
---
diff --git a/egg/egg-hex.c b/egg/egg-hex.c
index 2e857ca..f4d0f18 100644
--- a/egg/egg-hex.c
+++ b/egg/egg-hex.c
@@ -37,11 +37,15 @@ egg_hex_decode (const gchar *data, gssize n_data, gsize *n_decoded)
}
gpointer
-egg_hex_decode_full (const gchar *data, gssize n_data,
- gchar delim, guint group, gsize *n_decoded)
+egg_hex_decode_full (const gchar *data,
+ gssize n_data,
+ const gchar *delim,
+ guint group,
+ gsize *n_decoded)
{
guchar *result;
guchar *decoded;
+ gsize n_delim;
gushort j;
gint state = 0;
gint part = 0;
@@ -53,20 +57,20 @@ egg_hex_decode_full (const gchar *data, gssize n_data,
if (n_data == -1)
n_data = strlen (data);
-
+ n_delim = delim ? strlen (delim) : 0;
decoded = result = g_malloc0 ((n_data / 2) + 1);
*n_decoded = 0;
while (n_data > 0 && state == 0) {
if (decoded != result && delim) {
- if (*data != delim) {
+ if (n_data < n_delim || memcmp (data, delim, n_delim) != 0) {
state = -1;
break;
}
- ++data;
- --n_data;
+ data += n_delim;
+ n_data -= n_delim;
}
while (part < group && n_data > 0) {
@@ -110,12 +114,15 @@ egg_hex_decode_full (const gchar *data, gssize n_data,
gchar*
egg_hex_encode (gconstpointer data, gsize n_data)
{
- return egg_hex_encode_full (data, n_data, TRUE, '\0', 0);
+ return egg_hex_encode_full (data, n_data, TRUE, NULL, 0);
}
gchar*
-egg_hex_encode_full (gconstpointer data, gsize n_data,
- gboolean upper_case, gchar delim, guint group)
+egg_hex_encode_full (gconstpointer data,
+ gsize n_data,
+ gboolean upper_case,
+ const gchar *delim,
+ guint group)
{
GString *result;
const gchar *input;
@@ -133,8 +140,8 @@ egg_hex_encode_full (gconstpointer data, gsize n_data,
while (n_data > 0) {
- if (group && bytes && (bytes % group) == 0)
- g_string_append_c (result, delim);
+ if (delim && group && bytes && (bytes % group) == 0)
+ g_string_append (result, delim);
j = *(input) >> 4 & 0xf;
g_string_append_c (result, hexc[j]);
diff --git a/egg/egg-hex.h b/egg/egg-hex.h
index d87594f..0e90aee 100644
--- a/egg/egg-hex.h
+++ b/egg/egg-hex.h
@@ -32,7 +32,7 @@ gpointer egg_hex_decode (const gchar *data,
gpointer egg_hex_decode_full (const gchar *data,
gssize n_data,
- gchar delim,
+ const gchar *delim,
guint group,
gsize *n_decoded);
@@ -42,7 +42,7 @@ gchar* egg_hex_encode (gconstpointer data
gchar* egg_hex_encode_full (gconstpointer data,
gsize n_data,
gboolean upper_case,
- gchar delim,
+ const gchar *delim,
guint group);
#endif /* EGG_HEX_H_ */
diff --git a/egg/tests/test-hex.c b/egg/tests/test-hex.c
index 93ad4bf..992f0aa 100644
--- a/egg/tests/test-hex.c
+++ b/egg/tests/test-hex.c
@@ -31,7 +31,7 @@
static const guchar TEST_DATA[] = { 0x05, 0xD6, 0x95, 0x96, 0x10, 0x12, 0xAE, 0x35 };
static const gchar *TEST_HEX = "05D695961012AE35";
-static const gchar *TEST_HEX_DELIM = "05 D6 95 96 10 12 AE 35";
+static const gchar *TEST_HEX_DELIM = "05 D6 95 96 10 12 AE 35";
static void
test_encode (void)
@@ -58,7 +58,7 @@ test_encode_spaces (void)
g_free (hex);
/* Encode with spaces */
- hex = egg_hex_encode_full (TEST_DATA, sizeof (TEST_DATA), TRUE, ' ', 1);
+ hex = egg_hex_encode_full (TEST_DATA, sizeof (TEST_DATA), TRUE, " ", 1);
g_assert (hex);
g_assert_cmpstr (hex, ==, TEST_HEX_DELIM);
@@ -84,7 +84,7 @@ test_decode (void)
g_free (data);
/* Delimited*/
- data = egg_hex_decode_full (TEST_HEX_DELIM, -1, ' ', 1, &n_data);
+ data = egg_hex_decode_full (TEST_HEX_DELIM, -1, " ", 1, &n_data);
g_assert (data);
g_assert (n_data == sizeof (TEST_DATA));
g_assert (memcmp (data, TEST_DATA, n_data) == 0);
@@ -106,7 +106,7 @@ test_decode_fail (void)
g_assert (!data);
/* Not Delimited, null out*/
- data = egg_hex_decode_full ("ABABAB", -1, ':', 1, &n_data);
+ data = egg_hex_decode_full ("ABABAB", -1, ":", 1, &n_data);
g_assert (!data);
}
diff --git a/pkcs11/gnome2-store/gkm-gnome2-file.c b/pkcs11/gnome2-store/gkm-gnome2-file.c
index f933b76..582366f 100644
--- a/pkcs11/gnome2-store/gkm-gnome2-file.c
+++ b/pkcs11/gnome2-store/gkm-gnome2-file.c
@@ -1014,7 +1014,7 @@ dump_attributes (gpointer key, gpointer value, gpointer user_data)
if (attr->pValue == NULL)
text = g_strdup ("NULL");
else
- text = egg_hex_encode_full (attr->pValue, attr->ulValueLen, TRUE, ' ', 1);
+ text = egg_hex_encode_full (attr->pValue, attr->ulValueLen, TRUE, " ", 1);
g_print ("\t0x%08x: %s\n", (guint)*type, text);
g_free (text);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]