Mercurial > vim
changeset 9986:9bef7b5d02cb v7.4.2266
commit https://github.com/vim/vim/commit/9992237a3e791fbc0c1ebf743ece1b75e1488410
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 27 Aug 2016 15:30:07 +0200 |
parents | ae33a271b103 |
children | 9d784e918d4d |
files | src/message.c src/testdir/test_expr.vim src/version.c |
diffstat | 3 files changed, 32 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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