diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-27 15:26:35 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-27 15:26:35 +0200 |
commit | 9992237a3e791fbc0c1ebf743ece1b75e1488410 (patch) | |
tree | 1016f2132eb5318b0136ce8ad71921177322a5fb | |
parent | 76efafba2af36ae5f6c7b79b56c537fcbcdb386c (diff) | |
download | vim-git-9992237a3e791fbc0c1ebf743ece1b75e1488410.tar.gz |
patch 7.4.2266v7.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.
-rw-r--r-- | src/message.c | 29 | ||||
-rw-r--r-- | src/testdir/test_expr.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 32 insertions, 7 deletions
diff --git a/src/message.c b/src/message.c index 0d1043137..2824b5bbb 100644 --- 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 index 49d6c3a37..6f1de59c9 100644 --- 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 index 0f5e7ed74..93976c37d 100644 --- 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, |