patch 7.4.822
Problem:    More problems reported by coverity.
Solution:   Avoid the warnings. (Christian Brabandt)
diff --git a/src/eval.c b/src/eval.c
index 9de2764..1b2d77e 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6736,7 +6736,7 @@
 	len = (int)STRLEN(s);
 	sumlen += len;
 
-	ga_grow(join_gap, 1);
+	(void)ga_grow(join_gap, 1);
 	p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
 	if (tofree != NULL || s != numbuf)
 	{
@@ -19590,7 +19590,7 @@
 		    goto error;
 	    }
 
-	    ga_grow(&ga, cplen);
+	    (void)ga_grow(&ga, cplen);
 	    mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
 	    ga.ga_len += cplen;
 
@@ -19610,7 +19610,7 @@
     }
 
     /* add a terminating NUL */
-    ga_grow(&ga, 1);
+    (void)ga_grow(&ga, 1);
     ga_append(&ga, NUL);
 
     rettv->vval.v_string = ga.ga_data;
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 637c8a0..4650a4e 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -6856,7 +6856,8 @@
 	/*
 	 * Sort the tags.
 	 */
-	sort_strings((char_u **)ga.ga_data, ga.ga_len);
+	if (ga.ga_data != NULL)
+	    sort_strings((char_u **)ga.ga_data, ga.ga_len);
 
 	/*
 	 * Check for duplicates.
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 2763b69..eefd5d2 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3051,7 +3051,7 @@
     {
 	int fdflags = fcntl(fd_tmp, F_GETFD);
 	if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
-	    fcntl(fd_tmp, F_SETFD, fdflags | FD_CLOEXEC);
+	    (void)fcntl(fd_tmp, F_SETFD, fdflags | FD_CLOEXEC);
     }
 # endif
 
@@ -3841,7 +3841,7 @@
     {
 	/* Grow the array before starting the timer, so that the time spent
 	 * here isn't counted. */
