patch 8.0.0222: blockwise put on multi-byte character misplaced

Problem:    When a multi-byte character ends in a zero byte, putting blockwise
            text puts it before the character instead of after it.
Solution:   Use int instead of char for the character under the cursor.
            (Luchr, closes #1403)  Add a test.
diff --git a/src/Makefile b/src/Makefile
index 0dcf109..8de7104 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2150,6 +2150,7 @@
 	test_perl \
 	test_popup \
 	test_profile \
+	test_put \
 	test_quickfix \
 	test_regexp_latin \
 	test_regexp_utf8 \
diff --git a/src/ops.c b/src/ops.c
index 0853fd0..4d01ef1 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3550,7 +3550,7 @@
      */
     if (y_type == MBLOCK)
     {
-	char	c = gchar_cursor();
+	int	c = gchar_cursor();
 	colnr_T	endcol2 = 0;
 
 	if (dir == FORWARD && c != NUL)
diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim
index 9a7c35d..2b163ae 100644
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -31,6 +31,7 @@
 source test_messages.vim
 source test_partial.vim
 source test_popup.vim
+source test_put.vim
 source test_reltime.vim
 source test_searchpos.vim
 source test_set.vim
diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim
new file mode 100644
index 0000000..612bdab
--- /dev/null
+++ b/src/testdir/test_put.vim
@@ -0,0 +1,12 @@
+
+func Test_put_block()
+  if !has('multi_byte')
+    return
+  endif
+  new
+  call feedkeys("i\<C-V>u2500\<CR>x\<ESC>", 'x')
+  call feedkeys("\<C-V>y", 'x')
+  call feedkeys("gg0p", 'x')
+  call assert_equal("\u2500x", getline(1))
+  bwipe!
+endfunc
diff --git a/src/version.c b/src/version.c
index 5cca034..cae4e7d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    222,
+/**/
     221,
 /**/
     220,