diff --git a/src/channel.c b/src/channel.c
index 793dbaa..aa0a0d3 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1858,7 +1858,7 @@
     {
 	ch_log_lead(lead, channel, part);
 	fprintf(log_fd, "'");
-	ignored = (int)fwrite(buf, len, 1, log_fd);
+	vim_ignored = (int)fwrite(buf, len, 1, log_fd);
 	fprintf(log_fd, "'\n");
     }
     return OK;
@@ -2388,7 +2388,7 @@
 
     u_sync(TRUE);
     /* ignore undo failure, undo is not very useful here */
-    ignored = u_save(lnum - empty, lnum + 1);
+    vim_ignored = u_save(lnum - empty, lnum + 1);
 
     if (empty)
     {
@@ -3730,7 +3730,7 @@
     {
 	ch_log_lead("SEND ", channel, part);
 	fprintf(log_fd, "'");
-	ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
+	vim_ignored = (int)fwrite(buf_arg, len_arg, 1, log_fd);
 	fprintf(log_fd, "'\n");
 	fflush(log_fd);
 	did_log_msg = TRUE;
diff --git a/src/diff.c b/src/diff.c
index 59daf1e..0bf0ef2 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1203,10 +1203,10 @@
     {
 # ifdef TEMPDIRNAMES
 	if (vim_tempdir != NULL)
-	    ignored = mch_chdir((char *)vim_tempdir);
+	    vim_ignored = mch_chdir((char *)vim_tempdir);
 	else
 # endif
-	    ignored = mch_chdir("/tmp");
+	    vim_ignored = mch_chdir("/tmp");
 	shorten_fnames(TRUE);
     }
 #endif
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 19e2657..ff54589 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -14016,7 +14016,7 @@
 	else if (do_fsync)
 	    /* Ignore the error, the user wouldn't know what to do about it.
 	     * May happen for a device. */
-	    ignored = fsync(fileno(fd));
+	    vim_ignored = fsync(fileno(fd));
 #endif
 	fclose(fd);
     }
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 6e713c4..0a87f7b 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2117,7 +2117,7 @@
 		if (st_old.st_uid != tmp_st.st_uid)
 		    /* Changing the owner might fail, in which case the
 		     * file will now owned by the current user, oh well. */
-		    ignored = fchown(fileno(fp_out), st_old.st_uid, -1);
+		    vim_ignored = fchown(fileno(fp_out), st_old.st_uid, -1);
 		if (st_old.st_gid != tmp_st.st_gid
 			&& fchown(fileno(fp_out), -1, st_old.st_gid) == -1)
 		    /* can't set the group to what it should be, remove
diff --git a/src/fileio.c b/src/fileio.c
index 056ac91..d7e05bf 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2408,7 +2408,7 @@
     {
 	/* Use stderr for stdin, makes shell commands work. */
 	close(0);
-	ignored = dup(2);
+	vim_ignored = dup(2);
     }
 #endif
 
@@ -3751,7 +3751,7 @@
 		{
 # ifdef UNIX
 #  ifdef HAVE_FCHOWN
-		    ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
+		    vim_ignored = fchown(fd, st_old.st_uid, st_old.st_gid);
 #  endif
 		    if (mch_stat((char *)IObuff, &st) < 0
 			    || st.st_uid != st_old.st_uid
@@ -4509,7 +4509,7 @@
 #endif
 #ifdef HAVE_FTRUNCATE
 	    if (!append)
-		ignored = ftruncate(fd, (off_t)0);
+		vim_ignored = ftruncate(fd, (off_t)0);
 #endif
 
 #if defined(WIN3264)
@@ -4789,7 +4789,7 @@
 		    || st.st_gid != st_old.st_gid)
 	    {
 		/* changing owner might not be possible */
-		ignored = fchown(fd, st_old.st_uid, -1);
+		vim_ignored = fchown(fd, st_old.st_uid, -1);
 		/* if changing group fails clear the group permissions */
 		if (fchown(fd, -1, st_old.st_gid) == -1 && perm > 0)
 		    perm &= ~070;
@@ -6482,9 +6482,9 @@
 	{
 	    tbuf[FGETS_SIZE - 2] = NUL;
 #ifdef USE_CR
-	    ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
+	    vim_ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp);
 #else
-	    ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
+	    vim_ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp);
 #endif
 	} while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n');
     }
