diff --git a/src/autocmd.c b/src/autocmd.c
index d6945f3..937e741 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -763,7 +763,7 @@
     save_ei = vim_strsave(p_ei);
     if (save_ei != NULL)
     {
-	new_ei = vim_strnsave(p_ei, (int)(STRLEN(p_ei) + STRLEN(what)));
+	new_ei = vim_strnsave(p_ei, STRLEN(p_ei) + STRLEN(what));
 	if (new_ei != NULL)
 	{
 	    if (*what == ',' && *p_ei == NUL)
@@ -991,7 +991,7 @@
 	;
     if (p > arg)
     {
-	group_name = vim_strnsave(arg, (int)(p - arg));
+	group_name = vim_strnsave(arg, p - arg);
 	if (group_name == NULL)		// out of memory
 	    return AUGROUP_ERROR;
 	group = au_find_group(group_name);
diff --git a/src/channel.c b/src/channel.c
index d11b148..740329f 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -2906,7 +2906,7 @@
 	    {
 		// Copy the message into allocated memory (excluding the NL)
 		// and remove it from the buffer (including the NL).
-		msg = vim_strnsave(buf, (int)(nl - buf));
+		msg = vim_strnsave(buf, nl - buf);
 		channel_consume(channel, part, (int)(nl - buf) + 1);
 	    }
 	}
@@ -3703,7 +3703,7 @@
 	{
 	    // Copy the message into allocated memory and remove it from the
 	    // buffer.
-	    msg = vim_strnsave(buf, (int)(nl - buf));
+	    msg = vim_strnsave(buf, nl - buf);
 	    channel_consume(channel, part, (int)(nl - buf) + 1);
 	}
     }
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index f84bf7a..1e33987 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -2555,7 +2555,7 @@
 	{
 	    if (ga_grow(&ga, 1) == FAIL)
 		break;
-	    ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, (int)(e - s));
+	    ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, e - s);
 	    ++ga.ga_len;
 	}
 
diff --git a/src/dict.c b/src/dict.c
index 3824f40..9d94261 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -779,7 +779,7 @@
     for (p = *arg; ASCII_ISALNUM(*p) || *p == '_' || *p == '-'; ++p)
 	;
     tv->v_type = VAR_STRING;
-    tv->vval.v_string = vim_strnsave(*arg, (int)(p - *arg));
+    tv->vval.v_string = vim_strnsave(*arg, p - *arg);
 
     *arg = skipwhite(p);
     return OK;
diff --git a/src/diff.c b/src/diff.c
index 88dc8a6..1b0ad47 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1301,7 +1301,7 @@
 	if (curbuf->b_fname != NULL)
 	{
 	    newname = vim_strnsave(curbuf->b_fname,
-					  (int)(STRLEN(curbuf->b_fname) + 4));
+						  STRLEN(curbuf->b_fname) + 4);
 	    if (newname != NULL)
 		STRCAT(newname, ".new");
 	}
diff --git a/src/digraph.c b/src/digraph.c
index dd5920a..d4175d5 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -2387,10 +2387,10 @@
 	{
 	    kp = (kmap_T *)curbuf->b_kmap_ga.ga_data + curbuf->b_kmap_ga.ga_len;
 	    s = skiptowhite(p);
-	    kp->from = vim_strnsave(p, (int)(s - p));
+	    kp->from = vim_strnsave(p, s - p);
 	    p = skipwhite(s);
 	    s = skiptowhite(p);
-	    kp->to = vim_strnsave(p, (int)(s - p));
+	    kp->to = vim_strnsave(p, s - p);
 
 	    if (kp->from == NULL || kp->to == NULL
 		    || STRLEN(kp->from) + STRLEN(kp->to) >= KMAP_LLEN
diff --git a/src/eval.c b/src/eval.c
index b184264..6ca3628 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3139,7 +3139,7 @@
 		    if (n1 >= len || n2 < 0 || n1 > n2)
 			s = NULL;
 		    else
-			s = vim_strnsave(s + n1, (int)(n2 - n1 + 1));
+			s = vim_strnsave(s + n1, n2 - n1 + 1);
 		}
 		else
 		{
diff --git a/src/evalfunc.c b/src/evalfunc.c
index cdc806d..4414509 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5521,7 +5521,7 @@
 
 		vim_free(li1->li_tv.vval.v_string);
 		li1->li_tv.vval.v_string = vim_strnsave(regmatch.startp[0],
-				(int)(regmatch.endp[0] - regmatch.startp[0]));
+					regmatch.endp[0] - regmatch.startp[0]);
 		li3->li_tv.vval.v_number =
 				      (varnumber_T)(regmatch.startp[0] - expr);
 		li4->li_tv.vval.v_number =
@@ -5556,7 +5556,7 @@
 		    copy_tv(&li->li_tv, rettv);
 		else
 		    rettv->vval.v_string = vim_strnsave(regmatch.startp[0],
-				(int)(regmatch.endp[0] - regmatch.startp[0]));
+					regmatch.endp[0] - regmatch.startp[0]);
 	    }
 	    else if (l != NULL)
 		rettv->vval.v_number = idx;
