From: Martin Willi Date: Fri, 27 Sep 2013 09:16:11 +0000 (+0200) Subject: printf-hook-builtin: Support GNU %m specifier X-Git-Tag: 5.1.1rc1~46^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e6a4cdc84c4a5a32f409245209d13828fe8167d;p=thirdparty%2Fstrongswan.git printf-hook-builtin: Support GNU %m specifier --- diff --git a/src/libstrongswan/tests/test_printf.c b/src/libstrongswan/tests/test_printf.c index 2e4247502b..60655de8aa 100644 --- a/src/libstrongswan/tests/test_printf.c +++ b/src/libstrongswan/tests/test_printf.c @@ -15,6 +15,8 @@ #include "test_suite.h" +#include + static void verify(char *expected, char *format, ...) { FILE *mem; @@ -45,6 +47,13 @@ START_TEST(test_printf_strings) } END_TEST +START_TEST(test_printf_err) +{ + errno = EINVAL; + verify((char*)strerror(errno), "%m"); +} +END_TEST + START_TEST(test_printf_unsigned) { verify("1 23 456", "%u %lu %llu", 1, (u_long)23, (u_int64_t)456); @@ -93,6 +102,10 @@ Suite *printf_suite_create() tcase_add_test(tc, test_printf_strings); suite_add_tcase(s, tc); + tc = tcase_create("err"); + tcase_add_test(tc, test_printf_err); + suite_add_tcase(s, tc); + tc = tcase_create("unsiged"); tcase_add_test(tc, test_printf_unsigned); suite_add_tcase(s, tc); diff --git a/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c b/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c index 5f49079794..1c266d4549 100644 --- a/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c +++ b/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c @@ -46,6 +46,7 @@ #include #include #include +#include #define PRINTF_BUF_LEN 8192 #define ARGS_MAX 3 @@ -682,6 +683,13 @@ int builtin_vsnprintf(char *buffer, size_t n, const char *format, va_list ap) slen = strlen(sarg); goto is_string; } + case 'm': + { + /* glibc error string */ + sarg = strerror(errno); + slen = strlen(sarg); + goto is_string; + } is_string: { char sch;