# HG changeset patch # User Christian Brabandt # Date 1472304607 -7200 # Node ID 9bef7b5d02cb2ea4a154c0f7d78005ee75af03e4 # Parent ae33a271b1032e9f63500eb5e75f42e9ded96864 commit https://github.com/vim/vim/commit/9992237a3e791fbc0c1ebf743ece1b75e1488410 Author: Bram Moolenaar Date: Sat Aug 27 15:26:35 2016 +0200 patch 7.4.2266 Problem: printf() test fails on Windows. "-inf" is not used. Solution: Check for Windows-specific values for "nan". Add sign to "inf" when appropriate. diff --git a/src/message.c b/src/message.c --- a/src/message.c +++ b/src/message.c @@ -4701,6 +4701,7 @@ vim_vsnprintf( char format[40]; int l; int remove_trailing_zeroes = FALSE; + char *s; f = # if defined(FEAT_EVAL) @@ -4730,8 +4731,16 @@ vim_vsnprintf( ) { /* Avoid a buffer overflow */ - strcpy(tmp, "inf"); - str_arg_l = 3; + if (f < 0) + { + strcpy(tmp, "-inf"); + str_arg_l = 4; + } + else + { + strcpy(tmp, "inf"); + str_arg_l = 3; + } } else { @@ -4753,6 +4762,22 @@ vim_vsnprintf( format[l + 1] = NUL; str_arg_l = sprintf(tmp, format, f); + /* Be consistent: Change "1.#IND" to "nan" and + * "1.#INF" to "inf". */ + s = *tmp == '-' ? tmp + 1 : tmp; + if (STRNCMP(s, "1.#INF", 6) == 0) + STRCPY(s, "inf"); + else if (STRNCMP(s, "1.#IND", 6) == 0) + STRCPY(s, "nan"); + + /* Remove sign before "nan". */ + if (STRNCMP(tmp, "-nan", 4) == 0) + STRCPY(tmp, "nan"); + + /* Add sign before "inf" if needed. */ + if (isinf(f) == -1 && STRNCMP(tmp, "inf", 3) == 0) + STRCPY(tmp, "-inf"); + if (remove_trailing_zeroes) { int i; diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -204,12 +204,10 @@ function Test_printf_float() call assert_equal('inf', printf('%f', 1.0/0.0)) - " This prints inf but shouldn't it print -inf instead? - call assert_match('^-\?inf$', printf('%f', -1.0/0.0)) + call assert_match('^-inf$', printf('%f', -1.0/0.0)) - " This prints -nan but shouldn't it print nan instead? - call assert_match('^-\?nan$', printf('%f', sqrt(-1.0))) - call assert_match('^-\?nan$', printf('%f', 0.0/0.0)) + call assert_match('^nan$', printf('%f', sqrt(-1.0))) + call assert_match('^nan$', printf('%f', 0.0/0.0)) call assert_fails('echo printf("%f", "a")', 'E807:') endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2266, +/**/ 2265, /**/ 2264,