-	ga_grow(&si->sn_prl_ga, (int)(sourcing_lnum - si->sn_prl_ga.ga_len));
+	(void)ga_grow(&si->sn_prl_ga, (int)(sourcing_lnum - si->sn_prl_ga.ga_len));
 	si->sn_prl_idx = sourcing_lnum - 1;
 	while (si->sn_prl_ga.ga_len <= si->sn_prl_idx
 		&& si->sn_prl_ga.ga_len < si->sn_prl_ga.ga_maxlen)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index d7700c8..5d7ea20 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -2312,7 +2312,7 @@
 add_indent:
 		while (get_indent_str(p, 8, FALSE) < indent)
 		{
-		    ga_grow(&line_ga, 2);  /* one more for the NUL */
+		    (void)ga_grow(&line_ga, 2);  /* one more for the NUL */
 		    p = (char_u *)line_ga.ga_data;
 		    s = skipwhite(p);
 		    mch_memmove(s + 1, s, line_ga.ga_len - (s - p) + 1);
diff --git a/src/fold.c b/src/fold.c
index 21e455b..b074857 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -2446,7 +2446,7 @@
     if (getlevel == foldlevelMarker && flp->start <= flp->lvl - level
 							      && flp->lvl > 0)
     {
-	foldFind(gap, startlnum - 1, &fp);
+	(void)foldFind(gap, startlnum - 1, &fp);
 	if (fp >= ((fold_T *)gap->ga_data) + gap->ga_len
 						   || fp->fd_top >= startlnum)
 	    fp = NULL;
@@ -2508,7 +2508,7 @@
 	    }
 	    if (lvl < level + i)
 	    {
-		foldFind(&fp->fd_nested, flp->lnum - fp->fd_top, &fp2);
+		(void)foldFind(&fp->fd_nested, flp->lnum - fp->fd_top, &fp2);
 		if (fp2 != NULL)
 		    bot = fp2->fd_top + fp2->fd_len - 1 + fp->fd_top;
 	    }
diff --git a/src/gui.c b/src/gui.c
index 5516d96..fc2981c 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1575,7 +1575,7 @@
     base_height = gui_get_base_height();
     if (fit_to_display)
 	/* Remember the original window position. */
-	gui_mch_get_winpos(&x, &y);
+	(void)gui_mch_get_winpos(&x, &y);
 
 #ifdef USE_SUN_WORKSHOP
     if (!mustset && usingSunWorkShop
@@ -5366,7 +5366,7 @@
     {
 	/* Search for the next match. */
 	i = msg_scroll;
-	do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
+	(void)do_search(NULL, down ? '/' : '?', ga.ga_data, 1L,
 					      SEARCH_MSG + SEARCH_MARK, NULL);
 	msg_scroll = i;	    /* don't let an error message set msg_scroll */
     }
diff --git a/src/gui_w16.c b/src/gui_w16.c
index b8d1e0e..a0a3996 100644
--- a/src/gui_w16.c
+++ b/src/gui_w16.c
@@ -282,7 +282,7 @@
 	    result = MyWindowProc(hwnd, uMsg, wParam, lParam);
 	    if (result == HTCLIENT)
 	    {
-		gui_mch_get_winpos(&x, &y);
+		(void)gui_mch_get_winpos(&x, &y);
 		xPos -= x;
 
 		if (xPos < 48) /*<VN> TODO should use system metric?*/
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 4fbf70e..bf8f122 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -17,7 +17,7 @@
  * scrollbars, etc.
  *
  * Note: Clipboard stuff, for cutting and pasting text to other windows, is in
- * os_win32.c.	(It can also be done from the terminal version).
+ * winclip.c.	(It can also be done from the terminal version).
  *
  * TODO: Some of the function signatures ought to be updated for Win64;
  * e.g., replace LONG with LONG_PTR, etc.
@@ -76,7 +76,7 @@
 	char_u  name[128];
 	char_u  value[128];
 
-	copy_option_part(&p, item, sizeof(item), ","); 
+	copy_option_part(&p, item, sizeof(item), ",");
 	if (p == NULL)
 	    break;
 	q = &item[0];
@@ -1227,7 +1227,7 @@
 			return result;
 		}
 #endif
-		gui_mch_get_winpos(&x, &y);
+		(void)gui_mch_get_winpos(&x, &y);
 		xPos -= x;
 
 		if (xPos < 48) /* <VN> TODO should use system metric? */
diff --git a/src/if_cscope.c b/src/if_cscope.c
index 2b4ba08..4c3e2bd 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -1076,8 +1076,8 @@
 /*
  * PRIVATE: cs_find
  *
- * query cscope using command line interface.  parse the output and use tselect
- * to allow choices.  like Nvi, creates a pipe to send to/from query/cscope.
+ * Query cscope using command line interface.  Parse the output and use tselect
+ * to allow choices.  Like Nvi, creates a pipe to send to/from query/cscope.
  *
  * returns TRUE if we jump to a tag or abort, FALSE if not.
  */
@@ -1214,7 +1214,10 @@
 
     nummatches = (int *)alloc(sizeof(int)*csinfo_size);
     if (nummatches == NULL)
+    {
+	vim_free(cmd);
 	return FALSE;
+    }
 
     /* Send query to all open connections, then count the total number
      * of matches so we can alloc all in one swell foop. */
@@ -1289,7 +1292,7 @@
 # ifdef FEAT_WINDOWS
 		if (postponed_split != 0)
 		{
-		    win_split(postponed_split > 0 ? postponed_split : 0,
+		    (void)win_split(postponed_split > 0 ? postponed_split : 0,
 						       postponed_split_flags);
 		    RESET_BINDING(curwin);
 		    postponed_split = 0;
@@ -2085,6 +2088,8 @@
 
     strcpy(tbuf, matches[0]);
     ptag = strtok(tbuf, "\t");
+    if (ptag == NULL)
+	return;
 
     newsize = (int)(strlen(cstag_msg) + strlen(ptag));
     buf = (char *)alloc(newsize);
diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c
index 44526d7..d8c64ad 100644
--- a/src/if_xcmdsrv.c
+++ b/src/if_xcmdsrv.c
@@ -1265,12 +1265,12 @@
 			/* Initialize the result property. */
 			ga_init2(&reply, 1, 100);
 #ifdef FEAT_MBYTE
-			ga_grow(&reply, 50 + STRLEN(p_enc));
+			(void)ga_grow(&reply, 50 + STRLEN(p_enc));
 			sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
 						   0, 0, p_enc, 0, serial, 0);
 			reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
 #else
-			ga_grow(&reply, 50);
+			(void)ga_grow(&reply, 50);
 			sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
 							     0, 0, serial, 0);
 			reply.ga_len = 10 + STRLEN(serial);
@@ -1351,15 +1351,10 @@
 		    continue;
 
 		pcPtr->code = code;
-		if (res != NULL)
-		{
-		    res = serverConvert(enc, res, &tofree);
-		    if (tofree == NULL)
-			res = vim_strsave(res);
-		    pcPtr->result = res;
-		}
-		else
-		    pcPtr->result = vim_strsave((char_u *)"");
+		res = serverConvert(enc, res, &tofree);
+		if (tofree == NULL)
+		    res = vim_strsave(res);
+		pcPtr->result = res;
 		break;
 	    }
 	}
diff --git a/src/move.c b/src/move.c
index 0269412..0242fef 100644
--- a/src/move.c
+++ b/src/move.c
@@ -1512,7 +1512,7 @@
 	--curwin->w_topline;
 #endif
 #ifdef FEAT_FOLDING
