aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/utils/printf_hook/printf_hook_builtin.c')
-rw-r--r--src/libstrongswan/utils/printf_hook/printf_hook_builtin.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c b/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c
index 6ba4841cd..a28ce7f48 100644
--- a/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c
+++ b/src/libstrongswan/utils/printf_hook/printf_hook_builtin.c
@@ -500,6 +500,14 @@ static size_t format_double(char *q, size_t n, double val, bpf_flag_t flags,
oo = o;
tmpval = (uintmax_t)fabs(val);
+ if (!prec)
+ {
+ /* round up if no additional digits */
+ if (fabs(val) - tmpval >= 0.5)
+ {
+ tmpval++;
+ }
+ }
while (ndigits > 0)
{
qq--;
@@ -521,9 +529,14 @@ static size_t format_double(char *q, size_t n, double val, bpf_flag_t flags,
qq = q;
oo = o;
+ tmpval = (uintmax_t)(fabs(val) * pow(base, prec));
+ /* round up if required */
+ if (fabs(val) * pow(base, prec) - tmpval >= 0.5)
+ {
+ tmpval++;
+ }
while (prec > 0)
{
- tmpval = (uintmax_t)(fabs(val) * pow(base, prec));
qq--;
oo--;
prec--;
@@ -531,6 +544,7 @@ static size_t format_double(char *q, size_t n, double val, bpf_flag_t flags,
{
*qq = digits[tmpval % base];
}
+ tmpval /= base;
}
}