# HG changeset patch # User Christian Brabandt # Date 1536846305 -7200 # Node ID 193471015e1a4c4b24bfe19d89b9e6d8a4313f58 # Parent 7cb784c3b08f2088b612fcf8ad7775ef3f0279ab patch 8.1.0377: xdiff doesn't use the Vim memory allocation functions commit https://github.com/vim/vim/commit/42335f50bc6fac444a8af74c81df8369d722a6fb Author: Bram Moolenaar Date: Thu Sep 13 15:33:43 2018 +0200 patch 8.1.0377: xdiff doesn't use the Vim memory allocation functions Problem: Xdiff doesn't use the Vim memory allocation functions. Solution: Change the xdl_ defines. Check for out-of-memory. Rename "ignored" to "vim_ignored". diff --git a/src/channel.c b/src/channel.c --- a/src/channel.c +++ b/src/channel.c @@ -1858,7 +1858,7 @@ channel_save(channel_T *channel, ch_part { 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 @@ append_to_buffer(buf_T *buffer, char_u * 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 @@ channel_send( { 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 --- a/src/diff.c +++ b/src/diff.c @@ -1203,10 +1203,10 @@ ex_diffpatch(exarg_T *eap) { # 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 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -14016,7 +14016,7 @@ f_writefile(typval_T *argvars, typval_T 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 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -2117,7 +2117,7 @@ write_viminfo(char_u *file, int forceit) 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 --- a/src/fileio.c +++ b/src/fileio.c @@ -2408,7 +2408,7 @@ failed: { /* Use stderr for stdin, makes shell commands work. */ close(0); - ignored = dup(2); + vim_ignored = dup(2); } #endif @@ -3751,7 +3751,7 @@ buf_write( { # 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 @@ restore_backup: #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 @@ restore_backup: || 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 @@ vim_fgets(char_u *buf, int size, FILE *f { 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 --- a/src/globals.h +++ b/src/globals.h @@ -1621,8 +1621,8 @@ EXTERN FILE *time_fd INIT(= NULL); /* w * 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 --- a/src/main.c +++ b/src/main.c @@ -2632,7 +2632,7 @@ read_stdin(void) * 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 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -756,7 +756,7 @@ codepage_invalid: * 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 --- a/src/netbeans.c +++ b/src/netbeans.c @@ -1988,10 +1988,10 @@ nb_do_cmd( 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 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -357,7 +357,7 @@ mch_chdir(char *path) 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 @@ mch_call_shell_fork( */ 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 @@ mch_call_shell_fork( /* 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 @@ mch_call_shell_fork( /* 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 @@ mch_call_shell_fork( { /* set up stderr for the child */ close(2); - ignored = dup(1); + vim_ignored = dup(1); } # endif } @@ -4920,7 +4920,7 @@ mch_call_shell_fork( && (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 @@ mch_job_start(char **argv, job_T *job, j /* 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 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -4388,7 +4388,8 @@ sub_process_writer(LPVOID param) && (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 --- a/src/term.c +++ b/src/term.c @@ -7013,7 +7013,7 @@ gui_get_color_cmn(char_u *name) 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 --- a/src/ui.c +++ b/src/ui.c @@ -403,7 +403,7 @@ ui_breakcheck(void) 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 @@ ui_breakcheck_force(int force) #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 @@ fill_input_buf(int exit_on_error UNUSED) #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 --- a/src/version.c +++ b/src/version.c @@ -795,6 +795,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 377, +/**/ 376, /**/ 375, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -4436,7 +4436,7 @@ win_enter_ext( { /* 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 --- a/src/xdiff/xdiff.h +++ b/src/xdiff/xdiff.h @@ -108,10 +108,11 @@ typedef struct s_bdiffparam { 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 --- a/src/xdiff/xdiffi.c +++ b/src/xdiff/xdiffi.c @@ -392,9 +392,9 @@ static int recs_match(xrecord_t *rec1, x } /* - * 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 @@ static int recs_match(xrecord_t *rec1, x * 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 @@ static void measure_split(const xdfile_t 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 @@ static void measure_split(const xdfile_t 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 --- a/src/xdiff/xpatience.c +++ b/src/xdiff/xpatience.c @@ -210,6 +210,10 @@ static struct entry *find_longest_common 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