aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2013-08-06 17:27:35 +0200
committerAndreas Steffen <andreas.steffen@strongswan.org>2013-08-24 16:22:51 +0200
commitf0c54e8c15f29a74415a93e9fbfa4ada690095ed (patch)
tree93568d969f961977bfe8197a8730950cc5b2198e /src
parent32a145fdbd657eb886bee15ccd7fbef7bbea7801 (diff)
downloadstrongswan-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.c21
-rw-r--r--src/libstrongswan/utils/chunk.c4
-rw-r--r--src/libstrongswan/utils/chunk.h1
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);