patch 9.1.0783: 'spell' option setting has problems

Problem:  'spell' option setting has problems
Solution: correctly check for comma for 'spellfile' option,
          remove unnecessary checks, refactor slightly (Milly)

closes: #15873

Signed-off-by: Milly <milly.ca@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/spell.c b/src/spell.c
index 909d426..5a7720f 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -2250,7 +2250,7 @@
 	else
 	{
 	    // One entry in 'spellfile'.
-	    copy_option_part(&spf, spf_name, MAXPATHL - 5, ",");
+	    copy_option_part(&spf, spf_name, MAXPATHL - 4, ",");
 	    STRCAT(spf_name, ".spl");
 
 	    // If it was already found above then skip it.
@@ -4441,11 +4441,22 @@
     int
 valid_spellfile(char_u *val)
 {
-    char_u *s;
+    char_u	spf_name[MAXPATHL];
+    char_u	*spf;
+    char_u	*s;
+    int		l;
 
-    for (s = val; *s != NUL; ++s)
-	if (!vim_is_fname_char(*s))
+    spf = val;
+    while (*spf != NUL)
+    {
+	l = copy_option_part(&spf, spf_name, MAXPATHL, ",");
+	if (l >= MAXPATHL - 4 || l < 4
+				  || STRCMP(spf_name + l - 4, ".add") != 0)
 	    return FALSE;
+	for (s = spf_name; *s != NUL; ++s)
+	    if (!vim_is_fname_char(*s))
+		return FALSE;
+    }
     return TRUE;
 }
 
@@ -4454,22 +4465,10 @@
  * Return an error message or NULL for success.
  */
     char *
-did_set_spell_option(int is_spellfile)
+did_set_spell_option(void)
 {
     char    *errmsg = NULL;
     win_T   *wp;
-    int	    l;
-
-    if (is_spellfile)
-    {
-	l = (int)STRLEN(curwin->w_s->b_p_spf);
-	if (l > 0 && (l < 4
-			|| STRCMP(curwin->w_s->b_p_spf + l - 4, ".add") != 0))
-	    errmsg = e_invalid_argument;
-    }
-
-    if (errmsg != NULL)
-	return errmsg;
 
     FOR_ALL_WINDOWS(wp)
 	if (wp->w_buffer == curbuf && wp->w_p_spell)