diff --git a/wsutil/test_wsutil.c b/wsutil/test_wsutil.c index 65c800a4c8..39d484291e 100644 --- a/wsutil/test_wsutil.c +++ b/wsutil/test_wsutil.c @@ -34,6 +34,54 @@ void test_format_size(void) #include "to_str.h" +void test_word_to_hex(void) +{ + static char buf[32]; + char *str; /* String is not NULL terminated. */ + + str = guint8_to_hex(buf, 0x34); + g_assert_true(str == buf + 2); + g_assert_cmpint(str[-1], ==, '4'); + g_assert_cmpint(str[-2], ==, '3'); + + str = word_to_hex(buf, 0x1234); + g_assert_true(str == buf + 4); + g_assert_cmpint(str[-1], ==, '4'); + g_assert_cmpint(str[-2], ==, '3'); + g_assert_cmpint(str[-3], ==, '2'); + g_assert_cmpint(str[-4], ==, '1'); + + str = dword_to_hex(buf, 0x1234); + g_assert_true(str == buf + 8); + g_assert_cmpint(str[-1], ==, '4'); + g_assert_cmpint(str[-2], ==, '3'); + g_assert_cmpint(str[-3], ==, '2'); + g_assert_cmpint(str[-4], ==, '1'); + g_assert_cmpint(str[-5], ==, '0'); + g_assert_cmpint(str[-6], ==, '0'); + g_assert_cmpint(str[-7], ==, '0'); + g_assert_cmpint(str[-8], ==, '0'); + + str = qword_to_hex(buf, G_GUINT64_CONSTANT(0xFEDCBA987654321)); + g_assert_true(str == buf + 16); + g_assert_cmpint(str[-1], ==, '1'); + g_assert_cmpint(str[-2], ==, '2'); + g_assert_cmpint(str[-3], ==, '3'); + g_assert_cmpint(str[-4], ==, '4'); + g_assert_cmpint(str[-5], ==, '5'); + g_assert_cmpint(str[-6], ==, '6'); + g_assert_cmpint(str[-7], ==, '7'); + g_assert_cmpint(str[-8], ==, '8'); + g_assert_cmpint(str[-9], ==, '9'); + g_assert_cmpint(str[-10], ==, 'a'); + g_assert_cmpint(str[-11], ==, 'b'); + g_assert_cmpint(str[-12], ==, 'c'); + g_assert_cmpint(str[-13], ==, 'd'); + g_assert_cmpint(str[-14], ==, 'e'); + g_assert_cmpint(str[-15], ==, 'f'); + g_assert_cmpint(str[-16], ==, '0'); +} + void test_bytes_to_str(void) { char *str; @@ -254,6 +302,7 @@ int main(int argc, char **argv) g_test_add_func("/str_util/format_size", test_format_size); + g_test_add_func("/to_str/word_to_hex", test_word_to_hex); g_test_add_func("/to_str/bytes_to_str", test_bytes_to_str); g_test_add_func("/to_str/bytes_to_str_punct", test_bytes_to_str_punct); g_test_add_func("/to_str/bytes_to_str_trunc1", test_bytes_to_string_trunc1); diff --git a/wsutil/to_str.h b/wsutil/to_str.h index b513f665d2..0ad18b972d 100644 --- a/wsutil/to_str.h +++ b/wsutil/to_str.h @@ -23,8 +23,8 @@ extern "C" { /** * guint8_to_hex() * - * Output guint8 hex represetation to 'out', and return pointer after last character (out + 4). - * It always output full representation (padded with 0). + * Output guint8 hex representation to 'out', and return pointer after last character (out + 2). + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least 2 bytes in the buffer. @@ -34,31 +34,20 @@ WS_DLL_PUBLIC char *guint8_to_hex(char *out, guint8 val); /** * word_to_hex() * - * Output guint16 hex represetation to 'out', and return pointer after last character (out + 4). - * It always output full representation (padded with 0). + * Output guint16 hex representation to 'out', and return pointer after last character (out + 4). + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least 4 bytes in the buffer. */ WS_DLL_PUBLIC char *word_to_hex(char *out, guint16 word); -/** - * dword_to_hex() - * - * Output guint32 hex represetation to 'out', and return pointer after last character. - * It always output full representation (padded with 0). - * - * String is not NUL terminated by this routine. - * There needs to be at least 8 bytes in the buffer. - */ -WS_DLL_PUBLIC char *dword_to_hex(char *out, guint32 dword); - /** * word_to_hex_punct() * - * Output guint16 hex represetation to 'out', and return pointer after last character. + * Output guint16 hex representation to 'out', and return pointer after last character. * Each byte will be separated with punct character (cannot be NUL). - * It always output full representation (padded with 0). + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least 5 bytes in the buffer. @@ -68,7 +57,7 @@ WS_DLL_PUBLIC char *word_to_hex_punct(char *out, guint16 word, char punct); /** * word_to_hex_npad() * - * Output guint16 hex represetation to 'out', and return pointer after last character. + * Output guint16 hex representation to 'out', and return pointer after last character. * Value is not padded. * * String is not NUL terminated by this routine. @@ -76,12 +65,23 @@ WS_DLL_PUBLIC char *word_to_hex_punct(char *out, guint16 word, char punct); */ WS_DLL_PUBLIC char *word_to_hex_npad(char *out, guint16 word); +/** + * dword_to_hex() + * + * Output guint32 hex representation to 'out', and return pointer after last character. + * It will always output full representation (padded with 0). + * + * String is not NUL terminated by this routine. + * There needs to be at least 8 bytes in the buffer. + */ +WS_DLL_PUBLIC char *dword_to_hex(char *out, guint32 dword); + /** * dword_to_hex_punct() * - * Output guint32 hex represetation to 'out', and return pointer after last character. + * Output guint32 hex representation to 'out', and return pointer after last character. * Each byte will be separated with punct character (cannot be NUL). - * It always output full representation (padded with 0). + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least 11 bytes in the buffer. @@ -91,8 +91,8 @@ WS_DLL_PUBLIC char *dword_to_hex_punct(char *out, guint32 dword, char punct); /** * qword_to_hex() * - * Output guint64 hex represetation to 'out', and return pointer after last character. - * It always output full representation (padded with 0). + * Output guint64 hex representation to 'out', and return pointer after last character. + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least 16 bytes in the buffer. @@ -102,9 +102,9 @@ WS_DLL_PUBLIC char *qword_to_hex(char *out, guint64 qword); /** * qword_to_hex_punct() * - * Output guint64 hex represetation to 'out', and return pointer after last character. + * Output guint64 hex representation to 'out', and return pointer after last character. * Each byte will be separated with punct character (cannot be NUL). - * It always output full representation (padded with 0). + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least 22 bytes in the buffer. @@ -114,8 +114,8 @@ WS_DLL_PUBLIC char *qword_to_hex_punct(char *out, guint64 qword, char punct); /** * bytes_to_hexstr() * - * Output hex represetation of guint8 ad array, and return pointer after last character. - * It always output full representation (padded with 0). + * Output hex representation of guint8 array, and return pointer after last character. + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least len * 2 bytes in the buffer. @@ -125,9 +125,9 @@ WS_DLL_PUBLIC char *bytes_to_hexstr(char *out, const guint8 *ad, size_t len); /** * bytes_to_hexstr_punct() * - * Output hex represetation of guint8 ad array, and return pointer after last character. + * Output hex representation of guint8 array, and return pointer after last character. * Each byte will be separated with punct character (cannot be NUL). - * It always output full representation (padded with 0). + * It will always output full representation (padded with 0). * * String is not NUL terminated by this routine. * There needs to be at least len * 3 - 1 bytes in the buffer.