diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-07-12 21:11:33 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-07-12 21:11:33 +0200 |
commit | 38ee6b041e73ad31c3b6b99d56d20833b59b2b57 (patch) | |
tree | e53ca4b85111a162ad9a68280c761d6226e7395b | |
parent | 5498a41f5a62c3877fee0185adf3bf7245a9a547 (diff) | |
download | vim-git-38ee6b041e73ad31c3b6b99d56d20833b59b2b57.tar.gz |
patch 7.4.2029v7.4.2029
Problem: printf() does not work with 64 bit numbers.
Solution: use the "L" length modifier. (Ken Takata)
-rw-r--r-- | src/message.c | 9 | ||||
-rw-r--r-- | src/testdir/test_expr.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/message.c b/src/message.c index 7bb154d2e..954152850 100644 --- a/src/message.c +++ b/src/message.c @@ -4198,6 +4198,15 @@ vim_vsnprintf( default: break; } +# if defined(FEAT_EVAL) && defined(FEAT_NUM64) + switch (fmt_spec) + { + case 'd': case 'u': case 'o': case 'x': case 'X': + if (tvs != NULL && length_modifier == '\0') + length_modifier = 'L'; + } +# endif + /* get parameter value, do initial processing */ switch (fmt_spec) { diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index 067dbf24f..86c86c58d 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -129,3 +129,9 @@ func Test_option_value() call assert_equal("abcdefgi", &cpo) set cpo&vim endfunc + +function Test_printf_64bit() + if has('num64') + call assert_equal("123456789012345", printf('%d', 123456789012345)) + endif +endfunc diff --git a/src/version.c b/src/version.c index 6d75f76f1..301b406d2 100644 --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2029, +/**/ 2028, /**/ 2027, |