From 04de6fe37e92b4bb4910a469e820ad8608ac79cf Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 6 Aug 2020 13:18:07 +0200 Subject: [PATCH] ucrtbase: Fix away from 0 rounding in %a format. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- dlls/msvcrt/printf.h | 4 ++-- dlls/ucrtbase/tests/printf.c | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dlls/msvcrt/printf.h b/dlls/msvcrt/printf.h index b9b379f91e5..4b47d658038 100644 --- a/dlls/msvcrt/printf.h +++ b/dlls/msvcrt/printf.h @@ -446,10 +446,10 @@ static inline int FUNC_NAME(pf_output_hex_fp)(FUNC_NAME(puts_clbk) pf_puts, void mant >>= 4; } if(!flags->Precision) { - if(p[0] > '8') p[-2]++; + if(p[0] >= '8') p[-2]++; if(!flags->Alternate) p--; }else if(flags->Precision>0 && flags->PrecisionPrecision] > '8'); + BOOL round_up = (p[flags->Precision] >= '8'); for(r=flags->Precision-1; r>=0 && round_up; r--) { round_up = FALSE; if(p[r]=='f' || p[r]=='F') { diff --git a/dlls/ucrtbase/tests/printf.c b/dlls/ucrtbase/tests/printf.c index f8446b8ac95..a26bd230e5d 100644 --- a/dlls/ucrtbase/tests/printf.c +++ b/dlls/ucrtbase/tests/printf.c @@ -747,18 +747,21 @@ static void test_printf_fp(void) { "%.a", 0.1e-20, { "0x1p-70" }}, { "%a", 0.1e-20, { "0x1.2e3b40a0e9b4fp-70" }}, { "%a", 4.9406564584124654e-324, { "0x0.0000000000001p-1022" }}, - { "%.0a", -1.5, { "-0x1p+0" }}, + { "%.0a", -1.5, { "-0x2p+0" }, { "-0x1p+0" }}, { "%.0a", -0.5, { "-0x1p-1" }}, { "%.0a", 0.5, { "0x1p-1" }}, - { "%.0a", 1.5, { "0x1p+0" }}, + { "%.0a", 1.5, { "0x2p+0" }, { "0x1p+0" }}, { "%.0a", 1.99, { "0x2p+0" }}, { "%.0a", 2, { "0x1p+1" }}, { "%.0a", 9.5, { "0x1p+3" }}, { "%.0a", 10.5, { "0x1p+3" }}, - { "%#.0a", -1.5, { "-0x1.p+0" }}, + { "%#.0a", -1.5, { "-0x2.p+0" }, { "-0x1.p+0" }}, { "%#.0a", -0.5, { "-0x1.p-1" }}, { "%#.0a", 0.5, { "0x1.p-1" }}, - { "%#.0a", 1.5, { "0x1.p+0" }}, + { "%#.0a", 1.5, { "0x2.p+0" }, { "0x1.p+0" }}, + { "%#.1a", 1.03125, { "0x1.1p+0" }, { "0x1.0p+0" }}, + { "%#.1a", 1.09375, { "0x1.2p+0" }, { "0x1.1p+0" }}, + { "%#.1a", 1.15625, { "0x1.3p+0" }, { "0x1.2p+0" }}, { "%f", 0, { "0.000000" }}, { "%e", 0, { "0.000000e+00", NULL, "0.000000e+000" }},