diff src/eval.c @ 22:cc049b00ee70

updated for version 7.0014
author vimboss
date Thu, 02 Sep 2004 19:12:26 +0000
parents db5102f7e29f
children 8ff7fd162d3c
line wrap: on
line diff
--- 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);
 }
 
 /*