diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-08-06 17:27:35 +0200 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2013-08-24 16:22:51 +0200 |
commit | f0c54e8c15f29a74415a93e9fbfa4ada690095ed (patch) | |
tree | 93568d969f961977bfe8197a8730950cc5b2198e /src | |
parent | 32a145fdbd657eb886bee15ccd7fbef7bbea7801 (diff) | |
download | strongswan-f0c54e8c15f29a74415a93e9fbfa4ada690095ed.tar.bz2 strongswan-f0c54e8c15f29a74415a93e9fbfa4ada690095ed.tar.xz |
chunk: Print chunks without separator if + modifier is used
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/tests/test_chunk.c | 21 | ||||
-rw-r--r-- | src/libstrongswan/utils/chunk.c | 4 | ||||
-rw-r--r-- | src/libstrongswan/utils/chunk.h | 1 |
3 files changed, 20 insertions, 6 deletions
diff --git a/src/libstrongswan/tests/test_chunk.c b/src/libstrongswan/tests/test_chunk.c index 7f07d057b..8e29971c1 100644 --- a/src/libstrongswan/tests/test_chunk.c +++ b/src/libstrongswan/tests/test_chunk.c @@ -756,11 +756,12 @@ END_TEST static struct { chunk_t in; char *out; + char *out_plus; } printf_hook_data[] = { - {chunk_from_chars(), ""}, - {chunk_from_chars(0x00), "00"}, - {chunk_from_chars(0x00, 0x01), "00:01"}, - {chunk_from_chars(0x00, 0x01, 0x02), "00:01:02"}, + {chunk_from_chars(), "", ""}, + {chunk_from_chars(0x00), "00", "00"}, + {chunk_from_chars(0x00, 0x01), "00:01", "0001"}, + {chunk_from_chars(0x00, 0x01, 0x02), "00:01:02", "000102"}, }; START_TEST(test_printf_hook_hash) @@ -774,6 +775,17 @@ START_TEST(test_printf_hook_hash) } END_TEST +START_TEST(test_printf_hook_plus) +{ + char buf[16]; + int len; + + len = snprintf(buf, sizeof(buf), "%+B", &printf_hook_data[_i].in); + ck_assert(len >= 0 && len < sizeof(buf)); + ck_assert_str_eq(buf, printf_hook_data[_i].out_plus); +} +END_TEST + START_TEST(test_printf_hook) { char buf[128], mem[128]; @@ -856,6 +868,7 @@ Suite *chunk_suite_create() tc = tcase_create("printf_hook"); tcase_add_loop_test(tc, test_printf_hook_hash, 0, countof(printf_hook_data)); + tcase_add_loop_test(tc, test_printf_hook_plus, 0, countof(printf_hook_data)); tcase_add_loop_test(tc, test_printf_hook, 0, countof(printf_hook_data)); suite_add_tcase(s, tc); diff --git a/src/libstrongswan/utils/chunk.c b/src/libstrongswan/utils/chunk.c index 04f3eea7d..f5b3ac675 100644 --- a/src/libstrongswan/utils/chunk.c +++ b/src/libstrongswan/utils/chunk.c @@ -797,7 +797,7 @@ int chunk_printf_hook(printf_hook_data_t *data, printf_hook_spec_t *spec, chunk_t copy = *chunk; int written = 0; - if (!spec->hash) + if (!spec->hash && !spec->plus) { u_int chunk_len = chunk->len; const void *new_args[] = {&chunk->ptr, &chunk_len}; @@ -810,7 +810,7 @@ int chunk_printf_hook(printf_hook_data_t *data, printf_hook_spec_t *spec, { first = FALSE; } - else + else if (!spec->plus) { written += print_in_hook(data, ":"); } diff --git a/src/libstrongswan/utils/chunk.h b/src/libstrongswan/utils/chunk.h index 34ba77357..36f6f260e 100644 --- a/src/libstrongswan/utils/chunk.h +++ b/src/libstrongswan/utils/chunk.h @@ -368,6 +368,7 @@ u_int64_t chunk_mac(chunk_t chunk, u_char *key); * Arguments are: * chunk_t *chunk * Use #-modifier to print a compact version + * Use +-modifier to print a compact version without separator */ int chunk_printf_hook(printf_hook_data_t *data, printf_hook_spec_t *spec, const void *const *args); |