x = TRUE;
if (name[5] == '-'
&& STRLEN(name) >= 11
- && vim_isdigit(name[6])
- && vim_isdigit(name[8])
- && vim_isdigit(name[10]))
+ && (name[6] >= '1' && name[6] <= '9'))
{
- int major = atoi((char *)name + 6);
- int minor = atoi((char *)name + 8);
-
- // Expect "patch-9.9.01234".
- n = (major < VIM_VERSION_MAJOR
- || (major == VIM_VERSION_MAJOR
- && (minor < VIM_VERSION_MINOR
- || (minor == VIM_VERSION_MINOR
- && has_patch(atoi((char *)name + 10))))));
+ char *end;
+ int major, minor;
+
+ // This works for patch-8.1.2, patch-9.0.3, patch-10.0.4, etc.
+ // Not for patch-9.10.5.
+ major = (int)strtoul((char *)name + 6, &end, 10);
+ if (*end == '.' && vim_isdigit(end[1])
+ && end[2] == '.' && vim_isdigit(end[3]))
+ {
+ minor = atoi(end + 1);
+
+ // Expect "patch-9.9.01234".
+ n = (major < VIM_VERSION_MAJOR
+ || (major == VIM_VERSION_MAJOR
+ && (minor < VIM_VERSION_MINOR
+ || (minor == VIM_VERSION_MINOR
+ && has_patch(atoi(end + 3))))));
+ }
}
else if (isdigit(name[5]))
n = has_patch(atoi((char *)name + 5));
call assert_true(has('patch-6.9.999'))
call assert_true(has('patch-7.1.999'))
call assert_true(has('patch-7.4.123'))
+ call assert_true(has('patch-7.4.123 ')) " Traling space can be allowed.
call assert_false(has('patch-7'))
call assert_false(has('patch-7.4'))
call assert_false(has('patch-7.4.'))
call assert_false(has('patch-9.1.0'))
call assert_false(has('patch-9.9.1'))
+
call assert_false(has('patch-abc'))
+ call assert_false(has('patchabc'))
+
+ call assert_false(has('patch-8x001'))
+ call assert_false(has('patch-9X0X0'))
+ call assert_false(has('patch-9-0-0'))
+ call assert_false(has('patch-09.0.0'))
+ call assert_false(has('patch-9.00.0'))
endfunc
func Test_op_ternary()