summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-09-15 14:49:52 +0200
committerBram Moolenaar <Bram@vim.org>2019-09-15 14:49:52 +0200
commit1ac90b4fa63414d56750559506a3e076df6923b0 (patch)
treea95e4a66febbb0220585748a969fdff10331c2b0
parent60a8de28d11595f4df0419ece8afa7d6accc9fbd (diff)
downloadvim-git-1ac90b4fa63414d56750559506a3e076df6923b0.tar.gz
patch 8.1.2036: the str2nr() tests failv8.1.2036
Problem: The str2nr() tests fail. Solution: Add missing part of patch.
-rw-r--r--src/charset.c35
-rw-r--r--src/version.c2
2 files changed, 34 insertions, 3 deletions
diff --git a/src/charset.c b/src/charset.c
index d47ccfd69..09e78203f 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1773,6 +1773,7 @@ vim_isblankline(char_u *lbuf)
* If "what" contains STR2NR_OCT recognize octal numbers
* If "what" contains STR2NR_HEX recognize hex numbers
* If "what" contains STR2NR_FORCE always assume bin/oct/hex.
+ * If "what" contains STR2NR_QUOTE ignore embedded single quotes
* If maxlen > 0, check at a maximum maxlen chars.
* If strict is TRUE, check the number strictly. return *len = 0 if fail.
*/
@@ -1841,7 +1842,8 @@ vim_str2nr(
// Do the conversion manually to avoid sscanf() quirks.
n = 1;
- if (pre == 'B' || pre == 'b' || what == STR2NR_BIN + STR2NR_FORCE)
+ if (pre == 'B' || pre == 'b'
+ || ((what & STR2NR_BIN) && (what & STR2NR_FORCE)))
{
/* bin */
if (pre != 0)
@@ -1856,9 +1858,16 @@ vim_str2nr(
++ptr;
if (n++ == maxlen)
break;
+ if ((what & STR2NR_QUOTE) && *ptr == '\''
+ && '0' <= ptr[1] && ptr[1] <= '1')
+ {
+ ++ptr;
+ if (n++ == maxlen)
+ break;
+ }
}
}
- else if (pre == '0' || what == STR2NR_OCT + STR2NR_FORCE)
+ else if (pre == '0' || ((what & STR2NR_OCT) && (what & STR2NR_FORCE)))
{
/* octal */
while ('0' <= *ptr && *ptr <= '7')
@@ -1871,9 +1880,16 @@ vim_str2nr(
++ptr;
if (n++ == maxlen)
break;
+ if ((what & STR2NR_QUOTE) && *ptr == '\''
+ && '0' <= ptr[1] && ptr[1] <= '7')
+ {
+ ++ptr;
+ if (n++ == maxlen)
+ break;
+ }
}
}
- else if (pre != 0 || what == STR2NR_HEX + STR2NR_FORCE)
+ else if (pre != 0 || ((what & STR2NR_HEX) && (what & STR2NR_FORCE)))
{
/* hex */
if (pre != 0)
@@ -1888,6 +1904,12 @@ vim_str2nr(
++ptr;
if (n++ == maxlen)
break;
+ if ((what & STR2NR_QUOTE) && *ptr == '\'' && vim_isxdigit(ptr[1]))
+ {
+ ++ptr;
+ if (n++ == maxlen)
+ break;
+ }
}
}
else
@@ -1906,8 +1928,15 @@ vim_str2nr(
++ptr;
if (n++ == maxlen)
break;
+ if ((what & STR2NR_QUOTE) && *ptr == '\'' && VIM_ISDIGIT(ptr[1]))
+ {
+ ++ptr;
+ if (n++ == maxlen)
+ break;
+ }
}
}
+
// Check for an alpha-numeric character immediately following, that is
// most likely a typo.
if (strict && n - 1 != maxlen && ASCII_ISALNUM(*ptr))
diff --git a/src/version.c b/src/version.c
index 09baa5324..b258eea0e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2036,
+/**/
2035,
/**/
2034,