-	hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
+	(void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
 #endif
 	--curwin->w_botline;	    /* approximate w_botline */
 	curwin->w_valid &= ~(VALID_WROW|VALID_CROW|VALID_BOTLINE);
diff --git a/src/normal.c b/src/normal.c
index a46cc9d..ae7b83a 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2865,10 +2865,8 @@
 		end_visual.col = leftcol;
 	    else
 		end_visual.col = rightcol;
-	    if (curwin->w_cursor.lnum <
+	    if (curwin->w_cursor.lnum >=
 				    (start_visual.lnum + end_visual.lnum) / 2)
-		end_visual.lnum = end_visual.lnum;
-	    else
 		end_visual.lnum = start_visual.lnum;
 
 	    /* move VIsual to the right column */
@@ -3807,8 +3805,8 @@
 	}
 # ifdef FEAT_FOLDING
 	/* Include closed folds as a whole. */
-	hasFolding(top, &top, NULL);
-	hasFolding(bot, NULL, &bot);
+	(void)hasFolding(top, &top, NULL);
+	(void)hasFolding(bot, NULL, &bot);
 # endif
 	lines = bot - top + 1;
 
@@ -5954,7 +5952,7 @@
 		lnum = curwin->w_topline;
 		while (n-- > 0 && lnum < curwin->w_botline - 1)
 		{
-		    hasFolding(lnum, NULL, &lnum);
+		    (void)hasFolding(lnum, NULL, &lnum);
 		    ++lnum;
 		}
 		n = lnum - curwin->w_topline;
@@ -6254,7 +6252,7 @@
     {
 	/* do autowrite if necessary */
 	if (curbufIsChanged() && curbuf->b_nwindows <= 1 && !P_HID(curbuf))
-	    autowrite(curbuf, FALSE);
+	    (void)autowrite(curbuf, FALSE);
 	setpcmark();
 	(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST,
 				       P_HID(curbuf) ? ECMD_HIDE : 0, curwin);
diff --git a/src/os_unix.c b/src/os_unix.c
index f53faa3..2439c5e 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -7001,7 +7001,7 @@
 	/* Rely on the same mouse code for the duration of this */
 	mouse_code = find_termcode(mouse_name);
 	prev_row = mouse_row;
-	prev_row = mouse_col;
+	prev_col = mouse_col;
 	xterm_trace = 2;
 
 	/* Find the offset of the chars, there might be a scrollbar on the
diff --git a/src/regexp.c b/src/regexp.c
index 45b8071..37d42c7 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -3824,14 +3824,14 @@
 	/* Use an item size of 1 byte, since we push different things
 	 * onto the regstack. */
 	ga_init2(&regstack, 1, REGSTACK_INITIAL);
-	ga_grow(&regstack, REGSTACK_INITIAL);
+	(void)ga_grow(&regstack, REGSTACK_INITIAL);
 	regstack.ga_growsize = REGSTACK_INITIAL * 8;
     }
 
     if (backpos.ga_data == NULL)
     {
 	ga_init2(&backpos, sizeof(backpos_T), BACKPOS_INITIAL);
-	ga_grow(&backpos, BACKPOS_INITIAL);
+	(void)ga_grow(&backpos, BACKPOS_INITIAL);
 	backpos.ga_growsize = BACKPOS_INITIAL * 8;
     }
 
diff --git a/src/syntax.c b/src/syntax.c
index 000d598..e4ae0b1 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6670,7 +6670,7 @@
 	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
 	if (spp->sp_time.count > 0)
 	{
-	    ga_grow(&ga, 1);
+	    (void)ga_grow(&ga, 1);
 	    p = ((time_entry_T *)ga.ga_data) + ga.ga_len;
 	    p->total = spp->sp_time.total;
 	    profile_add(&total_total, &spp->sp_time.total);
diff --git a/src/ui.c b/src/ui.c
index 10ae731..7bbf283 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -2903,7 +2903,7 @@
 		    break;
 		first = FALSE;
 #ifdef FEAT_FOLDING
-		hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
+		(void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL);
 #endif
 #ifdef FEAT_DIFF
 		if (curwin->w_topfill < diff_check(curwin, curwin->w_topline))
diff --git a/src/version.c b/src/version.c
index 09eceab..62eb4ed 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    822,
+/**/
     821,
 /**/
     820,
diff --git a/src/window.c b/src/window.c
index ec286c7..60d9ceb 100644
--- a/src/window.c
+++ b/src/window.c
@@ -141,7 +141,7 @@
 #ifdef FEAT_GUI
 		need_mouse_correct = TRUE;
 #endif
-		win_split((int)Prenum, 0);
+		(void)win_split((int)Prenum, 0);
 		break;
 
 #ifdef FEAT_VERTSPLIT
@@ -159,7 +159,7 @@
 # ifdef FEAT_GUI
 		need_mouse_correct = TRUE;
 # endif
-		win_split((int)Prenum, WSP_VERT);
+		(void)win_split((int)Prenum, WSP_VERT);
 		break;
 #endif
 
@@ -2586,7 +2586,7 @@
 	return;
 
     /* When closing the last window in a tab page remove the tab page. */
-    if (tp == NULL ? firstwin == lastwin : tp->tp_firstwin == tp->tp_lastwin)
+    if (tp->tp_firstwin == tp->tp_lastwin)
     {
 	if (tp == first_tabpage)
 	    first_tabpage = tp->tp_next;