diff --git a/src/globals.h b/src/globals.h
index 3f5b61f..511479d 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1621,8 +1621,8 @@
  * can't do anything useful with the value.  Assign to this variable to avoid
  * the warning.
  */
-EXTERN int ignored;
-EXTERN char *ignoredp;
+EXTERN int vim_ignored;
+EXTERN char *vim_ignoredp;
 
 #ifdef FEAT_EVAL
 /* set by alloc_fail(): ID */
diff --git a/src/main.c b/src/main.c
index cb0676c..bf9b842 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2632,7 +2632,7 @@
      * Is there any other system that cannot do this?
      */
     close(0);
-    ignored = dup(2);
+    vim_ignored = dup(2);
 #endif
 }
 
diff --git a/src/mbyte.c b/src/mbyte.c
index 0014119..895f3b7 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -756,7 +756,7 @@
 		     * where mblen() returns 0 for invalid character.
 		     * Therefore, following condition includes 0.
 		     */
-		    ignored = mblen(NULL, 0);	/* First reset the state. */
+		    vim_ignored = mblen(NULL, 0);  // First reset the state.
 		    if (mblen(buf, (size_t)1) <= 0)
 			n = 2;
 		    else
diff --git a/src/netbeans.c b/src/netbeans.c
index a753a4f..1c916b5 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -1988,10 +1988,10 @@
 	    pos = get_off_or_lnum(buf->bufp, &args);
 
 	    cp = (char *)args;
-	    ignored = (int)strtol(cp, &cp, 10);
+	    vim_ignored = (int)strtol(cp, &cp, 10);
 	    args = (char_u *)cp;
 # ifdef NBDEBUG
-	    if (ignored != -1)
+	    if (vim_ignored != -1)
 	    {
 		nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
 	    }
diff --git a/src/os_unix.c b/src/os_unix.c
index aee3a35..bd7b219 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -357,7 +357,7 @@
     void
 mch_write(char_u *s, int len)
 {
-    ignored = (int)write(1, (char *)s, len);
+    vim_ignored = (int)write(1, (char *)s, len);
     if (p_wd)		/* Unix is too fast, slow down a bit more */
 	RealWaitForChar(read_cmd_fd, p_wd, NULL, NULL);
 }
@@ -4693,9 +4693,9 @@
 		 */
 		if (fd >= 0)
 		{
-		    ignored = dup(fd); /* To replace stdin  (fd 0) */
-		    ignored = dup(fd); /* To replace stdout (fd 1) */
-		    ignored = dup(fd); /* To replace stderr (fd 2) */
+		    vim_ignored = dup(fd); /* To replace stdin  (fd 0) */
+		    vim_ignored = dup(fd); /* To replace stdout (fd 1) */
+		    vim_ignored = dup(fd); /* To replace stderr (fd 2) */
 
 		    /* Don't need this now that we've duplicated it */
 		    close(fd);
@@ -4752,13 +4752,13 @@
 
 		    /* set up stdin/stdout/stderr for the child */
 		    close(0);
-		    ignored = dup(pty_slave_fd);
+		    vim_ignored = dup(pty_slave_fd);
 		    close(1);
-		    ignored = dup(pty_slave_fd);
+		    vim_ignored = dup(pty_slave_fd);
 		    if (gui.in_use)
 		    {
 			close(2);
-			ignored = dup(pty_slave_fd);
+			vim_ignored = dup(pty_slave_fd);
 		    }
 
 		    close(pty_slave_fd);    /* has been dupped, close it now */
@@ -4769,13 +4769,13 @@
 		    /* set up stdin for the child */
 		    close(fd_toshell[1]);
 		    close(0);
-		    ignored = dup(fd_toshell[0]);
+		    vim_ignored = dup(fd_toshell[0]);
 		    close(fd_toshell[0]);
 
 		    /* set up stdout for the child */
 		    close(fd_fromshell[0]);
 		    close(1);
-		    ignored = dup(fd_fromshell[1]);
+		    vim_ignored = dup(fd_fromshell[1]);
 		    close(fd_fromshell[1]);
 
 # ifdef FEAT_GUI
@@ -4783,7 +4783,7 @@
 		    {
 			/* set up stderr for the child */
 			close(2);
-			ignored = dup(1);
+			vim_ignored = dup(1);
 		    }
 # endif
 		}