@@ -8861,7 +8861,7 @@
 	    }
 	}
     }
-    rettv->vval.v_string = vim_strnsave(head, (int)(tail - head));
+    rettv->vval.v_string = vim_strnsave(head, tail - head);
 }
 
 #ifdef FEAT_FLOAT
diff --git a/src/highlight.c b/src/highlight.c
index 6291f24..5d123ac 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -906,7 +906,7 @@
 	while (*linep && !VIM_ISWHITE(*linep) && *linep != '=')
 	    ++linep;
 	vim_free(key);
-	key = vim_strnsave_up(key_start, (int)(linep - key_start));
+	key = vim_strnsave_up(key_start, linep - key_start);
 	if (key == NULL)
 	{
 	    error = TRUE;
diff --git a/src/misc2.c b/src/misc2.c
index 02fd418..41b9f71 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1291,7 +1291,7 @@
  * shorter.
  */
     char_u *
-vim_strnsave(char_u *string, int len)
+vim_strnsave(char_u *string, size_t len)
 {
     char_u	*p;
 
@@ -1538,7 +1538,7 @@
  * This uses ASCII lower-to-upper case translation, language independent.
  */
     char_u *
-vim_strnsave_up(char_u *string, int len)
+vim_strnsave_up(char_u *string, size_t len)
 {
     char_u *p1;
 
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 44f22f2..3477452 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -32,14 +32,14 @@
 void do_outofmem_msg(size_t size);
 void free_all_mem(void);
 char_u *vim_strsave(char_u *string);
-char_u *vim_strnsave(char_u *string, int len);
+char_u *vim_strnsave(char_u *string, size_t len);
 char_u *vim_memsave(char_u *p, size_t len);
 char_u *vim_strsave_escaped(char_u *string, char_u *esc_chars);
 char_u *vim_strsave_escaped_ext(char_u *string, char_u *esc_chars, int cc, int bsl);
 int csh_like_shell(void);
 char_u *vim_strsave_shellescape(char_u *string, int do_special, int do_newline);
 char_u *vim_strsave_up(char_u *string);
-char_u *vim_strnsave_up(char_u *string, int len);
+char_u *vim_strnsave_up(char_u *string, size_t len);
 void vim_strup(char_u *p);
 char_u *strup_save(char_u *orig);
 char_u *strlow_save(char_u *orig);
diff --git a/src/syntax.c b/src/syntax.c
index f2f74a1..5c9dd0b 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -5097,7 +5097,7 @@
 	while (*key_end && !VIM_ISWHITE(*key_end) && *key_end != '=')
 	    ++key_end;
 	vim_free(key);
-	key = vim_strnsave_up(rest, (int)(key_end - rest));
+	key = vim_strnsave_up(rest, key_end - rest);
 	if (key == NULL)			// out of memory
 	{
 	    rest = NULL;
@@ -5762,7 +5762,7 @@
 	arg_end = skiptowhite(arg_start);
 	next_arg = skipwhite(arg_end);
 	vim_free(key);
-	key = vim_strnsave_up(arg_start, (int)(arg_end - arg_start));
+	key = vim_strnsave_up(arg_start, arg_end - arg_start);
 	if (STRCMP(key, "CCOMMENT") == 0)
 	{
 	    if (!eap->skip)
diff --git a/src/version.c b/src/version.c
index 32264ca..3eb845c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    928,
+/**/
     927,
 /**/
     926,
