updated for version 7.0b02
diff --git a/src/eval.c b/src/eval.c
index e80407e..63abcba 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -8964,42 +8964,54 @@
     char_u	pathbuf[NUMBUFLEN];
     int		count = 1;
     int		first = TRUE;
+    int		error = FALSE;
+#endif
 
+    rettv->vval.v_string = NULL;
+    rettv->v_type = VAR_STRING;
+
+#ifdef FEAT_SEARCHPATH
     fname = get_tv_string(&argvars[0]);
 
     if (argvars[1].v_type != VAR_UNKNOWN)
     {
 	p = get_tv_string_buf_chk(&argvars[1], pathbuf);
 	if (p == NULL)
-	    count = -1;	    /* error */
+	    error = TRUE;
 	else
 	{
 	    if (*p != NUL)
 		path = p;
 
 	    if (argvars[2].v_type != VAR_UNKNOWN)
-		count = get_tv_number_chk(&argvars[2], NULL); /* -1: error */
+		count = get_tv_number_chk(&argvars[2], &error);
 	}
     }
 
-    if (*fname != NUL && count >= 0)
+    if (count < 0 && rettv_list_alloc(rettv) == FAIL)
+	error = TRUE;
+
+    if (*fname != NUL && !error)
     {
 	do
 	{
-	    vim_free(fresult);
+	    if (rettv->v_type == VAR_STRING)
+		vim_free(fresult);
 	    fresult = find_file_in_path_option(first ? fname : NULL,
 					       first ? (int)STRLEN(fname) : 0,
 					0, first, path, dir, NULL,
 					dir ? (char_u *)"" : curbuf->b_p_sua);
 	    first = FALSE;
-	} while (--count > 0 && fresult != NULL);
+
+	    if (fresult != NULL && rettv->v_type == VAR_LIST)
+		list_append_string(rettv->vval.v_list, fresult, -1);
+
+	} while ((rettv->v_type == VAR_LIST || --count > 0) && fresult != NULL);
     }
 
-    rettv->vval.v_string = fresult;
-#else
-    rettv->vval.v_string = NULL;
+    if (rettv->v_type == VAR_STRING)
+	rettv->vval.v_string = fresult;
 #endif
-    rettv->v_type = VAR_STRING;
 }
 
 static void filter_map __ARGS((typval_T *argvars, typval_T *rettv, int map));
@@ -18673,8 +18685,9 @@
     else if (lead > 0)
     {
 	lead = 3;
-	if (eval_fname_sid(*pp))	/* If it's "<SID>" */
+	if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
 	{
+	    /* It's "s:" or "<SID>" */
 	    if (current_SID <= 0)
 	    {
 		EMSG(_(e_usingsid));