@@ -4920,7 +4920,7 @@
 					    && (lnum !=
 						    curbuf->b_ml.ml_line_count
 						    || curbuf->b_p_eol)))
-				    ignored = write(toshell_fd, "\n",
+				    vim_ignored = write(toshell_fd, "\n",
 								   (size_t)1);
 				++lnum;
 				if (lnum > curbuf->b_op_end.lnum)
@@ -5611,34 +5611,34 @@
 	/* set up stdin for the child */
 	close(0);
 	if (use_null_for_in && null_fd >= 0)
-	    ignored = dup(null_fd);
+	    vim_ignored = dup(null_fd);
 	else if (fd_in[0] < 0)
-	    ignored = dup(pty_slave_fd);
+	    vim_ignored = dup(pty_slave_fd);
 	else
-	    ignored = dup(fd_in[0]);
+	    vim_ignored = dup(fd_in[0]);
 
 	/* set up stderr for the child */
 	close(2);
 	if (use_null_for_err && null_fd >= 0)
 	{
-	    ignored = dup(null_fd);
+	    vim_ignored = dup(null_fd);
 	    stderr_works = FALSE;
 	}
 	else if (use_out_for_err)
-	    ignored = dup(fd_out[1]);
+	    vim_ignored = dup(fd_out[1]);
 	else if (fd_err[1] < 0)
-	    ignored = dup(pty_slave_fd);
+	    vim_ignored = dup(pty_slave_fd);
 	else
-	    ignored = dup(fd_err[1]);
+	    vim_ignored = dup(fd_err[1]);
 
 	/* set up stdout for the child */
 	close(1);
 	if (use_null_for_out && null_fd >= 0)
-	    ignored = dup(null_fd);
+	    vim_ignored = dup(null_fd);
 	else if (fd_out[1] < 0)
-	    ignored = dup(pty_slave_fd);
+	    vim_ignored = dup(pty_slave_fd);
 	else
-	    ignored = dup(fd_out[1]);
+	    vim_ignored = dup(fd_out[1]);
 
 	if (fd_in[0] >= 0)
 	    close(fd_in[0]);
diff --git a/src/os_win32.c b/src/os_win32.c
index 9d36dec..b665815 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -4388,7 +4388,8 @@
 		    && (lnum != curbuf->b_ml.ml_line_count
 			|| curbuf->b_p_eol)))
 	    {
-		WriteFile(g_hChildStd_IN_Wr, "\n", 1, (LPDWORD)&ignored, NULL);
+		WriteFile(g_hChildStd_IN_Wr, "\n", 1,
+						  (LPDWORD)&vim_ignored, NULL);
 	    }
 
 	    ++lnum;
diff --git a/src/term.c b/src/term.c
index b2e2b03..a92f04e 100644
--- a/src/term.c
+++ b/src/term.c
@@ -7013,7 +7013,7 @@
 		size_t	len;
 		int	pos;
 
-		ignoredp = fgets(line, LINE_LEN, fd);
+		vim_ignoredp = fgets(line, LINE_LEN, fd);
 		len = strlen(line);
 
 		if (len <= 1 || line[len - 1] != '\n')
diff --git a/src/ui.c b/src/ui.c
index 8e3f0de..1765620 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -403,7 +403,7 @@
     void
 ui_breakcheck_force(int force)
 {
-    int save_us = updating_screen;
+    int save_updating_screen = updating_screen;
 
     /* We do not want gui_resize_shell() to redraw the screen here. */
     ++updating_screen;
@@ -415,8 +415,8 @@
 #endif
 	mch_breakcheck(force);
 
-    if (save_us)
-	updating_screen = save_us;
+    if (save_updating_screen)
+	updating_screen = TRUE;
     else
 	reset_updating_screen(FALSE);
 }
@@ -1885,7 +1885,7 @@
 #ifdef HAVE_DUP
 	    /* Use stderr for stdin, also works for shell commands. */
 	    close(0);
