diff options
author | Stef Walter <stefw@gnome.org> | 2012-11-07 09:19:19 +0100 |
---|---|---|
committer | Stef Walter <stefw@gnome.org> | 2012-11-07 23:14:14 +0100 |
commit | b271623e5c3044099fdbae8e6037fd23e3eee5e9 (patch) | |
tree | e5bd5c56f54ae817df49d2cf3ed1993a20312acc /egg | |
parent | 06defe293e5f71206971d37a4c0606f63a05d4a8 (diff) | |
download | gcr-b271623e5c3044099fdbae8e6037fd23e3eee5e9.tar.gz |
egg-hex: Use a full string as the hex delimiter
So that we can better print out escape encodings in our test data.
Diffstat (limited to 'egg')
-rw-r--r-- | egg/egg-hex.c | 29 | ||||
-rw-r--r-- | egg/egg-hex.h | 4 | ||||
-rw-r--r-- | egg/tests/test-hex.c | 8 |
3 files changed, 24 insertions, 17 deletions
diff --git a/egg/egg-hex.c b/egg/egg-hex.c index 4540829..fdc234a 100644 --- a/egg/egg-hex.c +++ b/egg/egg-hex.c @@ -35,11 +35,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; @@ -51,20 +55,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) { @@ -108,12 +112,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; @@ -131,8 +138,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 83b5fdc..4575a43 100644 --- a/egg/egg-hex.h +++ b/egg/egg-hex.h @@ -30,7 +30,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); @@ -40,7 +40,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); } |