diff options
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/eval.c b/src/eval.c index 4e6c7b6a52..756c5fe75a 100644 --- a/src/eval.c +++ b/src/eval.c @@ -7341,19 +7341,22 @@ f_strridx(argvars, retvar) needle = get_var_string(&argvars[1]); haystack = get_var_string_buf(&argvars[0], buf); - rest = haystack; - while (*haystack != '\0') - { - rest = (char_u *)strstr((char *)rest, (char *)needle); - if (rest == NULL) - break; - lastmatch = rest++; - } + if (*needle == NUL) + /* Empty string matches past the end. */ + lastmatch = haystack + STRLEN(haystack); + else + for (rest = haystack; *rest != '\0'; ++rest) + { + rest = (char_u *)strstr((char *)rest, (char *)needle); + if (rest == NULL) + break; + lastmatch = rest; + } if (lastmatch == NULL) retvar->var_val.var_number = -1; else - retvar->var_val.var_number = (varnumber_T) (lastmatch - haystack); + retvar->var_val.var_number = (varnumber_T)(lastmatch - haystack); } /* |