-	    ignored = dup(2);
+	    vim_ignored = dup(2);
 #else
 	    read_cmd_fd = 2;	/* read from stderr instead of stdin */
 #endif
diff --git a/src/version.c b/src/version.c
index 89a134b..18acc39 100644
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    377,
+/**/
     376,
 /**/
     375,
diff --git a/src/window.c b/src/window.c
index 5671cf9..a481af8 100644
--- a/src/window.c
+++ b/src/window.c
@@ -4436,7 +4436,7 @@
     {
 	/* Window doesn't have a local directory and we are not in the global
 	 * directory: Change to the global directory. */
-	ignored = mch_chdir((char *)globaldir);
+	vim_ignored = mch_chdir((char *)globaldir);
 	VIM_CLEAR(globaldir);
 	shorten_fnames(TRUE);
     }
diff --git a/src/xdiff/xdiff.h b/src/xdiff/xdiff.h
index 2356da5..476b20c 100644
--- a/src/xdiff/xdiff.h
+++ b/src/xdiff/xdiff.h
@@ -108,10 +108,11 @@
 	long bsize;
 } bdiffparam_t;
 
+#include "vim.h"
 
-#define xdl_malloc(x) malloc(x)
-#define xdl_free(ptr) free(ptr)
-#define xdl_realloc(ptr,x) realloc(ptr,x)
+#define xdl_malloc(x) lalloc((x), TRUE)
+#define xdl_free(ptr) vim_free(ptr)
+#define xdl_realloc(ptr,x) vim_realloc((ptr),(x))
 
 void *xdl_mmfile_first(mmfile_t *mmf, long *size);
 long xdl_mmfile_size(mmfile_t *mmf);
diff --git a/src/xdiff/xdiffi.c b/src/xdiff/xdiffi.c
index 3dc90ae..96d5277 100644
--- a/src/xdiff/xdiffi.c
+++ b/src/xdiff/xdiffi.c
@@ -392,9 +392,9 @@
 }
 
 /*
- * If a line is indented more than this, get_indent() just returns this value.
+ * If a line is indented more than this, xget_indent() just returns this value.
  * This avoids having to do absurd amounts of work for data that are not
- * human-readable text, and also ensures that the output of get_indent fits within
+ * human-readable text, and also ensures that the output of xget_indent fits within
  * an int.
  */
 #define MAX_INDENT 200
@@ -404,7 +404,7 @@
  * columns. Return -1 if line is empty or contains only whitespace. Clamp the
  * output value at MAX_INDENT.
  */
-static int get_indent(xrecord_t *rec)
+static int xget_indent(xrecord_t *rec)
 {
 	long i;
 	int ret = 0;
@@ -492,13 +492,13 @@
 		m->indent = -1;
 	} else {
 		m->end_of_file = 0;
-		m->indent = get_indent(xdf->recs[split]);
+		m->indent = xget_indent(xdf->recs[split]);
 	}
 
 	m->pre_blank = 0;
 	m->pre_indent = -1;
 	for (i = split - 1; i >= 0; i--) {
-		m->pre_indent = get_indent(xdf->recs[i]);
+		m->pre_indent = xget_indent(xdf->recs[i]);
 		if (m->pre_indent != -1)
 			break;
 		m->pre_blank += 1;
@@ -511,7 +511,7 @@
 	m->post_blank = 0;
 	m->post_indent = -1;
 	for (i = split + 1; i < xdf->nrec; i++) {
-		m->post_indent = get_indent(xdf->recs[i]);
+		m->post_indent = xget_indent(xdf->recs[i]);
 		if (m->post_indent != -1)
 			break;
 		m->post_blank += 1;
diff --git a/src/xdiff/xpatience.c b/src/xdiff/xpatience.c
index 1052d10..c187129 100644
--- a/src/xdiff/xpatience.c
+++ b/src/xdiff/xpatience.c
@@ -210,6 +210,10 @@
 	int longest = 0, i;
 	struct entry *entry;
 
+	/* Added to silence Coverity. */
+	if (sequence == NULL)
+		return map->first;
+
 	/*
 	 * If not -1, this entry in sequence must never be overridden.
 	 * Therefore, overriding entries before this has no effect, so
