summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-07-12 21:11:33 +0200
committerBram Moolenaar <Bram@vim.org>2016-07-12 21:11:33 +0200
commit38ee6b041e73ad31c3b6b99d56d20833b59b2b57 (patch)
treee53ca4b85111a162ad9a68280c761d6226e7395b
parent5498a41f5a62c3877fee0185adf3bf7245a9a547 (diff)
downloadvim-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.c9
-rw-r--r--src/testdir/test_expr.vim6
-rw-r--r--src/version.c2
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,