patch 8.0.0794: checking translations fails with multiple NL

Problem:    The script to check translations fails if there is more than one
            NL in one line.
Solution:   Count the number of NL characters.  Make count() accept a string.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 33307e5..30006e3 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -2314,8 +2314,45 @@
 {
     long	n = 0;
     int		ic = FALSE;
+    int		error = FALSE;
 
-    if (argvars[0].v_type == VAR_LIST)
+    if (argvars[2].v_type != VAR_UNKNOWN)
+	ic = (int)get_tv_number_chk(&argvars[2], &error);
+
+    if (argvars[0].v_type == VAR_STRING)
+    {
+	char_u *expr = get_tv_string_chk(&argvars[1]);
+	char_u *p = argvars[0].vval.v_string;
+	char_u *next;
+
+	if (!error && expr != NULL && p != NULL)
+	{
+	    if (ic)
+	    {
+		size_t len = STRLEN(expr);
+
+		while (*p != NUL)
+		{
+		    if (MB_STRNICMP(p, expr, len) == 0)
+		    {
+			++n;
+			p += len;
+		    }
+		    else
+			MB_PTR_ADV(p);
+		}
+	    }
+	    else
+		while ((next = (char_u *)strstr((char *)p, (char *)expr))
+								       != NULL)
+		{
+		    ++n;
+		    p = next + STRLEN(expr);
+		}
+	}
+
+    }
+    else if (argvars[0].v_type == VAR_LIST)
     {
 	listitem_T	*li;
 	list_T		*l;
@@ -2326,9 +2363,6 @@
 	    li = l->lv_first;
 	    if (argvars[2].v_type != VAR_UNKNOWN)
 	    {
-		int error = FALSE;
-
-		ic = (int)get_tv_number_chk(&argvars[2], &error);
 		if (argvars[3].v_type != VAR_UNKNOWN)
 		{
 		    idx = (long)get_tv_number_chk(&argvars[3], &error);
@@ -2356,11 +2390,8 @@
 
 	if ((d = argvars[0].vval.v_dict) != NULL)
 	{
-	    int error = FALSE;
-
 	    if (argvars[2].v_type != VAR_UNKNOWN)
 	    {
-		ic = (int)get_tv_number_chk(&argvars[2], &error);
 		if (argvars[3].v_type != VAR_UNKNOWN)
 		    EMSG(_(e_invarg));
 	    }
diff --git a/src/po/check.vim b/src/po/check.vim
index ba98ae7..3bcbef3 100644
--- a/src/po/check.vim
+++ b/src/po/check.vim
@@ -114,14 +114,12 @@
 func! CountNl(first, last)
   let nl = 0
   for lnum in range(a:first, a:last)
-    if getline(lnum) =~ '\\n'
-      let nl += 1
-    endif
+    let nl += count(getline(lnum), "\n")
   endfor
   return nl
 endfunc
 
-" Check that the \n at the end of the msid line is also present in the msgstr
+" Check that the \n at the end of the msgid line is also present in the msgstr
 " line.  Skip over the header.
 /^"MIME-Version:
 while 1
@@ -138,7 +136,7 @@
   let transcount = CountNl(strlnum, end - 1)
   " Allow for a few more or less line breaks when there are 2 or more
   if origcount != transcount && (origcount <= 2 || transcount <= 2)
-    echomsg 'Mismatching "\\n" in line ' . line('.')
+    echomsg 'Mismatching "\n" in line ' . line('.')
     if error == 0
       let error = lnum
     endif
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index f0f656a..ac47ea1 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -635,7 +635,13 @@
   call assert_equal(0, count(d, 'c', 1))
 
   call assert_fails('call count(d, "a", 0, 1)', 'E474:')
-  call assert_fails('call count("a", "a")', 'E712:')
+
+  call assert_equal(0, count("foo", "bar"))
+  call assert_equal(1, count("foo", "oo"))
+  call assert_equal(2, count("foo", "o"))
+  call assert_equal(0, count("foo", "O"))
+  call assert_equal(2, count("foo", "O", 1))
+  call assert_equal(2, count("fooooo", "oo"))
 endfunc
 
 func Test_changenr()
diff --git a/src/version.c b/src/version.c
index 5fc0dbf..312ec4e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    794,
+/**/
     793,
 /**/
     792,