diff options
Diffstat (limited to 'src')
70 files changed, 1361 insertions, 1353 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 5bd48fc19f..c9ada8dfc0 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -58,7 +58,7 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err)      rv = slice.items[0].data.string;    } -  free(slice.items); +  xfree(slice.items);    return rv;  } @@ -144,10 +144,10 @@ ArrayOf(String) buffer_get_line_slice(Buffer buffer,  end:    if (err->set) {      for (size_t i = 0; i < rv.size; i++) { -      free(rv.items[i].data.string.data); +      xfree(rv.items[i].data.string.data);      } -    free(rv.items); +    xfree(rv.items);      rv.items = NULL;    } @@ -280,7 +280,7 @@ void buffer_set_line_slice(Buffer buffer,      }      // Same as with replacing, but we also need to free lines -    free(lines[i]); +    xfree(lines[i]);      lines[i] = NULL;      extra++;    } @@ -301,10 +301,10 @@ void buffer_set_line_slice(Buffer buffer,  end:    for (size_t i = 0; i < new_len; i++) { -    free(lines[i]); +    xfree(lines[i]);    } -  free(lines); +  xfree(lines);    restore_win_for_buf(save_curwin, save_curtab, save_curbuf);    try_end(err);  } diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 39ca0756f3..492da25a82 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -61,7 +61,7 @@ bool try_end(Error *err)      free_global_msglist();      if (should_free) { -      free(msg); +      xfree(msg);      }    } else if (did_throw) {      api_set_error(err, Exception, "%s", current_exception->value); @@ -489,7 +489,7 @@ void api_free_string(String value)      return;    } -  free(value.data); +  xfree(value.data);  }  void api_free_object(Object value) @@ -527,7 +527,7 @@ void api_free_array(Array value)      api_free_object(value.items[i]);    } -  free(value.items); +  xfree(value.items);  }  void api_free_dictionary(Dictionary value) @@ -537,7 +537,7 @@ void api_free_dictionary(Dictionary value)      api_free_object(value.items[i].value);    } -  free(value.items); +  xfree(value.items);  }  Dictionary api_metadata(void) diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 587e19fe35..1204c9e1d1 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -85,7 +85,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)        insert ? 0 : typebuf.tb_len, !typed, false);    if (escape_csi) { -      free(keys_esc); +      xfree(keys_esc);    }    if (vgetc_busy) diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 11cb7bdeac..4585278714 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -443,8 +443,8 @@ close_buffer (     * Remove the buffer from the list.     */    if (wipe_buf) { -    free(buf->b_ffname); -    free(buf->b_sfname); +    xfree(buf->b_ffname); +    xfree(buf->b_sfname);      if (buf->b_prev == NULL)        firstbuf = buf->b_next;      else @@ -563,7 +563,7 @@ static void free_buffer(buf_T *buf)      buf->b_next = au_pending_free_buf;      au_pending_free_buf = buf;    } else { -    free(buf); +    xfree(buf);    }  } @@ -587,7 +587,7 @@ free_buffer_stuff (    buf_delete_signs(buf);                /* delete any signs */    map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE);    /* clear local mappings */    map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE);     /* clear local abbrevs */ -  free(buf->b_start_fenc); +  xfree(buf->b_start_fenc);    buf->b_start_fenc = NULL;  } @@ -605,7 +605,7 @@ static void clear_wininfo(buf_T *buf)        clear_winopt(&wip->wi_opt);        deleteFoldRecurse(&wip->wi_folds);      } -    free(wip); +    xfree(wip);    }  } @@ -1332,7 +1332,7 @@ buflist_new (    if (ffname != NULL && !(flags & BLN_DUMMY)        && (buf = buflist_findname_file_id(ffname, &file_id,                                           file_id_valid)) != NULL) { -    free(ffname); +    xfree(ffname);      if (lnum != 0)        buflist_setfpos(buf, curwin, lnum, (colnr_T)0, FALSE);      /* copy the options now, if 'cpo' doesn't have 's' and not done @@ -1396,9 +1396,9 @@ buflist_new (    buf->b_wininfo = xcalloc(1, sizeof(wininfo_T));    if (ffname != NULL && (buf->b_ffname == NULL || buf->b_sfname == NULL)) { -    free(buf->b_ffname); +    xfree(buf->b_ffname);      buf->b_ffname = NULL; -    free(buf->b_sfname); +    xfree(buf->b_sfname);      buf->b_sfname = NULL;      if (buf != curbuf)        free_buffer(buf); @@ -1672,7 +1672,7 @@ buf_T *buflist_findname_exp(char_u *fname)        );    if (ffname != NULL) {      buf = buflist_findname(ffname); -    free(ffname); +    xfree(ffname);    }    return buf;  } @@ -1767,7 +1767,7 @@ buflist_findpat (            ++p;          prog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);          if (prog == NULL) { -          free(pat); +          xfree(pat);            return -1;          } @@ -1809,7 +1809,7 @@ buflist_findpat (        find_listed = FALSE;      } -    free(pat); +    xfree(pat);    }    if (match == -2) @@ -1855,7 +1855,7 @@ int ExpandBufnames(char_u *pat, int *num_file, char_u ***file, int options)      prog = vim_regcomp(patc + attempt * 11, RE_MAGIC);      if (prog == NULL) {        if (patc != pat) -        free(patc); +        xfree(patc);        return FAIL;      } @@ -1893,7 +1893,7 @@ int ExpandBufnames(char_u *pat, int *num_file, char_u ***file, int options)    }    if (patc != pat) -    free(patc); +    xfree(patc);    *num_file = count;    return count == 0 ? FAIL : OK; @@ -1938,7 +1938,7 @@ static char_u *fname_match(regprog_T *prog, char_u *name, bool ignore_case)        p = home_replace_save(NULL, name);        if (vim_regexec(®match, p, (colnr_T)0))          match = name; -      free(p); +      xfree(p);      }    } @@ -2223,8 +2223,8 @@ setfname (    if (ffname == NULL || *ffname == NUL) {      /* Removing the name. */ -    free(buf->b_ffname); -    free(buf->b_sfname); +    xfree(buf->b_ffname); +    xfree(buf->b_sfname);      buf->b_ffname = NULL;      buf->b_sfname = NULL;    } else { @@ -2245,7 +2245,7 @@ setfname (        if (obuf->b_ml.ml_mfp != NULL) {          /* it's loaded, fail */          if (message)            EMSG(_("E95: Buffer with this name already exists")); -        free(ffname); +        xfree(ffname);          return FAIL;        }        /* delete from the list */ @@ -2255,8 +2255,8 @@ setfname (  #ifdef USE_FNAME_CASE      path_fix_case(sfname);            /* set correct case for short file name */  #endif -    free(buf->b_ffname); -    free(buf->b_sfname); +    xfree(buf->b_ffname); +    xfree(buf->b_sfname);      buf->b_ffname = ffname;      buf->b_sfname = sfname;    } @@ -2282,8 +2282,8 @@ void buf_set_name(int fnum, char_u *name)    buf = buflist_findnr(fnum);    if (buf != NULL) { -    free(buf->b_sfname); -    free(buf->b_ffname); +    xfree(buf->b_sfname); +    xfree(buf->b_ffname);      buf->b_ffname = vim_strsave(name);      buf->b_sfname = NULL;      /* Allocate ffname and expand into full path.  Also resolves .lnk @@ -2561,7 +2561,7 @@ fileinfo (        set_keep_msg(p, 0);    } -  free(buffer); +  xfree(buffer);  }  void col_print(char_u *buf, size_t buflen, int col, int vcol) @@ -2636,7 +2636,7 @@ void maketitle(void)        else {          p = transstr(path_tail(curbuf->b_fname));          STRLCPY(buf, p, SPACE_FOR_FNAME + 1); -        free(p); +        xfree(p);        }        switch (bufIsChanged(curbuf) @@ -2677,7 +2677,7 @@ void maketitle(void)          if (off < SPACE_FOR_DIR) {            p = transstr(buf + off);            STRLCPY(buf + off, p, SPACE_FOR_DIR - off + 1); -          free(p); +          xfree(p);          } else {            STRLCPY(buf + off, "...", SPACE_FOR_ARGNR - off + 1);          } @@ -2749,7 +2749,7 @@ static int ti_change(char_u *str, char_u **last)  {    if ((str == NULL) != (*last == NULL)        || (str != NULL && *last != NULL && STRCMP(str, *last) != 0)) { -    free(*last); +    xfree(*last);      if (str == NULL)        *last = NULL;      else @@ -2771,8 +2771,8 @@ void resettitle(void)  # if defined(EXITFREE)  void free_titles(void)  { -  free(lasttitle); -  free(lasticon); +  xfree(lasttitle); +  xfree(lasticon);  }  # endif @@ -3124,7 +3124,7 @@ build_stl_str_hl (        if (str != NULL && *str != 0) {          if (*skipdigits(str) == NUL) {            num = atoi((char *)str); -          free(str); +          xfree(str);            str = NULL;            itemisflag = FALSE;          } @@ -3381,7 +3381,7 @@ build_stl_str_hl (        item[curitem].type = Empty;      if (opt == STL_VIM_EXPR) -      free(str); +      xfree(str);      if (num >= 0 || (!itemisflag && str && *str))        prevchar_isflag = FALSE;              /* Item not NULL, but not a flag */ @@ -3391,7 +3391,7 @@ build_stl_str_hl (    itemcnt = curitem;    if (usefmt != fmt) -    free(usefmt); +    xfree(usefmt);    width = vim_strsize(out);    if (maxwidth > 0 && width > maxwidth) { @@ -3585,7 +3585,7 @@ void fname_expand(buf_T *buf, char_u **ffname, char_u **sfname)      /* If the file name is a shortcut file, use the file it links to. */      rfname = mch_resolve_shortcut(*ffname);      if (rfname != NULL) { -      free(*ffname); +      xfree(*ffname);        *ffname = rfname;        *sfname = rfname;      } @@ -3844,7 +3844,7 @@ do_arg_all (      win_enter(new_curwin, false);    --autocmd_no_leave; -  free(opened); +  xfree(opened);  }  /* @@ -4161,7 +4161,7 @@ chk_modeline (    sourcing_lnum = save_sourcing_lnum;    sourcing_name = save_sourcing_name; -  free(linecopy); +  xfree(linecopy);    return retval;  } @@ -4208,7 +4208,7 @@ int read_viminfo_bufferlist(vir_T *virp, int writing)        buflist_setfpos(buf, curwin, lnum, col, FALSE);      }    } -  free(xline); +  xfree(xline);    return viminfo_readline(virp);  } @@ -4249,7 +4249,7 @@ void write_viminfo_bufferlist(FILE *fp)          buf->b_last_cursor.col);      viminfo_writestring(fp, line);    } -  free(line); +  xfree(line);  } @@ -4426,7 +4426,7 @@ linenr_T buf_delsign(          if (sign->id == id) {              *lastp = next;              lnum = sign->lnum; -            free(sign); +            xfree(sign);              break;          } else {              lastp = &sign->next; @@ -4498,7 +4498,7 @@ void buf_delete_signs(buf_T *buf)      while (buf->b_signlist != NULL) {          next = buf->b_signlist->next; -        free(buf->b_signlist); +        xfree(buf->b_signlist);          buf->b_signlist = next;      }  } @@ -4621,7 +4621,7 @@ int buf_contents_changed(buf_T *buf)          }      }    } -  free(ea.cmd); +  xfree(ea.cmd);    /* restore curwin/curbuf and a few other things */    aucmd_restbuf(&aco); diff --git a/src/nvim/diff.c b/src/nvim/diff.c index e50b096270..937baad648 100644 --- a/src/nvim/diff.c +++ b/src/nvim/diff.c @@ -393,7 +393,7 @@ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1,          }        }        dprev->df_next = dp->df_next; -      free(dp); +      xfree(dp);        dp = dprev->df_next;      } else {        // Advance to next entry. @@ -416,7 +416,7 @@ static void diff_mark_adjust_tp(tabpage_T *tp, int idx, linenr_T line1,      if (i == DB_COUNT) {        diff_T *dnext = dp->df_next; -      free(dp); +      xfree(dp);        dp = dnext;        if (dprev == NULL) { @@ -527,7 +527,7 @@ static void diff_check_unchanged(tabpage_T *tp, diff_T *dp)            break;          }        } -      free(line_org); +      xfree(line_org);        // Stop when a line isn't equal in all diff buffers.        if (i_new != DB_COUNT) { @@ -786,9 +786,9 @@ void ex_diffupdate(exarg_T *eap)    diff_redraw(TRUE);  theend: -  free(tmp_orig); -  free(tmp_new); -  free(tmp_diff); +  xfree(tmp_orig); +  xfree(tmp_new); +  xfree(tmp_diff);  }  /// Make a diff between files "tmp_orig" and "tmp_new", results in "tmp_diff". @@ -828,7 +828,7 @@ static void diff_file(char_u *tmp_orig, char_u *tmp_new, char_u *tmp_diff)          NULL          );      unblock_autocmds(); -    free(cmd); +    xfree(cmd);    }  } @@ -989,16 +989,16 @@ theend:    if (tmp_orig != NULL) {      os_remove((char *)tmp_orig);    } -  free(tmp_orig); +  xfree(tmp_orig);    if (tmp_new != NULL) {      os_remove((char *)tmp_new);    } -  free(tmp_new); -  free(newname); -  free(buf); +  xfree(tmp_new); +  xfree(newname); +  xfree(buf);  #ifdef UNIX -  free(fullname); +  xfree(fullname);  #endif  // ifdef UNIX  } @@ -1340,7 +1340,7 @@ static void diff_read(int idx_orig, int idx_new, char_u *fname)        while (dn != dp->df_next) {          dpl = dn->df_next; -        free(dn); +        xfree(dn);          dn = dpl;        }      } else { @@ -1407,7 +1407,7 @@ void diff_clear(tabpage_T *tp)    diff_T *next_p;    for (p = tp->tp_first_diff; p != NULL; p = next_p) {      next_p = p->df_next; -    free(p); +    xfree(p);    }    tp->tp_first_diff = NULL;  } @@ -1559,7 +1559,7 @@ static int diff_equal_entry(diff_T *dp, int idx1, int idx2)      int cmp = diff_cmp(line, ml_get_buf(curtab->tp_diffbuf[idx2],                                          dp->df_lnum[idx2] + i, FALSE)); -    free(line); +    xfree(line);      if (cmp != 0) {        return FALSE; @@ -1863,7 +1863,7 @@ int diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp)    int idx = diff_buf_idx(wp->w_buffer);    if (idx == DB_COUNT) {      // cannot happen -    free(line_org); +    xfree(line_org);      return FALSE;    } @@ -1876,7 +1876,7 @@ int diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp)    }    if ((dp == NULL) || (diff_check_sanity(curtab, dp) == FAIL)) { -    free(line_org); +    xfree(line_org);      return FALSE;    } @@ -1956,7 +1956,7 @@ int diff_find_change(win_T *wp, linenr_T lnum, int *startp, int *endp)      }    } -  free(line_org); +  xfree(line_org);    return added;  } @@ -2262,7 +2262,7 @@ void ex_diffgetput(exarg_T *eap)          }          p = vim_strsave(ml_get_buf(curtab->tp_diffbuf[idx_from], nr, FALSE));          ml_append(lnum + i - 1, p, 0, FALSE); -        free(p); +        xfree(p);          added++;          if (buf_empty && (curbuf->b_ml.ml_line_count == 2)) {            // Added the first line into an empty buffer, need to @@ -2317,7 +2317,7 @@ void ex_diffgetput(exarg_T *eap)        if (dfree != NULL) {          // Diff is deleted, update folds in other windows.          diff_fold_update(dfree, idx_to); -        free(dfree); +        xfree(dfree);        } else {          // mark_adjust() may have changed the count in a wrong way          dp->df_count[idx_to] = new_count; diff --git a/src/nvim/digraph.c b/src/nvim/digraph.c index cb6bfc9cc9..cf998c041d 100644 --- a/src/nvim/digraph.c +++ b/src/nvim/digraph.c @@ -1538,7 +1538,7 @@ static int getexactdigraph(int char1, int char2, int meta_char)        if (to != NULL) {          retval = (*mb_ptr2char)(to); -        free(to); +        xfree(to);        }        (void)convert_setup(&vc, NULL, NULL);      } @@ -1763,11 +1763,11 @@ char_u* keymap_init(void)                     curbuf->b_p_keymap);        if (source_runtime((char_u *)buf, FALSE) == FAIL) { -        free(buf); +        xfree(buf);          return (char_u *)N_("E544: Keymap file not found");        }      } -    free(buf); +    xfree(buf);    }    return NULL; @@ -1824,12 +1824,12 @@ void ex_loadkeymap(exarg_T *eap)          if (*kp->to == NUL) {            EMSG(_("E791: Empty keymap entry"));          } -        free(kp->from); -        free(kp->to); +        xfree(kp->from); +        xfree(kp->to);          --curbuf->b_kmap_ga.ga_len;        }      } -    free(line); +    xfree(line);    }    // setup ":lnoremap" to map the keys @@ -1866,8 +1866,8 @@ static void keymap_unload(void)    for (int i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) {      vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s", kp[i].from);      (void)do_map(1, buf, LANGMAP, FALSE); -    free(kp[i].from); -    free(kp[i].to); +    xfree(kp[i].from); +    xfree(kp[i].to);    }    p_cpo = save_cpo; diff --git a/src/nvim/edit.c b/src/nvim/edit.c index b860ce8898..26665aa84c 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -482,7 +482,7 @@ edit (      new_insert_skip = 0;    else {      new_insert_skip = (int)STRLEN(ptr); -    free(ptr); +    xfree(ptr);    }    old_indent = 0; @@ -652,7 +652,7 @@ edit (            if (str != NULL) {              for (p = str; *p != NUL; mb_ptr_adv(p))                ins_compl_addleader(PTR2CHAR(p)); -            free(str); +            xfree(str);            } else              ins_compl_addleader(c);            continue; @@ -1153,7 +1153,7 @@ normalchar:              }              AppendToRedobuffLit(str, -1);            } -          free(str); +          xfree(str);            c = NUL;          } @@ -1569,7 +1569,7 @@ change_indent (        memset(ptr, ' ', i);        new_cursor_col += i;        ins_str(ptr); -      free(ptr); +      xfree(ptr);      }      /* @@ -1648,7 +1648,7 @@ change_indent (      /* Insert new stuff into line again */      ins_bytes(new_line); -    free(new_line); +    xfree(new_line);    }  } @@ -1970,7 +1970,7 @@ int ins_compl_add_infercase(char_u *str, int len, int icase, char_u *fname, int          *(p++) = wca[i++];      *p = NUL; -    free(wca); +    xfree(wca);      return ins_compl_add(IObuff, len, icase, fname, NULL, dir,          flags, FALSE); @@ -2273,7 +2273,7 @@ static void ins_compl_del_pum(void)  {    if (compl_match_array != NULL) {      pum_undisplay(); -    free(compl_match_array); +    xfree(compl_match_array);      compl_match_array = NULL;    }  } @@ -2490,8 +2490,8 @@ ins_compl_dictionaries (      ptr = xmalloc(len);      vim_snprintf((char *)ptr, len, "^\\s*\\zs\\V%s", pat_esc);      regmatch.regprog = vim_regcomp(ptr, RE_MAGIC); -    free(pat_esc); -    free(ptr); +    xfree(pat_esc); +    xfree(ptr);    } else {      regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);      if (regmatch.regprog == NULL) @@ -2539,7 +2539,7 @@ ins_compl_dictionaries (  theend:    p_scs = save_p_scs;    vim_regfree(regmatch.regprog); -  free(buf); +  xfree(buf);  }  static void ins_compl_files(int count, char_u **files, int thesaurus, int flags, regmatch_T *regmatch, char_u *buf, int *dir) @@ -2689,9 +2689,9 @@ static void ins_compl_free(void)    compl_T *match;    int i; -  free(compl_pattern); +  xfree(compl_pattern);    compl_pattern = NULL; -  free(compl_leader); +  xfree(compl_leader);    compl_leader = NULL;    if (compl_first_match == NULL) @@ -2704,13 +2704,13 @@ static void ins_compl_free(void)    do {      match = compl_curr_match;      compl_curr_match = compl_curr_match->cp_next; -    free(match->cp_str); +    xfree(match->cp_str);      /* several entries may use the same fname, free it just once. */      if (match->cp_flags & FREE_FNAME) -      free(match->cp_fname); +      xfree(match->cp_fname);      for (i = 0; i < CPT_COUNT; ++i) -      free(match->cp_text[i]); -    free(match); +      xfree(match->cp_text[i]); +    xfree(match);    } while (compl_curr_match != NULL && compl_curr_match != compl_first_match);    compl_first_match = compl_curr_match = NULL;    compl_shown_match = NULL; @@ -2721,12 +2721,12 @@ static void ins_compl_clear(void)    compl_cont_status = 0;    compl_started = FALSE;    compl_matches = 0; -  free(compl_pattern); +  xfree(compl_pattern);    compl_pattern = NULL; -  free(compl_leader); +  xfree(compl_leader);    compl_leader = NULL;    edit_submode_extra = NULL; -  free(compl_orig_text); +  xfree(compl_orig_text);    compl_orig_text = NULL;    compl_enter_selects = FALSE;  } @@ -2767,7 +2767,7 @@ static int ins_compl_bs(void)        || ins_compl_need_restart())      ins_compl_restart(); -  free(compl_leader); +  xfree(compl_leader);    compl_leader = vim_strnsave(line + compl_col, (int)(p - line) - compl_col);    ins_compl_new_leader();    if (compl_shown_match != NULL) @@ -2871,7 +2871,7 @@ static void ins_compl_addleader(int c)     * cursor doesn't point original position, changing compl_leader would     * break redo. */    if (!compl_opt_refresh_always) { -    free(compl_leader); +    xfree(compl_leader);      compl_leader = vim_strnsave(get_cursor_line_ptr() + compl_col,          (int)(curwin->w_cursor.col - compl_col));      ins_compl_new_leader(); @@ -2898,7 +2898,7 @@ static void ins_compl_set_original_text(char_u *str)  {    /* Replace the original text entry. */    if (compl_first_match->cp_flags & ORIGINAL_TEXT) {    /* safety check */ -    free(compl_first_match->cp_str); +    xfree(compl_first_match->cp_str);      compl_first_match->cp_str = vim_strsave(str);    }  } @@ -4449,13 +4449,13 @@ static int ins_complete(int c)      ins_compl_fixRedoBufForLeader(NULL);      /* Always add completion for the original text. */ -    free(compl_orig_text); +    xfree(compl_orig_text);      compl_orig_text = vim_strnsave(line + compl_col, compl_length);      if (ins_compl_add(compl_orig_text, -1, p_ic, NULL, NULL, 0,                        ORIGINAL_TEXT, FALSE) != OK) { -      free(compl_pattern); +      xfree(compl_pattern);        compl_pattern = NULL; -      free(compl_orig_text); +      xfree(compl_orig_text);        compl_orig_text = NULL;        return FAIL;      } @@ -5326,7 +5326,7 @@ internal_format (         * moved, now we re-insert it into the new line.         */        ins_bytes(saved_text); -      free(saved_text); +      xfree(saved_text);      } else {        /*         * Check if cursor is not past the NUL off the line, cindent @@ -5661,11 +5661,11 @@ stop_insert (    ptr = get_inserted();    if (did_restart_edit == 0 || (ptr != NULL                                  && (int)STRLEN(ptr) > new_insert_skip)) { -    free(last_insert); +    xfree(last_insert);      last_insert = ptr;      last_insert_skip = new_insert_skip;    } else -    free(ptr); +    xfree(ptr);    if (!arrow_used && end_insert_pos != NULL) {      /* Auto-format now.  It may seem strange to do this when stopping an @@ -5770,7 +5770,7 @@ void set_last_insert(int c)  {    char_u      *s; -  free(last_insert); +  xfree(last_insert);    last_insert = xmalloc(MB_MAXBYTES * 3 + 5);    s = last_insert;    /* Use the CTRL-V only when entering a special char */ @@ -5785,9 +5785,9 @@ void set_last_insert(int c)  #if defined(EXITFREE)  void free_last_insert(void)  { -  free(last_insert); +  xfree(last_insert);    last_insert = NULL; -  free(compl_orig_text); +  xfree(compl_orig_text);    compl_orig_text = NULL;  } @@ -6307,7 +6307,7 @@ static void mb_replace_pop_ins(int cc)   */  static void replace_flush(void)  { -  free(replace_stack); +  xfree(replace_stack);    replace_stack = NULL;    replace_stack_len = 0;    replace_stack_nr = 0; @@ -7966,7 +7966,7 @@ static int ins_tab(void)      }      if (State & VREPLACE_FLAG) -      free(saved_line); +      xfree(saved_line);      curwin->w_p_list = save_list;    } diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 67cef68b38..1616bf60e2 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -513,7 +513,7 @@ void eval_clear(void)    for (int i = 0; i < VV_LEN; ++i) {      p = &vimvars[i];      if (p->vv_di.di_tv.v_type == VAR_STRING) { -      free(p->vv_str); +      xfree(p->vv_str);        p->vv_str = NULL;      } else if (p->vv_di.di_tv.v_type == VAR_LIST) {        list_unref(p->vv_list); @@ -539,7 +539,7 @@ void eval_clear(void)    for (int i = 1; i <= ga_scripts.ga_len; ++i)      vars_clear(&SCRIPT_VARS(i));    for (int i = 1; i <= ga_scripts.ga_len; ++i) -    free(SCRIPT_SV(i)); +    xfree(SCRIPT_SV(i));    ga_clear(&ga_scripts);    /* unreferenced lists and dicts */ @@ -735,13 +735,13 @@ void var_redir_stop(void)      }      /* free the collected output */ -    free(redir_ga.ga_data); +    xfree(redir_ga.ga_data);      redir_ga.ga_data = NULL; -    free(redir_lval); +    xfree(redir_lval);      redir_lval = NULL;    } -  free(redir_varname); +  xfree(redir_varname);    redir_varname = NULL;  } @@ -1059,7 +1059,7 @@ typval_T *eval_expr(char_u *arg, char_u **nextcmd)    typval_T *tv = xmalloc(sizeof(typval_T));    if (eval0(arg, tv, nextcmd, TRUE) == FAIL) { -    free(tv); +    xfree(tv);      return NULL;    } @@ -1126,7 +1126,7 @@ call_vim_function (      --sandbox;      restore_funccal(save_funccalp);    } -  free(argvars); +  xfree(argvars);    if (ret == FAIL)      clear_tv(rettv); @@ -1691,14 +1691,14 @@ static char_u *list_arg_vars(exarg_T *eap, char_u *arg, int *first)                    s == NULL ? (char_u *)"" : s,                    first);                *arg = c; -              free(tf); +              xfree(tf);              }              clear_tv(&tv);            }          }        } -      free(tofree); +      xfree(tofree);      }      arg = skipwhite(arg); @@ -1756,7 +1756,7 @@ ex_let_one (            if (s != NULL) {              p = tofree = concat_str(s, p);              if (mustfree) -              free(s); +              xfree(s);            }          }          if (p != NULL) { @@ -1771,7 +1771,7 @@ ex_let_one (            arg_end = arg;          }          name[len] = c1; -        free(tofree); +        xfree(tofree);        }      }    } @@ -1812,7 +1812,7 @@ ex_let_one (                n = numval - n;            } else if (opt_type == 0 && stringval != NULL) {     /* string */              s = concat_str(stringval, s); -            free(stringval); +            xfree(stringval);              stringval = s;            }          } @@ -1822,7 +1822,7 @@ ex_let_one (          arg_end = p;        }        *p = c1; -      free(stringval); +      xfree(stringval);      }    }    /* @@ -1844,14 +1844,14 @@ ex_let_one (          s = get_reg_contents(*arg == '@' ? '"' : *arg, kGRegExprSrc);          if (s != NULL) {            p = ptofree = concat_str(s, p); -          free(s); +          xfree(s);          }        }        if (p != NULL) {          write_reg_contents(*arg == '@' ? '"' : *arg, p, -1, FALSE);          arg_end = arg + 1;        } -      free(ptofree); +      xfree(ptofree);      }    }    /* @@ -2211,8 +2211,8 @@ get_lval (   */  static void clear_lval(lval_T *lp)  { -  free(lp->ll_exp_name); -  free(lp->ll_newkey); +  xfree(lp->ll_exp_name); +  xfree(lp->ll_newkey);  }  /* @@ -2305,7 +2305,7 @@ static void set_var_lval(lval_T *lp, char_u *endp, typval_T *rettv, int copy, ch        /* Need to add an item to the Dictionary. */        di = dictitem_alloc(lp->ll_newkey);        if (dict_add(lp->ll_tv->vval.v_dict, di) == FAIL) { -        free(di); +        xfree(di);          return;        }        lp->ll_tv = &di->di_tv; @@ -2540,7 +2540,7 @@ void free_for_info(void *fi_void)      list_rem_watch(fi->fi_list, &fi->fi_lw);      list_unref(fi->fi_list);    } -  free(fi); +  xfree(fi);  } @@ -2654,7 +2654,7 @@ void ex_call(exarg_T *eap)    if (fudi.fd_newkey != NULL) {      /* Still need to give an error message for missing key. */      EMSG2(_(e_dictkey), fudi.fd_newkey); -    free(fudi.fd_newkey); +    xfree(fudi.fd_newkey);    }    if (tofree == NULL)      return; @@ -2734,7 +2734,7 @@ void ex_call(exarg_T *eap)  end:    dict_unref(fudi.fd_dict); -  free(tofree); +  xfree(tofree);  }  /* @@ -3055,7 +3055,7 @@ static char_u *cat_prefix_varname(int prefix, char_u *name)    size_t len = STRLEN(name) + 3;    if (len > varnamebuflen) { -    free(varnamebuf); +    xfree(varnamebuf);      len += 10;                          /* some additional space */      varnamebuf = xmalloc(len);      varnamebuflen = len; @@ -3142,7 +3142,7 @@ char_u *get_user_var_name(expand_T *xp, int idx)    if (vidx < VV_LEN)      return cat_prefix_varname('v', (char_u *)vimvars[vidx++].vv_name); -  free(varnamebuf); +  xfree(varnamebuf);    varnamebuf = NULL;    varnamebuflen = 0;    return NULL; @@ -4150,7 +4150,7 @@ eval7 (        else          ret = OK;      } -    free(alias); +    xfree(alias);    }    *arg = skipwhite(*arg); @@ -4784,9 +4784,9 @@ list_free (      if (recurse || (item->li_tv.v_type != VAR_LIST                      && item->li_tv.v_type != VAR_DICT))        clear_tv(&item->li_tv); -    free(item); +    xfree(item);    } -  free(l); +  xfree(l);  }  /* @@ -4803,7 +4803,7 @@ listitem_T *listitem_alloc(void) FUNC_ATTR_NONNULL_RET  void listitem_free(listitem_T *item)  {    clear_tv(&item->li_tv); -  free(item); +  xfree(item);  }  /* @@ -5275,7 +5275,7 @@ static list_T *list_copy(list_T *orig, int deep, int copyID)      ni = listitem_alloc();      if (deep) {        if (item_copy(&item->li_tv, &ni->li_tv, deep, copyID) == FAIL) { -        free(ni); +        xfree(ni);          break;        }      } else @@ -5330,7 +5330,7 @@ static char_u *list2string(typval_T *tv, int copyID)    ga_init(&ga, (int)sizeof(char), 80);    ga_append(&ga, '[');    if (list_join(&ga, tv->vval.v_list, (char_u *)", ", FALSE, copyID) == FAIL) { -    free(ga.ga_data); +    xfree(ga.ga_data);      return NULL;    }    ga_append(&ga, ']'); @@ -5423,7 +5423,7 @@ static int list_join(garray_T *gap, list_T *l, char_u *sep, int echo_style, int    ga_init(&join_ga, (int)sizeof(join_T), l->lv_len);    retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga); -# define FREE_JOIN_TOFREE(join) free((join)->tofree) +# define FREE_JOIN_TOFREE(join) xfree((join)->tofree)    GA_DEEP_CLEAR(&join_ga, join_T, FREE_JOIN_TOFREE);    return retval; @@ -5729,12 +5729,12 @@ dict_free (        if (recurse || (di->di_tv.v_type != VAR_LIST                        && di->di_tv.v_type != VAR_DICT))          clear_tv(&di->di_tv); -      free(di); +      xfree(di);        --todo;      }    }    hash_clear(&d->dv_hashtab); -  free(d); +  xfree(d);  }  /* @@ -5787,7 +5787,7 @@ static void dictitem_remove(dict_T *dict, dictitem_T *item)  void dictitem_free(dictitem_T *item)  {    clear_tv(&item->di_tv); -  free(item); +  xfree(item);  }  /* @@ -5820,7 +5820,7 @@ static dict_T *dict_copy(dict_T *orig, int deep, int copyID)          if (deep) {            if (item_copy(&HI2DI(hi)->di_tv, &di->di_tv, deep,                    copyID) == FAIL) { -            free(di); +            xfree(di);              break;            }          } else @@ -5929,7 +5929,7 @@ dictitem_T *dict_find(dict_T *d, char_u *key, int len)    }    hi = hash_find(&d->dv_hashtab, akey); -  free(tofree); +  xfree(tofree);    if (HASHITEM_EMPTY(hi))      return NULL;    return HI2DI(hi); @@ -5960,7 +5960,7 @@ static bool get_dict_callback(dict_T *d, char *key, ufunc_T **result)    if (*n > '9' || *n < '0') {      if ((n = trans_function_name(&n, false, TFN_INT|TFN_QUIET, NULL))) {        rv = find_func(n); -      free(n); +      xfree(n);      }    } else {      // dict function, name is already translated @@ -6045,20 +6045,20 @@ static char_u *dict2string(typval_T *tv, int copyID)      tofree = string_quote(hi->hi_key, FALSE);      if (tofree != NULL) {        ga_concat(&ga, tofree); -      free(tofree); +      xfree(tofree);      }      ga_concat(&ga, (char_u *)": ");      s = tv2string(&HI2DI(hi)->di_tv, &tofree, numbuf, copyID);      if (s != NULL)        ga_concat(&ga, s); -    free(tofree); +    xfree(tofree);      if (s == NULL || did_echo_string_emsg) {        break;      }      line_breakcheck();    }    if (todo > 0) { -    free(ga.ga_data); +    xfree(ga.ga_data);      return NULL;    } @@ -6374,13 +6374,13 @@ static int get_env_tv(char_u **arg, typval_T *rettv, int evaluate)        }      } else {        if (mustfree) { -        free(string); +        xfree(string);        }        // Next try expanding things like $VIM and ${HOME}.        string = expand_env_save(name - 1);        if (string != NULL && *string == '$') { -        free(string); +        xfree(string);          string = NULL;        }      } @@ -7030,8 +7030,8 @@ call_func (    }    if (fname != name && fname != fname_buf) -    free(fname); -  free(name); +    xfree(fname); +  xfree(name);    return ret;  } @@ -7050,7 +7050,7 @@ static void emsg_funcname(char *ermsg, char_u *name)      p = name;    EMSG2(_(ermsg), p);    if (p != name) -    free(p); +    xfree(p);  }  /* @@ -8200,7 +8200,7 @@ static void f_exists(typval_T *argvars, typval_T *rettv)        p = expand_env_save(p);        if (p != NULL && *p != '$')          n = TRUE; -      free(p); +      xfree(p);      }    } else if (*p == '&' || *p == '+') {                /* option */      n = (get_option_tv(&p, NULL, TRUE) == OK); @@ -8236,7 +8236,7 @@ static void f_exists(typval_T *argvars, typval_T *rettv)      if (*p != NUL)        n = FALSE; -    free(tofree); +    xfree(tofree);    }    rettv->vval.v_number = n; @@ -8529,7 +8529,7 @@ static void findfilendir(typval_T *argvars, typval_T *rettv, int find_what)    if (*fname != NUL && !error) {      do {        if (rettv->v_type == VAR_STRING || rettv->v_type == VAR_LIST) -        free(fresult); +        xfree(fresult);        fresult = find_file_in_path_option(first ? fname : NULL,            first ? (int)STRLEN(fname) : 0,            0, first, path, @@ -8792,7 +8792,7 @@ static void f_fnamemodify(typval_T *argvars, typval_T *rettv)      rettv->vval.v_string = NULL;    else      rettv->vval.v_string = vim_strnsave(fname, len); -  free(fbuf); +  xfree(fbuf);  } @@ -9275,7 +9275,7 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)      slash_adjust(rettv->vval.v_string);  #endif    } -  free(cwd); +  xfree(cwd);  }  /* @@ -10252,8 +10252,8 @@ static void f_iconv(typval_T *argvars, typval_T *rettv)      rettv->vval.v_string = string_convert(&vimconv, str, NULL);    convert_setup(&vimconv, NULL, NULL); -  free(from); -  free(to); +  xfree(from); +  xfree(to);  }  /* @@ -10391,7 +10391,7 @@ static void get_user_input(typval_T *argvars, typval_T *rettv, int inputdialog)        rettv->vval.v_string = vim_strsave(get_tv_string_buf(                &argvars[2], buf)); -    free(xp_arg); +    xfree(xp_arg);      /* since the user typed this, no need to wait for return */      need_wait_return = FALSE; @@ -10742,7 +10742,7 @@ static void f_jobsend(typval_T *argvars, typval_T *rettv)      return;    } -  WBuffer *buf = wstream_new_buffer(input, input_len, 1, free); +  WBuffer *buf = wstream_new_buffer(input, input_len, 1, xfree);    rettv->vval.v_number = job_write(job, buf);  } @@ -11239,7 +11239,7 @@ static void get_maparg(typval_T *argvars, typval_T *rettv, int exact)    keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);    rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local); -  free(keys_buf); +  xfree(keys_buf);    if (!get_dict) {      /* Return a string. */ @@ -11264,8 +11264,8 @@ static void get_maparg(typval_T *argvars, typval_T *rettv, int exact)        dict_add_nr_str(dict, "nowait",  mp->m_nowait  ? 1L : 0L, NULL);        dict_add_nr_str(dict, "mode",    0L, mapmode); -      free(lhs); -      free(mapmode); +      xfree(lhs); +      xfree(mapmode);      }    }  } @@ -11412,7 +11412,7 @@ static void find_some_match(typval_T *argvars, typval_T *rettv, int type)            match = FALSE;            break;          } -        free(tofree); +        xfree(tofree);          str = echo_string(&li->li_tv, &tofree, strbuf, 0);          if (str == NULL)            break; @@ -11476,7 +11476,7 @@ static void find_some_match(typval_T *argvars, typval_T *rettv, int type)    }  theend: -  free(tofree); +  xfree(tofree);    p_cpo = save_cpo;  } @@ -11710,7 +11710,7 @@ static int mkdir_recurse(char_u *dir, int prot)      r = OK;    else if (mkdir_recurse(updir, prot) == OK)      r = vim_mkdir_emsg(updir, prot); -  free(updir); +  xfree(updir);    return r;  } @@ -12139,7 +12139,7 @@ static void f_readfile(typval_T *argvars, typval_T *rettv)        --cnt;      } -  free(prev); +  xfree(prev);    fclose(fd);  } @@ -12289,7 +12289,7 @@ static void f_remove(typval_T *argvars, typval_T *rettv)          // Remove one item, return its value.          vim_list_remove(l, item, item);          *rettv = item->li_tv; -        free(item); +        xfree(item);        } else {          /* Remove range of items, return list with values. */          end = get_tv_number_chk(&argvars[2], &error); @@ -12432,8 +12432,8 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)          buf[len] = NUL;          if (limit-- == 0) { -          free(p); -          free(remain); +          xfree(p); +          xfree(remain);            EMSG(_("E655: Too many symbolic links (cycle?)"));            rettv->vval.v_string = NULL;            goto fail; @@ -12451,7 +12451,7 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)            cpy = remain;            remain = remain ?              concat_str(q - 1, remain) : (char_u *) xstrdup((char *)q - 1); -          free(cpy); +          xfree(cpy);            q[-1] = NUL;          } @@ -12466,10 +12466,10 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)            cpy = xmalloc(STRLEN(p) + STRLEN(buf) + 1);            STRCPY(cpy, p);            STRCPY(path_tail(cpy), buf); -          free(p); +          xfree(p);            p = cpy;          } else { -          free(p); +          xfree(p);            p = vim_strsave(buf);          }        } @@ -12482,14 +12482,14 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)        len = q - remain - (*q != NUL);        cpy = vim_strnsave(p, STRLEN(p) + len);        STRNCAT(cpy, remain, len); -      free(p); +      xfree(p);        p = cpy;        /* Shorten "remain". */        if (*q != NUL)          STRMOVE(remain, q - 1);        else { -        free(remain); +        xfree(remain);          remain = NULL;        }      } @@ -12507,7 +12507,7 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)                             || vim_ispathsep(p[2])))))) {          /* Prepend "./". */          cpy = concat_str((char_u *)"./", p); -        free(p); +        xfree(p);          p = cpy;        } else if (!is_relative_to_current) {          /* Strip leading "./". */ @@ -12538,7 +12538,7 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)  #ifdef HAVE_READLINK  fail: -  free(buf); +  xfree(buf);  #endif    rettv->v_type = VAR_STRING;  } @@ -13256,8 +13256,8 @@ do_searchpair (    if ((flags & SP_NOMOVE) || retval == 0)      curwin->w_cursor = save_cursor; -  free(pat2); -  free(pat3); +  xfree(pat2); +  xfree(pat3);    if (p_cpo == empty_option)      p_cpo = save_cpo;    else @@ -13329,7 +13329,7 @@ static void f_setbufvar(typval_T *argvars, typval_T *rettv)        STRCPY(bufvarname, "b:");        STRCPY(bufvarname + 2, varname);        set_var(bufvarname, varp, TRUE); -      free(bufvarname); +      xfree(bufvarname);      }      /* reset notion of buffer */ @@ -13632,8 +13632,8 @@ static void f_setreg(typval_T *argvars, typval_T *rettv)  free_lstval:      while (curallocval > allocval) -        free(*--curallocval); -    free(lstval); +        xfree(*--curallocval); +    xfree(lstval);    } else {      char_u *strval = get_tv_string_chk(&argvars[1]);      if (strval == NULL) { @@ -13673,7 +13673,7 @@ static void f_settabvar(typval_T *argvars, typval_T *rettv)      STRCPY(tabvarname, "t:");      STRCPY(tabvarname + 2, varname);      set_var(tabvarname, varp, TRUE); -    free(tabvarname); +    xfree(tabvarname);      /* Restore current tabpage */      if (valid_tabpage(save_curtab)) @@ -13739,7 +13739,7 @@ static void setwinvar(typval_T *argvars, typval_T *rettv, int off)        STRCPY(winvarname, "w:");        STRCPY(winvarname + 2, varname);        set_var(winvarname, varp, TRUE); -      free(winvarname); +      xfree(winvarname);      }      restore_win(save_curwin, save_curtab, TRUE);    } @@ -13888,8 +13888,8 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)      res = si1->idx > si2->idx ? 1 : -1;    } -  free(tofree1); -  free(tofree2); +  xfree(tofree1); +  xfree(tofree2);    return res;  } @@ -14095,7 +14095,7 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)        }      } -    free(ptrs); +    xfree(ptrs);    }  } @@ -14365,7 +14365,7 @@ static void f_strftime(typval_T *argvars, typval_T *rettv)        result_buf[0] = NUL;      if (conv.vc_type != CONV_NONE) -      free(p); +      xfree(p);      convert_setup(&conv, enc, p_enc);      if (conv.vc_type != CONV_NONE)        rettv->vval.v_string = string_convert(&conv, result_buf, NULL); @@ -14374,7 +14374,7 @@ static void f_strftime(typval_T *argvars, typval_T *rettv)      /* Release conversion descriptors */      convert_setup(&conv, NULL, NULL); -    free(enc); +    xfree(enc);    }  } @@ -14862,7 +14862,7 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,    char *res = NULL;    int status = os_system(cmd, input, input_len, &res, &nread); -  free(input); +  xfree(input);    set_vim_var_nr(VV_SHELL_ERROR, (long) status); @@ -14885,7 +14885,7 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,      rettv->vval.v_list->lv_refcount++;      rettv->v_type = VAR_LIST; -    free(res); +    xfree(res);    } else {      // res may contain several NULs before the final terminating one.      // Replace them with SOH (1) like in get_cmd_output() to avoid truncation. @@ -15043,7 +15043,7 @@ static void f_tagfiles(typval_T *argvars, typval_T *rettv)    }    tagname_free(&tn); -  free(fname); +  xfree(fname);  }  /* @@ -15372,7 +15372,7 @@ static void f_undofile(typval_T *argvars, typval_T *rettv)        if (ffname != NULL)          rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE); -      free(ffname); +      xfree(ffname);      }    }  } @@ -16115,7 +16115,7 @@ static char_u *make_expanded_name(char_u *in_start, char_u *expr_start, char_u *      STRCAT(retval, temp_result);      STRCAT(retval, expr_end + 1);    } -  free(temp_result); +  xfree(temp_result);    *in_end = c1;                 /* put char back for error messages */    *expr_start = '{'; @@ -16127,7 +16127,7 @@ static char_u *make_expanded_name(char_u *in_start, char_u *expr_start, char_u *        /* Further expansion! */        temp_result = make_expanded_name(retval, expr_start,            expr_end, temp_result); -      free(retval); +      xfree(retval);        retval = temp_result;      }    } @@ -16228,7 +16228,7 @@ set_vim_var_string (     * Will always be invoked when "v:progname" is set. */    vimvars[VV_VERSION].vv_nr = VIM_VERSION_100; -  free(vimvars[idx].vv_str); +  xfree(vimvars[idx].vv_str);    if (val == NULL)      vimvars[idx].vv_str = NULL;    else if (len == -1) @@ -16307,7 +16307,7 @@ char_u *set_cmdarg(exarg_T *eap, char_u *oldarg)    oldval = vimvars[VV_CMDARG].vv_str;    if (eap == NULL) { -    free(oldval); +    xfree(oldval);      vimvars[VV_CMDARG].vv_str = oldarg;      return NULL;    } @@ -16490,7 +16490,7 @@ void free_tv(typval_T *varp)        func_unref(varp->vval.v_string);      /*FALLTHROUGH*/      case VAR_STRING: -      free(varp->vval.v_string); +      xfree(varp->vval.v_string);        break;      case VAR_LIST:        list_unref(varp->vval.v_list); @@ -16506,7 +16506,7 @@ void free_tv(typval_T *varp)        EMSG2(_(e_intern2), "free_tv()");        break;      } -    free(varp); +    xfree(varp);    }  } @@ -16520,12 +16520,12 @@ void clear_tv(typval_T *varp)      case VAR_FUNC:        func_unref(varp->vval.v_string);        if (varp->vval.v_string != empty_string) { -        free(varp->vval.v_string); +        xfree(varp->vval.v_string);        }        varp->vval.v_string = NULL;        break;      case VAR_STRING: -      free(varp->vval.v_string); +      xfree(varp->vval.v_string);        varp->vval.v_string = NULL;        break;      case VAR_LIST: @@ -16929,7 +16929,7 @@ static void vars_clear_ext(hashtab_T *ht, int free_val)        if (free_val)          clear_tv(&v->di_tv);        if ((v->di_flags & DI_FLAGS_FIX) == 0) -        free(v); +        xfree(v);      }    }    hash_clear(ht); @@ -16946,7 +16946,7 @@ static void delete_var(hashtab_T *ht, hashitem_T *hi)    hash_remove(ht, hi);    clear_tv(&di->di_tv); -  free(di); +  xfree(di);  }  /* @@ -16962,7 +16962,7 @@ static void list_one_var(dictitem_T *v, char_u *prefix, int *first)    s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID);    list_one_var_a(prefix, v->di_key, v->di_tv.v_type,        s == NULL ? (char_u *)"" : s, first); -  free(tofree); +  xfree(tofree);  }  static void  @@ -17057,7 +17057,7 @@ set_var (       */      if (ht == &vimvarht) {        if (v->di_tv.v_type == VAR_STRING) { -        free(v->di_tv.vval.v_string); +        xfree(v->di_tv.vval.v_string);          if (copy || tv->v_type != VAR_STRING)            v->di_tv.vval.v_string = vim_strsave(get_tv_string(tv));          else { @@ -17094,7 +17094,7 @@ set_var (      v = xmalloc(sizeof(dictitem_T) + STRLEN(varname));      STRCPY(v->di_key, varname);      if (hash_add(ht, DI2HIKEY(v)) == FAIL) { -      free(v); +      xfree(v);        return;      }      v->di_flags = 0; @@ -17385,7 +17385,7 @@ void ex_echo(exarg_T *eap)                (void)msg_outtrans_len_attr(p, 1, echo_attr);            }          } -      free(tofree); +      xfree(tofree);      }      clear_tv(&rettv);      arg = skipwhite(arg); @@ -17631,7 +17631,7 @@ void ex_function(exarg_T *eap)      if (!aborting()) {        if (!eap->skip && fudi.fd_newkey != NULL)          EMSG2(_(e_dictkey), fudi.fd_newkey); -      free(fudi.fd_newkey); +      xfree(fudi.fd_newkey);        return;      } else        eap->skip = TRUE; @@ -17747,7 +17747,7 @@ void ex_function(exarg_T *eap)        for (int i = 0; i < newargs.ga_len; ++i)          if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0) {            EMSG2(_("E853: Duplicate argument name: %s"), arg); -          free(arg); +          xfree(arg);            goto erret;          } @@ -17853,7 +17853,7 @@ void ex_function(exarg_T *eap)        /* between ":append" and "." and between ":python <<EOF" and "EOF"         * don't check for ":endfunc". */        if (STRCMP(theline, skip_until) == 0) { -        free(skip_until); +        xfree(skip_until);          skip_until = NULL;        }      } else { @@ -17864,7 +17864,7 @@ void ex_function(exarg_T *eap)        /* Check for "endfunction". */        if (checkforcmd(&p, "endfunction", 4) && nesting-- == 0) {          if (line_arg == NULL) -          free(theline); +          xfree(theline);          break;        } @@ -17884,7 +17884,7 @@ void ex_function(exarg_T *eap)            p = skipwhite(p + 1);          }          p += eval_fname_script(p); -        free(trans_function_name(&p, TRUE, 0, NULL)); +        xfree(trans_function_name(&p, TRUE, 0, NULL));          if (*skipwhite(p) == '(') {            nesting++;            indent += 2; @@ -17933,7 +17933,7 @@ void ex_function(exarg_T *eap)       * is an extra alloc/free. */      p = vim_strsave(theline);      if (line_arg == NULL) -      free(theline); +      xfree(theline);      theline = p;      ((char_u **)(newlines.ga_data))[newlines.ga_len++] = theline; @@ -17978,7 +17978,7 @@ void ex_function(exarg_T *eap)        /* redefine existing function */        ga_clear_strings(&(fp->uf_args));        ga_clear_strings(&(fp->uf_lines)); -      free(name); +      xfree(name);        name = NULL;      }    } else { @@ -18000,7 +18000,7 @@ void ex_function(exarg_T *eap)      /* Give the function a sequential number.  Can only be used with a       * Funcref! */ -    free(name); +    xfree(name);      sprintf(numbuf, "%d", ++func_nr);      name = vim_strsave((char_u *)numbuf);    } @@ -18020,7 +18020,7 @@ void ex_function(exarg_T *eap)          if (slen > plen && fnamecmp(p,                  sourcing_name + slen - plen) == 0)            j = OK; -        free(scriptname); +        xfree(scriptname);        }        if (j == FAIL) {          EMSG2(_( @@ -18037,8 +18037,8 @@ void ex_function(exarg_T *eap)          /* add new dict entry */          fudi.fd_di = dictitem_alloc(fudi.fd_newkey);          if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL) { -          free(fudi.fd_di); -          free(fp); +          xfree(fudi.fd_di); +          xfree(fp);            goto erret;          }        } else @@ -18075,9 +18075,9 @@ erret:    ga_clear_strings(&newargs);    ga_clear_strings(&newlines);  ret_free: -  free(skip_until); -  free(fudi.fd_newkey); -  free(name); +  xfree(skip_until); +  xfree(fudi.fd_newkey); +  xfree(name);    did_emsg |= saved_did_emsg;    need_wait_return |= saved_wait_return;  } @@ -18389,7 +18389,7 @@ static int function_exists(char_u *name)     * "funcname(...", not "funcname!...". */    if (p != NULL && (*nm == NUL || *nm == '('))      n = translated_function_exists(p); -  free(p); +  xfree(p);    return n;  } @@ -18496,7 +18496,7 @@ void func_dump_profile(FILE *fd)      prof_sort_list(fd, sorttab, st_len, "SELF", TRUE);    } -  free(sorttab); +  xfree(sorttab);  }  static void  @@ -18612,7 +18612,7 @@ script_autoload (        ret = TRUE;    } -  free(tofree); +  xfree(tofree);    return ret;  } @@ -18702,14 +18702,14 @@ void ex_delfunction(exarg_T *eap)    p = eap->arg;    name = trans_function_name(&p, eap->skip, 0, &fudi); -  free(fudi.fd_newkey); +  xfree(fudi.fd_newkey);    if (name == NULL) {      if (fudi.fd_dict != NULL && !eap->skip)        EMSG(_(e_funcref));      return;    }    if (!ends_excmd(*skipwhite(p))) { -    free(name); +    xfree(name);      EMSG(_(e_trailing));      return;    } @@ -18719,7 +18719,7 @@ void ex_delfunction(exarg_T *eap)    if (!eap->skip)      fp = find_func(name); -  free(name); +  xfree(name);    if (!eap->skip) {      if (fp == NULL) { @@ -18755,9 +18755,9 @@ static void func_free(ufunc_T *fp)    /* clear this function */    ga_clear_strings(&(fp->uf_args));    ga_clear_strings(&(fp->uf_lines)); -  free(fp->uf_tml_count); -  free(fp->uf_tml_total); -  free(fp->uf_tml_self); +  xfree(fp->uf_tml_count); +  xfree(fp->uf_tml_total); +  xfree(fp->uf_tml_self);    /* remove the function from the function hashtable */    hi = hash_find(&func_hashtab, UF2HIKEY(fp)); @@ -18766,7 +18766,7 @@ static void func_free(ufunc_T *fp)    else      hash_remove(&func_hashtab, hi); -  free(fp); +  xfree(fp);  }  /* @@ -19003,7 +19003,7 @@ call_user_func (                  s = buf;                }                msg_puts(s); -              free(tofree); +              xfree(tofree);              }            }          } @@ -19090,7 +19090,7 @@ call_user_func (            s = buf;          }          smsg((char_u *)_("%s returning %s"), sourcing_name, s); -        free(tofree); +        xfree(tofree);        }      }      msg_puts((char_u *)"\n");       /* don't overwrite this either */ @@ -19099,7 +19099,7 @@ call_user_func (      --no_wait_return;    } -  free(sourcing_name); +  xfree(sourcing_name);    sourcing_name = save_sourcing_name;    sourcing_lnum = save_sourcing_lnum;    current_SID = save_current_SID; @@ -19196,7 +19196,7 @@ free_funccal (      for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)        clear_tv(&li->li_tv); -  free(fc); +  xfree(fc);  }  /* @@ -19327,7 +19327,7 @@ int do_return(exarg_T *eap, int reanimate, int is_cmd, void *rettv)        clear_tv(current_funccal->rettv);        *current_funccal->rettv = *(typval_T *)rettv;        if (!is_cmd) -        free(rettv); +        xfree(rettv);      }    } @@ -19361,7 +19361,7 @@ char_u *get_return_cmd(void *rettv)    STRNCPY(IObuff + 8, s, IOSIZE - 8);    if (STRLEN(s) + 8 >= IOSIZE)      STRCPY(IObuff + IOSIZE - 4, "..."); -  free(tofree); +  xfree(tofree);    return vim_strsave(IObuff);  } @@ -19549,16 +19549,16 @@ int read_viminfo_varlist(vir_T *virp, int writing)               * string. */              tv.v_type = VAR_STRING;            else { -            free(tv.vval.v_string); +            xfree(tv.vval.v_string);              tv = *etv; -            free(etv); +            xfree(etv);            }          }          set_var(virp->vir_line + 1, &tv, FALSE);          if (tv.v_type == VAR_STRING) -          free(tv.vval.v_string); +          xfree(tv.vval.v_string);          else if (tv.v_type == VAR_DICT || tv.v_type == VAR_LIST)            clear_tv(&tv);        } @@ -19604,7 +19604,7 @@ void write_viminfo_varlist(FILE *fp)          p = echo_string(&this_var->di_tv, &tofree, numbuf, 0);          if (p != NULL)            viminfo_writestring(fp, p); -        free(tofree); +        xfree(tofree);        }      }    } @@ -19642,10 +19642,10 @@ int store_session_globals(FILE *fd)                   (this_var->di_tv.v_type == VAR_STRING) ? '"'                   : ' ') < 0)              || put_eol(fd) == FAIL) { -          free(p); +          xfree(p);            return FAIL;          } -        free(p); +        xfree(p);        } else if (this_var->di_tv.v_type == VAR_FLOAT                   && var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION) {          float_T f = this_var->di_tv.vval.v_float; @@ -19676,7 +19676,7 @@ void last_set_msg(scid_T scriptID)      verbose_enter();      MSG_PUTS(_("\n\tLast set from "));      MSG_PUTS(p); -    free(p); +    xfree(p);      verbose_leave();    }  } @@ -19756,7 +19756,7 @@ repeat:  #endif          ) {        *fnamep = expand_env_save(*fnamep); -      free(*bufp);          /* free any allocated file name */ +      xfree(*bufp);          /* free any allocated file name */        *bufp = *fnamep;        if (*fnamep == NULL)          return -1; @@ -19776,7 +19776,7 @@ repeat:      /* FullName_save() is slow, don't use it when not needed. */      if (*p != NUL || !vim_isAbsName(*fnamep)) {        *fnamep = FullName_save(*fnamep, *p != NUL); -      free(*bufp);          /* free any allocated file name */ +      xfree(*bufp);          /* free any allocated file name */        *bufp = *fnamep;        if (*fnamep == NULL)          return -1; @@ -19786,7 +19786,7 @@ repeat:      if (os_isdir(*fnamep)) {        /* Make room for one or two extra characters. */        *fnamep = vim_strnsave(*fnamep, (int)STRLEN(*fnamep) + 2); -      free(*bufp);          /* free any allocated file name */ +      xfree(*bufp);          /* free any allocated file name */        *bufp = *fnamep;        if (*fnamep == NULL)          return -1; @@ -19822,7 +19822,7 @@ repeat:          if (s != NULL) {            *fnamep = s;            if (pbuf != NULL) { -            free(*bufp);               /* free any allocated file name */ +            xfree(*bufp);               /* free any allocated file name */              *bufp = pbuf;              pbuf = NULL;            } @@ -19833,11 +19833,11 @@ repeat:          if (*dirname == '~') {            s = vim_strsave(dirname);            *fnamep = s; -          free(*bufp); +          xfree(*bufp);            *bufp = s;          }        } -      free(pbuf); +      xfree(pbuf);      }    } @@ -19855,7 +19855,7 @@ repeat:      *fnamelen = (int)(tail - *fnamep);      if (*fnamelen == 0) {        /* Result is empty.  Turn it into "." to make ":cd %:h" work. */ -      free(*bufp); +      xfree(*bufp);        *bufp = *fnamep = tail = vim_strsave((char_u *)".");        *fnamelen = 1;      } else { @@ -19940,13 +19940,13 @@ repeat:            s = do_string_sub(str, pat, sub, flags);            *fnamep = s;            *fnamelen = (int)STRLEN(s); -          free(*bufp); +          xfree(*bufp);            *bufp = s;            didit = TRUE; -          free(sub); -          free(str); +          xfree(sub); +          xfree(str);          } -        free(pat); +        xfree(pat);        }        /* after using ":s", repeat all the modifiers */        if (didit) @@ -19956,7 +19956,7 @@ repeat:    if (src[*usedlen] == ':' && src[*usedlen + 1] == 'S') {      p = vim_strsave_shellescape(*fnamep, false, false); -    free(*bufp); +    xfree(*bufp);      *bufp = *fnamep = p;      *fnamelen = (int)STRLEN(p);      *usedlen += 2; @@ -20099,7 +20099,7 @@ static inline Job *common_job_start(JobOptions opts, typval_T *rettv)    if (rettv->vval.v_number <= 0) {      if (rettv->vval.v_number == 0) {        EMSG(_(e_jobtblfull)); -      free(opts.term_name); +      xfree(opts.term_name);        free_term_job_data(data);      } else {        EMSG(_(e_jobexe)); @@ -20125,7 +20125,7 @@ static inline void free_term_job_data(TerminalJobData *data) {      data->self->internal_refcount--;      dict_unref(data->self);    } -  free(data); +  xfree(data);  }  static inline bool is_user_job(Job *job) @@ -20236,7 +20236,7 @@ static void on_job_exit(Job *job, int status, void *d)  static void term_write(char *buf, size_t size, void *data)  {    Job *job = ((TerminalJobData *)data)->job; -  WBuffer *wbuf = wstream_new_buffer(xmemdup(buf, size), size, 1, free); +  WBuffer *wbuf = wstream_new_buffer(xmemdup(buf, size), size, 1, xfree);    job_write(job, wbuf);  } @@ -20310,7 +20310,7 @@ end:      // exit event, safe to free job data now      term_job_data_decref(ev->data);    } -  free(ev); +  xfree(ev);  }  static void script_host_eval(char *name, typval_T *argvars, typval_T *rettv) diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index c686c5effa..c57861282d 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -533,9 +533,9 @@ void ex_sort(exarg_T *eap)    beginline(BL_WHITE | BL_FIX);  sortend: -  free(nrs); -  free(sortbuf1); -  free(sortbuf2); +  xfree(nrs); +  xfree(sortbuf1); +  xfree(sortbuf2);    vim_regfree(regmatch.regprog);    if (got_int)      EMSG(_(e_interr)); @@ -698,7 +698,7 @@ int do_move(linenr_T line1, linenr_T line2, linenr_T dest)    for (extra = 0, l = line1; l <= line2; l++) {      str = vim_strsave(ml_get(l + extra));      ml_append(dest + l - line1, str, (colnr_T)0, FALSE); -    free(str); +    xfree(str);      if (dest < line1)        extra++;    } @@ -804,7 +804,7 @@ void ex_copy(linenr_T line1, linenr_T line2, linenr_T n)       * ml_append() */      p = vim_strsave(ml_get(line1));      ml_append(curwin->w_cursor.lnum, p, (colnr_T)0, FALSE); -    free(p); +    xfree(p);      /* situation 2: skip already copied lines */      if (line1 == n) @@ -827,7 +827,7 @@ static char_u   *prevcmd = NULL;        /* the previous command */  #if defined(EXITFREE)  void free_prev_shellcmd(void)  { -  free(prevcmd); +  xfree(prevcmd);  }  #endif @@ -878,7 +878,7 @@ void do_bang(int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)      if (ins_prevcmd) {        if (prevcmd == NULL) {          EMSG(_(e_noprev)); -        free(newcmd); +        xfree(newcmd);          return;        }        len += (int)STRLEN(prevcmd); @@ -891,7 +891,7 @@ void do_bang(int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)        STRCAT(t, prevcmd);      p = t + STRLEN(t);      STRCAT(t, trailarg); -    free(newcmd); +    xfree(newcmd);      newcmd = t;      /* @@ -914,7 +914,7 @@ void do_bang(int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)      }    } while (trailarg != NULL); -  free(prevcmd); +  xfree(prevcmd);    prevcmd = newcmd;    if (bangredo) { /* put cmd in redo buffer for ! command */ @@ -924,7 +924,7 @@ void do_bang(int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)      char_u *cmd = vim_strsave_escaped(prevcmd, (char_u *)"%#");      AppendToRedobuffLit(cmd, -1); -    free(cmd); +    xfree(cmd);      AppendToRedobuff((char_u *)"\n");      bangredo = FALSE;    } @@ -955,7 +955,7 @@ void do_bang(int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)      apply_autocmds(EVENT_SHELLFILTERPOST, NULL, NULL, FALSE, curbuf);    }    if (free_newcmd) -    free(newcmd); +    xfree(newcmd);  }  /* @@ -1076,7 +1076,7 @@ do_filter (    if (do_out) {      if (u_save((linenr_T)(line2), (linenr_T)(line2 + 1)) == FAIL) { -      free(cmd_buf); +      xfree(cmd_buf);        goto error;      }      redraw_curbuf_later(VALID); @@ -1100,7 +1100,7 @@ do_filter (      redraw_later_clear();      wait_return(FALSE);    } -  free(cmd_buf); +  xfree(cmd_buf);    did_check_timestamps = FALSE;    need_check_timestamps = TRUE; @@ -1197,8 +1197,8 @@ filterend:      os_remove((char *)itmp);    if (otmp != NULL)      os_remove((char *)otmp); -  free(itmp); -  free(otmp); +  xfree(itmp); +  xfree(otmp);  }  /* @@ -1448,7 +1448,7 @@ read_viminfo (      verbose_leave();    } -  free(fname); +  xfree(fname);    if (fp == NULL)      return FAIL; @@ -1550,7 +1550,7 @@ void write_viminfo(char_u *file, int forceit)             * write the viminfo file then.             */            if (*wp == 'a') { -            free(tempname); +            xfree(tempname);              tempname = NULL;              break;            } @@ -1586,7 +1586,7 @@ void write_viminfo(char_u *file, int forceit)         * "normal" temp file.         */        if (fp_out == NULL) { -        free(tempname); +        xfree(tempname);          if ((tempname = vim_tempname()) != NULL)            fp_out = mch_fopen((char *)tempname, WRITEBIN);        } @@ -1639,8 +1639,8 @@ void write_viminfo(char_u *file, int forceit)    }  end: -  free(fname); -  free(tempname); +  xfree(fname); +  xfree(tempname);  }  /* @@ -1721,7 +1721,7 @@ static void do_viminfo(FILE *fp_in, FILE *fp_out, int flags)        && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)))      copy_viminfo_marks(&vir, fp_out, count, eof, flags); -  free(vir.vir_line); +  xfree(vir.vir_line);    if (vir.vir_conv.vc_type != CONV_NONE)      convert_setup(&vir.vir_conv, NULL, NULL);  } @@ -1886,7 +1886,7 @@ viminfo_readstring (    if (convert && virp->vir_conv.vc_type != CONV_NONE && *retval != NUL) {      d = string_convert(&virp->vir_conv, retval, NULL);      if (d != NULL) { -      free(retval); +      xfree(retval);        retval = d;      }    } @@ -2000,8 +2000,8 @@ int rename_buffer(char_u *new_fname)      if (buf != NULL && !cmdmod.keepalt)        curwin->w_alt_fnum = buf->b_fnum;    } -  free(fname); -  free(sfname); +  xfree(fname); +  xfree(sfname);    apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);    /* Change directories when the 'acd' option is set. */    do_autochdir(); @@ -2206,7 +2206,7 @@ int do_write(exarg_T *eap)    }  theend: -  free(free_fname); +  xfree(free_fname);    return retval;  } @@ -2279,7 +2279,7 @@ check_overwrite (          copy_option_part(&p, dir, MAXPATHL, ",");        }        swapname = makeswapname(fname, ffname, curbuf, dir); -      free(dir); +      xfree(dir);        if (os_file_exists(swapname)) {          if (p_confirm || cmdmod.confirm) {            char_u buff[DIALOG_MSG_SIZE]; @@ -2289,18 +2289,18 @@ check_overwrite (                swapname);            if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2)                != VIM_YES) { -            free(swapname); +            xfree(swapname);              return FAIL;            }            eap->forceit = TRUE;          } else {            EMSG2(_("E768: Swap file exists: %s (:silent! overrides)"),                swapname); -          free(swapname); +          xfree(swapname);            return FAIL;          }        } -      free(swapname); +      xfree(swapname);      }    }    return OK; @@ -2486,7 +2486,7 @@ int getfile(int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum,      retval = 1;         /* error encountered */  theend: -  free(free_me); +  xfree(free_me);    return retval;  } @@ -2623,7 +2623,7 @@ do_ecmd (      }      set_vim_var_string(VV_SWAPCOMMAND, p, -1);      did_set_swapcommand = TRUE; -    free(p); +    xfree(p);    }    /* @@ -2712,7 +2712,7 @@ do_ecmd (          goto theend;        }        if (aborting()) {             /* autocmds may abort script processing */ -        free(new_name); +        xfree(new_name);          goto theend;        }        if (buf == curbuf)                /* already in new buffer */ @@ -2737,7 +2737,7 @@ do_ecmd (          }          if (aborting()) {           /* autocmds may abort script processing */ -          free(new_name); +          xfree(new_name);            goto theend;          }          /* Be careful again, like above. */ @@ -2775,7 +2775,7 @@ do_ecmd (          did_get_winopts = TRUE;        } -      free(new_name); +      xfree(new_name);        au_new_curbuf = NULL;      } else        ++curbuf->b_nwindows; @@ -2849,7 +2849,7 @@ do_ecmd (        delbuf_msg(new_name);             /* frees new_name */        goto theend;      } -    free(new_name); +    xfree(new_name);      /* If autocommands change buffers under our fingers, forget about       * re-editing the file.  Should do the buf_clear_file(), but perhaps @@ -3040,7 +3040,7 @@ do_ecmd (  theend:    if (did_set_swapcommand)      set_vim_var_string(VV_SWAPCOMMAND, NULL, -1); -  free(free_fname); +  xfree(free_fname);    return retval;  } @@ -3048,7 +3048,7 @@ static void delbuf_msg(char_u *name)  {    EMSG2(_("E143: Autocommands unexpectedly deleted new buffer %s"),        name == NULL ? (char_u *)"" : name); -  free(name); +  xfree(name);    au_new_curbuf = NULL;  } @@ -3140,7 +3140,7 @@ void ex_append(exarg_T *eap)      if ((p[0] == '.' && p[1] == NUL)          || (!did_undo && u_save(lnum, lnum + 1 + (empty ? 1 : 0))              == FAIL)) { -      free(theline); +      xfree(theline);        break;      } @@ -3152,7 +3152,7 @@ void ex_append(exarg_T *eap)      ml_append(lnum, theline, (colnr_T)0, FALSE);      appended_lines_mark(lnum, 1L); -    free(theline); +    xfree(theline);      ++lnum;      if (empty) { @@ -3481,7 +3481,7 @@ void do_sub(exarg_T *eap)          }          sub = old_sub;        } else { -        free(old_sub); +        xfree(old_sub);          old_sub = vim_strsave(sub);        }      } @@ -3742,7 +3742,7 @@ void do_sub(exarg_T *eap)            lnum += regmatch.startpos[0].lnum;            sub_firstlnum += regmatch.startpos[0].lnum;            nmatch -= regmatch.startpos[0].lnum; -          free(sub_firstline); +          xfree(sub_firstline);            sub_firstline = NULL;          } @@ -3846,7 +3846,7 @@ void do_sub(exarg_T *eap)                resp = getexmodeline('?', NULL, 0);                if (resp != NULL) {                  typed = *resp; -                free(resp); +                xfree(resp);                }              } else {                char_u *orig_line = NULL; @@ -4061,7 +4061,7 @@ void do_sub(exarg_T *eap)           * line and continue in that one. */          if (nmatch > 1) {            sub_firstlnum += nmatch - 1; -          free(sub_firstline); +          xfree(sub_firstline);            sub_firstline = vim_strsave(ml_get(sub_firstlnum));            /* When going beyond the last line, stop substituting. */            if (sub_firstlnum <= line2) @@ -4076,7 +4076,7 @@ void do_sub(exarg_T *eap)          if (skip_match) {            /* Already hit end of the buffer, sub_firstlnum is one             * less than what it ought to be. */ -          free(sub_firstline); +          xfree(sub_firstline);            sub_firstline = vim_strsave((char_u *)"");            copycol = 0;          } @@ -4204,7 +4204,7 @@ skip:              }              sub_firstlnum = lnum; -            free(sub_firstline);                /* free the temp buffer */ +            xfree(sub_firstline);                /* free the temp buffer */              sub_firstline = new_start;              new_start = NULL;              matchcol = (colnr_T)STRLEN(sub_firstline) - matchcol; @@ -4234,8 +4234,8 @@ skip:        if (did_sub)          ++sub_nlines; -      free(new_start);              /* for when substitute was cancelled */ -      free(sub_firstline);          /* free the copy of the original line */ +      xfree(new_start);              /* for when substitute was cancelled */ +      xfree(sub_firstline);          /* free the copy of the original line */        sub_firstline = NULL;      } @@ -4250,7 +4250,7 @@ skip:      changed_lines(first_line, 0, last_line - i, i);    } -  free(sub_firstline);   /* may have to free allocated copy of the line */ +  xfree(sub_firstline);   /* may have to free allocated copy of the line */    /* ":s/pat//n" doesn't move the cursor */    if (do_count) @@ -4510,7 +4510,7 @@ void global_exe(char_u *cmd)  int read_viminfo_sub_string(vir_T *virp, int force)  {    if (force) -    free(old_sub); +    xfree(old_sub);    if (force || old_sub == NULL)      old_sub = viminfo_readstring(virp, 1, TRUE);    return viminfo_readline(virp); @@ -4527,7 +4527,7 @@ void write_viminfo_sub_string(FILE *fp)  #if defined(EXITFREE)  void free_old_sub(void)  { -  free(old_sub); +  xfree(old_sub);  }  #endif @@ -4739,7 +4739,7 @@ void ex_help(exarg_T *eap)      curwin->w_alt_fnum = alt_fnum;  erret: -  free(tag); +  xfree(tag);  } @@ -5003,7 +5003,7 @@ int find_help_tags(char_u *arg, int *num_matches, char_u ***matches, int keep_la          sizeof(char_u *), help_compare);      /* Delete more than TAG_MANY to reduce the size of the listing. */      while (*num_matches > TAG_MANY) -      free((*matches)[--*num_matches]); +      xfree((*matches)[--*num_matches]);    }    return OK;  } @@ -5165,7 +5165,7 @@ void fix_help_buffer(void)                  if (fnamecmp(e1, ".txt") != 0                      && fnamecmp(e1, fname + 4) != 0) {                    /* Not .txt and not .abx, remove it. */ -                  free(fnames[i1]); +                  xfree(fnames[i1]);                    fnames[i1] = NULL;                    continue;                  } @@ -5174,7 +5174,7 @@ void fix_help_buffer(void)                  if (fnamecmp(e1, ".txt") == 0                      && fnamecmp(e2, fname + 4) == 0) {                    /* use .abx instead of .txt */ -                  free(fnames[i1]); +                  xfree(fnames[i1]);                    fnames[i1] = NULL;                  }                } @@ -5234,7 +5234,7 @@ void fix_help_buffer(void)                  ml_append(lnum, cp, (colnr_T)0, FALSE);                  if (cp != IObuff) -                  free(cp); +                  xfree(cp);                  ++lnum;                }                fclose(fd); @@ -5243,7 +5243,7 @@ void fix_help_buffer(void)            }          }          if (mustfree) -          free(rt); +          xfree(rt);        }        break;      } @@ -5310,7 +5310,7 @@ void ex_helptags(exarg_T *eap)            EW_FILE|EW_SILENT) == FAIL        || filecount == 0) {      EMSG2("E151: No match: %s", NameBuff); -    free(dirname); +    xfree(dirname);      return;    } @@ -5372,7 +5372,7 @@ void ex_helptags(exarg_T *eap)    ga_clear(&ga);    FreeWild(filecount, files); -  free(dirname); +  xfree(dirname);  }  static void  @@ -5722,7 +5722,7 @@ void ex_sign(exarg_T *eap)  				next_sign_typenr = 1;  			    if (next_sign_typenr == start)  			    { -				free(sp); +				xfree(sp);  				EMSG(_("E612: Too many signs defined"));  				return;  			    } @@ -5755,7 +5755,7 @@ void ex_sign(exarg_T *eap)  		    if (STRNCMP(arg, "icon=", 5) == 0)  		    {  			arg += 5; -			free(sp->sn_icon); +			xfree(sp->sn_icon);  			sp->sn_icon = vim_strnsave(arg, (int)(p - arg));  			backslash_halve(sp->sn_icon);  		    } @@ -5794,7 +5794,7 @@ void ex_sign(exarg_T *eap)  			    return;  			} -			free(sp->sn_text); +			xfree(sp->sn_text);  			/* Allocate one byte more if we need to pad up  			 * with a space. */  			len = (int)(p - arg + ((cells == 1) ? 1 : 0)); @@ -5983,7 +5983,7 @@ void ex_sign(exarg_T *eap)  		    sprintf((char *)cmd, "e +%" PRId64 " %s",                      (int64_t)lnum, buf->b_fname);  		    do_cmdline_cmd(cmd); -		    free(cmd); +		    xfree(cmd);  		}  		foldOpenCursor(); @@ -6076,14 +6076,14 @@ static void sign_list_defined(sign_T *sp)   */  static void sign_undefine(sign_T *sp, sign_T *sp_prev)  { -  free(sp->sn_name); -  free(sp->sn_icon); -  free(sp->sn_text); +  xfree(sp->sn_name); +  xfree(sp->sn_icon); +  xfree(sp->sn_text);    if (sp_prev == NULL)      first_sign = sp->sn_next;    else      sp_prev->sn_next = sp->sn_next; -  free(sp); +  xfree(sp);  }  /* diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 177e404e35..463cc794c7 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -278,11 +278,11 @@ void do_debug(char_u *cmd)            DOCMD_VERBOSE|DOCMD_EXCRESET);        debug_break_level = n; -      free(cmdline); +      xfree(cmdline);      }      lines_left = Rows - 1;    } -  free(cmdline); +  xfree(cmdline);    --RedrawingDisabled;    --no_wait_return; @@ -491,12 +491,12 @@ dbg_parsearg (      if (q == NULL)        return FAIL;      p = expand_env_save(q); -    free(q); +    xfree(q);      if (p == NULL)        return FAIL;      if (*p != '*') {        bp->dbg_name = fix_fname(p); -      free(p); +      xfree(p);      } else        bp->dbg_name = p;    } @@ -526,10 +526,10 @@ void ex_breakadd(exarg_T *eap)      pat = file_pat_to_reg_pat(bp->dbg_name, NULL, NULL, FALSE);      if (pat != NULL) {        bp->dbg_prog = vim_regcomp(pat, RE_MAGIC + RE_STRING); -      free(pat); +      xfree(pat);      }      if (pat == NULL || bp->dbg_prog == NULL) -      free(bp->dbg_name); +      xfree(bp->dbg_name);      else {        if (bp->dbg_lnum == 0)            /* default line number is 1 */          bp->dbg_lnum = 1; @@ -598,14 +598,14 @@ void ex_breakdel(exarg_T *eap)          best_lnum = bpi->dbg_lnum;        }      } -    free(bp->dbg_name); +    xfree(bp->dbg_name);    }    if (todel < 0)      EMSG2(_("E161: Breakpoint not found: %s"), eap->arg);    else {      while (!GA_EMPTY(gap)) { -      free(DEBUGGY(gap, todel).dbg_name); +      xfree(DEBUGGY(gap, todel).dbg_name);        vim_regfree(DEBUGGY(gap, todel).dbg_prog);        --gap->ga_len;        if (todel < gap->ga_len) @@ -727,7 +727,7 @@ debuggy_find (      }    }    if (name != fname) -    free(name); +    xfree(name);    return lnum;  } @@ -759,7 +759,7 @@ void ex_profile(exarg_T *eap)    e = skipwhite(e);    if (len == 5 && STRNCMP(eap->arg, "start", 5) == 0 && *e != NUL) { -    free(profile_fname); +    xfree(profile_fname);      profile_fname = expand_env_save_opt(e, true);      do_profiling = PROF_YES;      profile_set_wait(profile_zero()); @@ -1293,7 +1293,7 @@ buf_found:      set_curbuf(buf, DOBUF_GOTO);  theend: -  free(bufnrs); +  xfree(bufnrs);    return ret;  } @@ -1450,7 +1450,7 @@ do_arglist (          break;        regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);        if (regmatch.regprog == NULL) { -        free(p); +        xfree(p);          break;        } @@ -1459,7 +1459,7 @@ do_arglist (          if (vim_regexec(®match, alist_name(&ARGLIST[match]),                  (colnr_T)0)) {            didone = TRUE; -          free(ARGLIST[match].ae_fname); +          xfree(ARGLIST[match].ae_fname);            memmove(ARGLIST + match, ARGLIST + match + 1,                (ARGCOUNT - match - 1) * sizeof(aentry_T));            --ALIST(curwin)->al_ga.ga_len; @@ -1469,7 +1469,7 @@ do_arglist (          }        vim_regfree(regmatch.regprog); -      free(p); +      xfree(p);        if (!didone)          EMSG2(_(e_nomatch2), ((char_u **)new_ga.ga_data)[i]);      } @@ -1487,7 +1487,7 @@ do_arglist (      if (what == AL_ADD) {        (void)alist_add_list(exp_count, exp_files, after); -      free(exp_files); +      xfree(exp_files);      } else   /* what == AL_SET */        alist_set(ALIST(curwin), exp_count, exp_files, FALSE, NULL, 0);    } @@ -1683,7 +1683,7 @@ void do_argfile(exarg_T *eap, int argn)        if (P_HID(curbuf)) {          p = fix_fname(alist_name(&ARGLIST[argn]));          other = otherfile(p); -        free(p); +        xfree(p);        }        if ((!P_HID(curbuf) || !other)            && check_changed(curbuf, CCGD_AW @@ -1793,7 +1793,7 @@ void ex_argdelete(exarg_T *eap)        EMSG(_(e_invarg));      else {        for (int i = eap->line1; i <= eap->line2; ++i) -        free(ARGLIST[i - 1].ae_fname); +        xfree(ARGLIST[i - 1].ae_fname);        memmove(ARGLIST + eap->line1 - 1, ARGLIST + eap->line2,            (size_t)((ARGCOUNT - eap->line2) * sizeof(aentry_T)));        ALIST(curwin)->al_ga.ga_len -= n; @@ -1858,7 +1858,7 @@ void ex_listdo(exarg_T *eap)            set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);            do_argfile(eap, i);            set_option_value((char_u *)"shm", 0L, p_shm_save, 0); -          free(p_shm_save); +          xfree(p_shm_save);          }          if (curwin->w_arg_idx != i)            break; @@ -1915,7 +1915,7 @@ void ex_listdo(exarg_T *eap)          set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);          goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum);          set_option_value((char_u *)"shm", 0L, p_shm_save, 0); -        free(p_shm_save); +        xfree(p_shm_save);          /* If autocommands took us elsewhere, quit here */          if (curbuf->b_fnum != next_fnum) @@ -2011,7 +2011,7 @@ void ex_compiler(exarg_T *eap)      sprintf((char *)buf, "compiler/%s.vim", eap->arg);      if (source_runtime(buf, TRUE) == FAIL)        EMSG2(_("E666: compiler not supported: %s"), eap->arg); -    free(buf); +    xfree(buf);      do_cmdline_cmd((char_u *)":delcommand CompilerSet"); @@ -2025,7 +2025,7 @@ void ex_compiler(exarg_T *eap)        if (old_cur_comp != NULL) {          set_internal_string_var((char_u *)"g:current_compiler",              old_cur_comp); -        free(old_cur_comp); +        xfree(old_cur_comp);        } else          do_unlet((char_u *)"g:current_compiler", TRUE);      } @@ -2135,8 +2135,8 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,        }      }    } -  free(buf); -  free(rtp_copy); +  xfree(buf); +  xfree(rtp_copy);    if (p_verbose > 0 && !did_one && name != NULL) {      verbose_enter();      smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name); @@ -2273,7 +2273,7 @@ do_source (    if (p == NULL)      return retval;    fname_exp = fix_fname(p); -  free(p); +  xfree(p);    if (fname_exp == NULL)      return retval;    if (os_isdir(fname_exp)) { @@ -2391,7 +2391,7 @@ do_source (      p = string_convert(&cookie.conv, firstline + 3, NULL);      if (p == NULL)        p = vim_strsave(firstline + 3); -    free(firstline); +    xfree(firstline);      firstline = p;    } @@ -2518,12 +2518,12 @@ do_source (    if (l_do_profiling == PROF_YES)      prof_child_exit(&wait_start);               /* leaving a child now */    fclose(cookie.fp); -  free(cookie.nextline); -  free(firstline); +  xfree(cookie.nextline); +  xfree(firstline);    convert_setup(&cookie.conv, NULL, NULL);  theend: -  free(fname_exp); +  xfree(fname_exp);    return retval;  } @@ -2577,7 +2577,7 @@ char_u *get_scriptname(scid_T id)  # if defined(EXITFREE)  void free_scriptnames()  { -# define FREE_SCRIPTNAME(item) free((item)->sn_name) +# define FREE_SCRIPTNAME(item) xfree((item)->sn_name)    GA_DEEP_CLEAR(&script_items, scriptitem_T, FREE_SCRIPTNAME);  }  # endif @@ -2636,7 +2636,7 @@ char_u *getsourceline(int c, void *cookie, int indent)        ga_concat(&ga, line);        ga_concat(&ga, p + 1);        for (;; ) { -        free(sp->nextline); +        xfree(sp->nextline);          sp->nextline = get_one_sourceline(sp);          if (sp->nextline == NULL)            break; @@ -2651,7 +2651,7 @@ char_u *getsourceline(int c, void *cookie, int indent)          ga_concat(&ga, p + 1);        }        ga_append(&ga, NUL); -      free(line); +      xfree(line);        line = ga.ga_data;      }    } @@ -2662,7 +2662,7 @@ char_u *getsourceline(int c, void *cookie, int indent)      /* Convert the encoding of the script line. */      s = string_convert(&sp->conv, line, NULL);      if (s != NULL) { -      free(line); +      xfree(line);        line = s;      }    } @@ -2771,7 +2771,7 @@ static char_u *get_one_sourceline(struct source_cookie *sp)    if (have_read)      return (char_u *)ga.ga_data; -  free(ga.ga_data); +  xfree(ga.ga_data);    return NULL;  } @@ -2874,7 +2874,7 @@ void ex_scriptencoding(exarg_T *eap)    convert_setup(&sp->conv, name, p_enc);    if (name != eap->arg) -    free(name); +    xfree(name);  }  /* @@ -3192,7 +3192,7 @@ static char_u **find_locales(void)      GA_APPEND(char_u *, &locales_ga, loc);      loc = (char_u *)strtok(NULL, "\n");    } -  free(locale_a); +  xfree(locale_a);    // Guarantee that .ga_data is NULL terminated    ga_grow(&locales_ga, 1);    ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL; @@ -3205,8 +3205,8 @@ void free_locales(void)    int i;    if (locales != NULL) {      for (i = 0; locales[i] != NULL; i++) -      free(locales[i]); -    free(locales); +      xfree(locales[i]); +    xfree(locales);      locales = NULL;    }  } @@ -3260,7 +3260,7 @@ static void script_host_execute(char *name, exarg_T *eap)      (void)eval_call_provider(name, "execute", args);    } -  free(script); +  xfree(script);  }  static void script_host_execute_file(char *name, exarg_T *eap) diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index ed0f678e84..f7f6b84e6e 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -104,7 +104,7 @@ typedef struct {    linenr_T lnum;                /* sourcing_lnum of the line */  } wcmd_T; -#define FREE_WCMD(wcmd) free((wcmd)->line) +#define FREE_WCMD(wcmd) xfree((wcmd)->line)  /*   * Structure used to store info for line position in a while or for loop. @@ -458,7 +458,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,      if (cstack.cs_looplevel > 0 && current_line < lines_ga.ga_len) {        /* Each '|' separated command is stored separately in lines_ga, to         * be able to jump to it.  Don't use next_cmdline now. */ -      free(cmdline_copy); +      xfree(cmdline_copy);        cmdline_copy = NULL;        /* Check if a function has returned or, unless it has an unclosed @@ -554,7 +554,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,         * Keep the first typed line.  Clear it when more lines are typed.         */        if (flags & DOCMD_KEEPLINE) { -        free(repeat_cmdline); +        xfree(repeat_cmdline);          if (count == 0)            repeat_cmdline = vim_strsave(next_cmdline);          else @@ -628,7 +628,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,        current_line = cmd_loop_cookie.current_line;      if (next_cmdline == NULL) { -      free(cmdline_copy); +      xfree(cmdline_copy);        cmdline_copy = NULL;        /*         * If the command was typed, remember it for the ':' register. @@ -636,7 +636,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,         */        if (getline_equal(fgetline, cookie, getexline)            && new_last_cmdline != NULL) { -        free(last_cmdline); +        xfree(last_cmdline);          last_cmdline = new_last_cmdline;          new_last_cmdline = NULL;        } @@ -777,7 +777,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,               || cstack.cs_idx >= 0               || (flags & DOCMD_REPEAT))); -  free(cmdline_copy); +  xfree(cmdline_copy);    did_emsg_syntax = FALSE;    GA_DEEP_CLEAR(&lines_ga, wcmd_T, FREE_WCMD); @@ -875,15 +875,15 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,          do {            next = messages->next;            emsg(messages->msg); -          free(messages->msg); -          free(messages); +          xfree(messages->msg); +          xfree(messages);            messages = next;          } while (messages != NULL);        } else if (p != NULL) {          emsg(p); -        free(p); +        xfree(p);        } -      free(sourcing_name); +      xfree(sourcing_name);        sourcing_name = saved_sourcing_name;        sourcing_lnum = saved_sourcing_lnum;      } @@ -1459,7 +1459,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,      }      p = vim_strnsave(ea.cmd, p - ea.cmd);      int ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, TRUE, NULL); -    free(p); +    xfree(p);      if (ret && !aborting()) {        p = find_command(&ea, NULL);      } @@ -3285,7 +3285,7 @@ static void ex_script_ni(exarg_T *eap)    if (!eap->skip)      ex_ni(eap);    else -    free(script_get(eap, eap->arg)); +    xfree(script_get(eap, eap->arg));  }  /* @@ -3400,7 +3400,7 @@ static char_u *replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)      msg_make(p);      /* 'eap->cmd' is not set here, because it is not used at CMD_make */ -    free(*cmdlinep); +    xfree(*cmdlinep);      *cmdlinep = new_cmdline;      p = new_cmdline;    } @@ -3464,7 +3464,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)        char_u *l = repl;        repl = expand_env_save(repl); -      free(l); +      xfree(l);      }      /* Need to escape white space et al. with a backslash. @@ -3500,7 +3500,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)        for (l = repl; *l; ++l)          if (vim_strchr(ESCAPE_CHARS, *l) != NULL) {            l = vim_strsave_escaped(repl, ESCAPE_CHARS); -          free(repl); +          xfree(repl);            repl = l;            break;          } @@ -3512,12 +3512,12 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)        char_u      *l;        l = vim_strsave_escaped(repl, (char_u *)"!"); -      free(repl); +      xfree(repl);        repl = l;      }      p = repl_cmdline(eap, p, srclen, repl, cmdlinep); -    free(repl); +    xfree(repl);    }    /* @@ -3595,7 +3595,7 @@ int expand_filename(exarg_T *eap, char_u **cmdlinep, char_u **errormsgp)        if (p != NULL) {          (void)repl_cmdline(eap, eap->arg, (int)STRLEN(eap->arg),              p, cmdlinep); -        free(p); +        xfree(p);        }      }    } @@ -3649,7 +3649,7 @@ static char_u *repl_cmdline(exarg_T *eap, char_u *src, int srclen, char_u *repl,    eap->arg = new_cmdline + (eap->arg - *cmdlinep);    if (eap->do_ecmd_cmd != NULL && eap->do_ecmd_cmd != dollar_command)      eap->do_ecmd_cmd = new_cmdline + (eap->do_ecmd_cmd - *cmdlinep); -  free(*cmdlinep); +  xfree(*cmdlinep);    *cmdlinep = new_cmdline;    return src; @@ -4141,9 +4141,9 @@ static int uc_add_command(char_u *name, size_t name_len, char_u *rep,          goto fail;        } -      free(cmd->uc_rep); +      xfree(cmd->uc_rep);        cmd->uc_rep = NULL; -      free(cmd->uc_compl_arg); +      xfree(cmd->uc_compl_arg);        cmd->uc_compl_arg = NULL;        break;      } @@ -4177,8 +4177,8 @@ static int uc_add_command(char_u *name, size_t name_len, char_u *rep,    return OK;  fail: -  free(rep_buf); -  free(compl_arg); +  xfree(rep_buf); +  xfree(compl_arg);    return FAIL;  } @@ -4531,9 +4531,9 @@ void ex_comclear(exarg_T *eap)  }  static void free_ucmd(ucmd_T* cmd) { -  free(cmd->uc_name); -  free(cmd->uc_rep); -  free(cmd->uc_compl_arg); +  xfree(cmd->uc_name); +  xfree(cmd->uc_rep); +  xfree(cmd->uc_compl_arg);  }  /* @@ -4569,9 +4569,9 @@ static void ex_delcommand(exarg_T *eap)      return;    } -  free(cmd->uc_name); -  free(cmd->uc_rep); -  free(cmd->uc_compl_arg); +  xfree(cmd->uc_name); +  xfree(cmd->uc_rep); +  xfree(cmd->uc_compl_arg);    --gap->ga_len; @@ -4937,8 +4937,8 @@ static void do_ucmd(exarg_T *eap)    (void)do_cmdline(buf, eap->getline, eap->cookie,        DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);    current_SID = save_current_SID; -  free(buf); -  free(split_buf); +  xfree(buf); +  xfree(split_buf);  }  static char_u *get_user_command_name(int idx) @@ -5064,11 +5064,11 @@ static void ex_colorscheme(exarg_T *eap)      ++emsg_off;      p = eval_to_string(expr, NULL, FALSE);      --emsg_off; -    free(expr); +    xfree(expr);      if (p != NULL) {        MSG(p); -      free(p); +      xfree(p);      } else        MSG("default");    } else if (load_colors(eap->arg) == FAIL) @@ -5468,7 +5468,7 @@ static void ex_goto(exarg_T *eap)   */  void alist_clear(alist_T *al)  { -# define FREE_AENTRY_FNAME(arg) free(arg->ae_fname) +# define FREE_AENTRY_FNAME(arg) xfree(arg->ae_fname)    GA_DEEP_CLEAR(&al->al_ga, aentry_T, FREE_AENTRY_FNAME);  } @@ -5490,7 +5490,7 @@ void alist_unlink(alist_T *al)  {    if (al != &global_alist && --al->al_refcount <= 0) {      alist_clear(al); -    free(al); +    xfree(al);    }  } @@ -5556,7 +5556,7 @@ void alist_set(alist_T *al, int count, char_u **files, int use_curbuf, int *fnum          /* When adding many buffers this can take a long time.  Allow           * interrupting here. */          while (i < count) -          free(files[i++]); +          xfree(files[i++]);          break;        } @@ -5568,7 +5568,7 @@ void alist_set(alist_T *al, int count, char_u **files, int use_curbuf, int *fnum        alist_add(al, files[i], use_curbuf ? 2 : 1);        os_breakcheck();      } -    free(files); +    xfree(files);    }    if (al == &global_alist) @@ -5729,7 +5729,7 @@ void ex_splitview(exarg_T *eap)  theend: -  free(fname); +  xfree(fname);  }  /* @@ -5908,7 +5908,7 @@ static void ex_find(exarg_T *eap)       * appears several times in the path. */      count = eap->line2;      while (fname != NULL && --count > 0) { -      free(fname); +      xfree(fname);        fname = find_file_in_path(NULL, 0, FNAME_MESS,            FALSE, curbuf->b_ffname);      } @@ -5917,7 +5917,7 @@ static void ex_find(exarg_T *eap)    if (fname != NULL) {      eap->arg = fname;      do_exedit(eap, NULL); -    free(fname); +    xfree(fname);    }  } @@ -6236,10 +6236,10 @@ static char_u   *prev_dir = NULL;  #if defined(EXITFREE)  void free_cd_dir(void)  { -  free(prev_dir); +  xfree(prev_dir);    prev_dir = NULL; -  free(globaldir); +  xfree(globaldir);    globaldir = NULL;  } @@ -6251,7 +6251,7 @@ void free_cd_dir(void)   */  void post_chdir(int local)  { -  free(curwin->w_localdir); +  xfree(curwin->w_localdir);    curwin->w_localdir = NULL;    if (local) {      /* If still in global directory, need to remember current @@ -6264,7 +6264,7 @@ void post_chdir(int local)    } else {      /* We are now in the global directory, no need to remember its       * name. */ -    free(globaldir); +    xfree(globaldir);      globaldir = NULL;    } @@ -6330,7 +6330,7 @@ void ex_cd(exarg_T *eap)        if (KeyTyped || p_verbose >= 5)          ex_pwd(eap);      } -    free(tofree); +    xfree(tofree);    }  } @@ -6733,7 +6733,7 @@ static void ex_redir(exarg_T *eap)          return;        redir_fd = open_exfile(fname, eap->forceit, mode); -      free(fname); +      xfree(fname);      } else if (*arg == '@') {        /* redirect to a register a-z (resp. A-Z for appending) */        close_redir(); @@ -6970,7 +6970,7 @@ static void ex_mkrc(exarg_T *eap)              shorten_fnames(TRUE);            }          } -        free(dirnow); +        xfree(dirnow);        } else {          failed |= (put_view(fd, curwin, !using_vdir, flagp,                         -1) == FAIL); @@ -6999,14 +6999,14 @@ static void ex_mkrc(exarg_T *eap)        tbuf = xmalloc(MAXPATHL);        if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)          set_vim_var_string(VV_THIS_SESSION, tbuf, -1); -      free(tbuf); +      xfree(tbuf);      }  #ifdef MKSESSION_NL      mksession_nl = FALSE;  #endif    } -  free(viewFile); +  xfree(viewFile);  }  int vim_mkdir_emsg(char_u *name, int prot) @@ -7189,7 +7189,7 @@ static void ex_normal(exarg_T *eap)    State = save_State;    setmouse();    ui_cursor_shape(); /* may show different cursor shape */ -  free(arg); +  xfree(arg);  }  /* @@ -7609,7 +7609,7 @@ eval_vars (           * postponed to avoid a delay when <afile> is not used. */          autocmd_fname_full = TRUE;          result = FullName_save(autocmd_fname, FALSE); -        free(autocmd_fname); +        xfree(autocmd_fname);          autocmd_fname = result;        }        if (result == NULL) { @@ -7686,7 +7686,7 @@ eval_vars (      result = NULL;    } else      result = vim_strnsave(result, resultlen); -  free(resultbuf); +  xfree(resultbuf);    return result;  } @@ -7772,7 +7772,7 @@ char_u *expand_sfile(char_u *arg)        if (errormsg != NULL) {          if (*errormsg)            emsg(errormsg); -        free(result); +        xfree(result);          return NULL;        }        if (repl == NULL) {               /* no match (cannot happen) */ @@ -7785,8 +7785,8 @@ char_u *expand_sfile(char_u *arg)        STRCPY(newres + (p - result), repl);        len = (int)STRLEN(newres);        STRCAT(newres, p + srclen); -      free(repl); -      free(result); +      xfree(repl); +      xfree(result);        result = newres;        p = newres + len;                 /* continue after the match */      } @@ -7850,10 +7850,10 @@ makeopens (      if (fputs("cd ", fd) < 0          || ses_put_fname(fd, sname, &ssop_flags) == FAIL          || put_eol(fd) == FAIL) { -      free(sname); +      xfree(sname);        return FAIL;      } -    free(sname); +    xfree(sname);    }    /* @@ -8434,10 +8434,10 @@ ses_arglist (        }        if (fputs("argadd ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL            || put_eol(fd) == FAIL) { -        free(buf); +        xfree(buf);          return FAIL;        } -      free(buf); +      xfree(buf);      }    }    return OK; @@ -8491,11 +8491,11 @@ static int ses_put_fname(FILE *fd, char_u *name, unsigned *flagp)    /* escape special characters */    p = vim_strsave_fnameescape(sname, FALSE); -  free(sname); +  xfree(sname);    /* write the result */    bool retval = fputs((char *)p, fd) < 0 ? FAIL : OK; -  free(p); +  xfree(p);    return retval;  } @@ -8511,7 +8511,7 @@ static void ex_loadview(exarg_T *eap)      if (do_source(fname, FALSE, DOSO_NONE) == FAIL) {        EMSG2(_(e_notopen), fname);      } -    free(fname); +    xfree(fname);    }  } @@ -8564,7 +8564,7 @@ static char_u *get_view_file(int c)    *s++ = c;    STRCPY(s, ".vim"); -  free(sname); +  xfree(sname);    return retval;  } @@ -8829,7 +8829,7 @@ static void ex_match(exarg_T *eap)        c = *end;        *end = NUL;        match_add(curwin, g, p + 1, 10, id, NULL); -      free(g); +      xfree(g);        *end = c;      }    } diff --git a/src/nvim/ex_eval.c b/src/nvim/ex_eval.c index d2774804f8..5ed7a35209 100644 --- a/src/nvim/ex_eval.c +++ b/src/nvim/ex_eval.c @@ -281,8 +281,8 @@ static void free_msglist(struct msglist *l)    messages = l;    while (messages != NULL) {      next = messages->next; -    free(messages->msg); -    free(messages); +    xfree(messages->msg); +    xfree(messages);      messages = next;    }  } @@ -505,7 +505,7 @@ static int throw_exception(void *value, int type, char_u *cmdname)    return OK;  nomem: -  free(excp); +  xfree(excp);    suppress_errthrow = TRUE;    EMSG(_(e_outofmem));  fail: @@ -550,14 +550,14 @@ static void discard_exception(except_T *excp, int was_finished)      else        verbose_leave();      STRCPY(IObuff, saved_IObuff); -    free(saved_IObuff); +    xfree(saved_IObuff);    }    if (excp->type != ET_INTERRUPT) -    free(excp->value); +    xfree(excp->value);    if (excp->type == ET_ERROR)      free_msglist(excp->messages); -  free(excp->throw_name); -  free(excp); +  xfree(excp->throw_name); +  xfree(excp);  }  /* @@ -727,9 +727,9 @@ static void report_pending(int action, int pending, void *value)      msg_silent = save_msg_silent;    if (pending == CSTP_RETURN) -    free(s); +    xfree(s);    else if (pending & CSTP_THROW) -    free(mesg); +    xfree(mesg);  }  /* @@ -1165,7 +1165,7 @@ void ex_throw(exarg_T *eap)     * not throw. */    if (!eap->skip && value != NULL) {      if (throw_exception(value, ET_USER, NULL) == FAIL) -      free(value); +      xfree(value);      else        do_throw(eap->cstack);    } @@ -1977,7 +1977,7 @@ int cleanup_conditionals(struct condstack *cstack, int searched_cond, int inclus        elem = cstack->cs_emsg_silent_list;        cstack->cs_emsg_silent_list = elem->next;        emsg_silent = elem->saved_emsg_silent; -      free(elem); +      xfree(elem);        cstack->cs_flags[idx] &= ~CSF_SILENT;      }      if (stop) diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 6b74e85acb..7dac4a9565 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -354,7 +354,7 @@ getcmdline (          && c != K_KPAGEDOWN && c != K_KPAGEUP          && c != K_LEFT && c != K_RIGHT          && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N))) { -      free(lookfor); +      xfree(lookfor);        lookfor = NULL;      } @@ -593,7 +593,7 @@ getcmdline (              realloc_cmdbuff(len + 1);              ccline.cmdlen = len;              STRCPY(ccline.cmdbuff, p); -            free(p); +            xfree(p);              /* Restore the cursor or use the position set with               * set_cmdline_pos(). */ @@ -825,7 +825,7 @@ getcmdline (              )            goto cmdline_not_changed; -        free(ccline.cmdbuff);               /* no commandline to return */ +        xfree(ccline.cmdbuff);               /* no commandline to return */          ccline.cmdbuff = NULL;          if (!cmd_silent) {            if (cmdmsg_rl) @@ -1193,7 +1193,7 @@ getcmdline (          int len;          int old_firstc; -        free(ccline.cmdbuff); +        xfree(ccline.cmdbuff);          xpc.xp_context = EXPAND_NOTHING;          if (hiscnt == hislen)            p = lookfor;                  /* back to the old one */ @@ -1476,13 +1476,13 @@ returncmd:        add_to_history(histype, ccline.cmdbuff, TRUE,            histype == HIST_SEARCH ? firstc : NUL);        if (firstc == ':') { -        free(new_last_cmdline); +        xfree(new_last_cmdline);          new_last_cmdline = vim_strsave(ccline.cmdbuff);        }      }      if (gotesc) {           /* abandon command line */ -      free(ccline.cmdbuff); +      xfree(ccline.cmdbuff);        ccline.cmdbuff = NULL;        if (msg_scrolled == 0)          compute_cmdrow(); @@ -1958,7 +1958,7 @@ static void realloc_cmdbuff(int len)     * there, thus copy up to the NUL and add a NUL. */    memmove(ccline.cmdbuff, p, (size_t)ccline.cmdlen);    ccline.cmdbuff[ccline.cmdlen] = NUL; -  free(p); +  xfree(p);    if (ccline.xpc != NULL        && ccline.xpc->xp_pattern != NULL @@ -1978,7 +1978,7 @@ static char_u   *arshape_buf = NULL;  # if defined(EXITFREE)  void free_cmdline_buf(void)  { -  free(arshape_buf); +  xfree(arshape_buf);  }  # endif @@ -2017,7 +2017,7 @@ static void draw_cmdline(int start, int len)      if (len * 2 + 2 > buflen) {        /* Re-allocate the buffer.  We keep it around to avoid a lot of         * alloc()/free() calls. */ -      free(arshape_buf); +      xfree(arshape_buf);        buflen = len * 2 + 2;        arshape_buf = xmalloc(buflen);      } @@ -2291,7 +2291,7 @@ char_u *save_cmdline_alloc(void)  void restore_cmdline_alloc(char_u *p)  {    restore_cmdline((struct cmdline_info *)p); -  free(p); +  xfree(p);  }  /* @@ -2368,7 +2368,7 @@ cmdline_paste (      cmdline_paste_str(p, literally);      if (allocated) -      free(arg); +      xfree(arg);      return OK;    } @@ -2616,7 +2616,7 @@ nextwild (        p2 = ExpandOne(xp, p1,            vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),            use_options, type); -      free(p1); +      xfree(p1);        /* longest match: make sure it is not shorter, happens with :help */        if (p2 != NULL && type == WILD_LONGEST) {          for (j = 0; j < xp->xp_pattern_len; ++j) @@ -2624,7 +2624,7 @@ nextwild (                || ccline.cmdbuff[i + j] == '?')              break;          if ((int)STRLEN(p2) < j) { -          free(p2); +          xfree(p2);            p2 = NULL;          }        } @@ -2644,7 +2644,7 @@ nextwild (      ccline.cmdlen += difflen;      ccline.cmdpos += difflen;    } -  free(p2); +  xfree(p2);    redrawcmd();    cursorcmd(); @@ -2755,7 +2755,7 @@ ExpandOne (    if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST) {      FreeWild(xp->xp_numfiles, xp->xp_files);      xp->xp_numfiles = -1; -    free(orig_save); +    xfree(orig_save);      orig_save = NULL;    }    findex = 0; @@ -2764,7 +2764,7 @@ ExpandOne (      return NULL;    if (xp->xp_numfiles == -1) { -    free(orig_save); +    xfree(orig_save);      orig_save = orig;      orig_saved = TRUE; @@ -2872,7 +2872,7 @@ ExpandOne (    /* Free "orig" if it wasn't stored in "orig_save". */    if (!orig_saved) -    free(orig); +    xfree(orig);    return ss;  } @@ -2930,11 +2930,11 @@ void ExpandEscape(expand_T *xp, char_u *str, int numfiles, char_u **files, int o          /* for ":set path=" we need to escape spaces twice */          if (xp->xp_backslash == XP_BS_THREE) {            p = vim_strsave_escaped(files[i], (char_u *)" "); -          free(files[i]); +          xfree(files[i]);            files[i] = p;  #if defined(BACKSLASH_IN_FILENAME)            p = vim_strsave_escaped(files[i], (char_u *)" "); -          free(files[i]); +          xfree(files[i]);            files[i] = p;  #endif          } @@ -2943,7 +2943,7 @@ void ExpandEscape(expand_T *xp, char_u *str, int numfiles, char_u **files, int o  #else          p = vim_strsave_fnameescape(files[i], xp->xp_shell);  #endif -        free(files[i]); +        xfree(files[i]);          files[i] = p;          /* If 'str' starts with "\~", replace "~" at start of @@ -2964,7 +2964,7 @@ void ExpandEscape(expand_T *xp, char_u *str, int numfiles, char_u **files, int o         */        for (i = 0; i < numfiles; ++i) {          p = vim_strsave_escaped(files[i], (char_u *)"\\|\""); -        free(files[i]); +        xfree(files[i]);          files[i] = p;        }      } @@ -2998,7 +2998,7 @@ char_u *vim_strsave_fnameescape(char_u *fname, int shell) FUNC_ATTR_NONNULL_RET      /* For csh and similar shells need to put two backslashes before '!'.       * One is taken by Vim, one by the shell. */      char_u *s = vim_strsave_escaped(p, (char_u *)"!"); -    free(p); +    xfree(p);      p = s;    }  #endif @@ -3020,7 +3020,7 @@ static void escape_fname(char_u **pp)    char_u *p = xmalloc(STRLEN(*pp) + 2);    p[0] = '\\';    STRCPY(p + 1, *pp); -  free(*pp); +  xfree(*pp);    *pp = p;  } @@ -3036,7 +3036,7 @@ void tilde_replace(char_u *orig_pat, int num_files, char_u **files)    if (orig_pat[0] == '~' && vim_ispathsep(orig_pat[1])) {      for (i = 0; i < num_files; ++i) {        p = home_replace_save(NULL, files[i]); -      free(files[i]); +      xfree(files[i]);        files[i] = p;      }    } @@ -3154,8 +3154,8 @@ static int showmatches(expand_T *xp, int wildmenu)              halved_slash = backslash_halve_save(                  exp_path != NULL ? exp_path : files_found[k]);              j = os_isdir(halved_slash); -            free(exp_path); -            free(halved_slash); +            xfree(exp_path); +            xfree(halved_slash);            } else              /* Expansion was done here, file names are literal. */              j = os_isdir(files_found[k]); @@ -3515,7 +3515,7 @@ expand_cmdline (      *matchcount = 0;      *matches = NULL;    } -  free(file_str); +  xfree(file_str);    return EXPAND_OK;  } @@ -3610,7 +3610,7 @@ ExpandFromContext (      /* Expand wildcards, supporting %:h and the like. */      ret = expand_wildcards_eval(&pat, num_file, file, flags);      if (free_pat) -      free(pat); +      xfree(pat);      return ret;    } @@ -3887,9 +3887,9 @@ static void expand_shellcmd(char_u *filepat, int *num_file, char_u ***file,              STRMOVE(s, s + l);              ((char_u **)ga.ga_data)[ga.ga_len++] = s;            } else -            free(s); +            xfree(s);          } -        free(*file); +        xfree(*file);        }      }      if (*e != NUL) @@ -3898,10 +3898,10 @@ static void expand_shellcmd(char_u *filepat, int *num_file, char_u ***file,    *file = ga.ga_data;    *num_file = ga.ga_len; -  free(buf); -  free(pat); +  xfree(buf); +  xfree(pat);    if (mustfree) -    free(path); +    xfree(path);  }  /* @@ -3946,7 +3946,7 @@ static void * call_user_expand_func(user_expand_func_T user_expand_func,    if (ccline.cmdbuff != NULL)      ccline.cmdbuff[ccline.cmdlen] = keep; -  free(args[0]); +  xfree(args[0]);    return ret;  } @@ -3986,7 +3986,7 @@ static int ExpandUserDefined(expand_T *xp, regmatch_T *regmatch, int *num_file,      if (*e != NUL)        ++e;    } -  free(retstr); +  xfree(retstr);    *file = ga.ga_data;    *num_file = ga.ga_len;    return OK; @@ -4039,7 +4039,7 @@ static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirname      char_u *s = xmalloc(size);      snprintf((char *)s, size, "%s/%s*.vim", dirnames[i], pat);      globpath(p_rtp, s, &ga, 0); -    free(s); +    xfree(s);    }    for (int i = 0; i < ga.ga_len; i++) { @@ -4108,7 +4108,7 @@ void globpath(char_u *path, char_u *file, garray_T *ga, int expand_options)      }    } -  free(buf); +  xfree(buf);  } @@ -4210,7 +4210,7 @@ void init_history(void)              if (i >= 0)                         /* copy newest entries */                temp[i] = history[type][j];              else {                              /* remove older entries */ -              free(history[type][j].hisstr); +              xfree(history[type][j].hisstr);                history[type][j].hisstr = NULL;              }              if (--j < 0) @@ -4220,7 +4220,7 @@ void init_history(void)            }            hisidx[type] = newlen - 1;          } -        free(history[type]); +        xfree(history[type]);          history[type] = temp;        }      } @@ -4347,7 +4347,7 @@ add_to_history (      if (maptick == last_maptick) {        /* Current line is from the same mapping, remove it */        hisptr = &history[HIST_SEARCH][hisidx[HIST_SEARCH]]; -      free(hisptr->hisstr); +      xfree(hisptr->hisstr);        clear_hist_entry(hisptr);        --hisnum[histype];        if (--hisidx[HIST_SEARCH] < 0) @@ -4359,7 +4359,7 @@ add_to_history (      if (++hisidx[histype] == hislen)        hisidx[histype] = 0;      hisptr = &history[histype][hisidx[histype]]; -    free(hisptr->hisstr); +    xfree(hisptr->hisstr);      /* Store the separator after the NUL of the string. */      len = (int)STRLEN(new_entry); @@ -4532,7 +4532,7 @@ int clr_history(int histype)    if (hislen != 0 && histype >= 0 && histype < HIST_COUNT) {      hisptr = history[histype];      for (i = hislen; i--; ) { -      free(hisptr->hisstr); +      xfree(hisptr->hisstr);        clear_hist_entry(hisptr);      }      hisidx[histype] = -1;       /* mark history as cleared */ @@ -4571,7 +4571,7 @@ int del_history_entry(int histype, char_u *str)          break;        if (vim_regexec(®match, hisptr->hisstr, (colnr_T)0)) {          found = TRUE; -        free(hisptr->hisstr); +        xfree(hisptr->hisstr);          clear_hist_entry(hisptr);        } else {          if (i != last) { @@ -4603,7 +4603,7 @@ int del_history_idx(int histype, int idx)    if (i < 0)      return FALSE;    idx = hisidx[histype]; -  free(history[histype][i].hisstr); +  xfree(history[histype][i].hisstr);    /* When deleting the last added search string in a mapping, reset     * last_maptick, so that the last added search string isn't deleted again. @@ -4837,7 +4837,7 @@ int read_viminfo_history(vir_T *virp, int writing)          viminfo_history[type][viminfo_hisidx[type]++] = p;        }      } -    free(val); +    xfree(val);    }    return viminfo_readline(virp);  } @@ -4875,7 +4875,7 @@ void finish_viminfo_history(void)          idx = hislen - 1;      }      for (i = 0; i < viminfo_hisidx[type]; i++) { -      free(history[type][idx].hisstr); +      xfree(history[type][idx].hisstr);        history[type][idx].hisstr = viminfo_history[type][i];        history[type][idx].viminfo = TRUE;        if (--idx < 0) @@ -4887,7 +4887,7 @@ void finish_viminfo_history(void)        history[type][idx++].hisnum = ++hisnum[type];        idx %= hislen;      } -    free(viminfo_history[type]); +    xfree(viminfo_history[type]);      viminfo_history[type] = NULL;      viminfo_hisidx[type] = 0;    } @@ -4974,8 +4974,8 @@ void write_viminfo_history(FILE *fp, int merge)      }      for (i = 0; i < viminfo_hisidx[type]; ++i)        if (viminfo_history[type] != NULL) -        free(viminfo_history[type][i]); -    free(viminfo_history[type]); +        xfree(viminfo_history[type][i]); +    xfree(viminfo_history[type]);      viminfo_history[type] = NULL;      viminfo_hisidx[type] = 0;    } @@ -5161,7 +5161,7 @@ static int ex_window(void)      if (aborting() && cmdwin_result != K_IGNORE)        cmdwin_result = Ctrl_C;      /* Set the new command line from the cmdline buffer. */ -    free(ccline.cmdbuff); +    xfree(ccline.cmdbuff);      if (cmdwin_result == K_XF1 || cmdwin_result == K_XF2) {   /* :qa[!] typed */        char *p = (cmdwin_result == K_XF2) ? "qa" : "qa!"; @@ -5257,13 +5257,13 @@ char_u *script_get(exarg_T *eap, char_u *cmd)          NUL, eap->cookie, 0);      if (theline == NULL || STRCMP(end_pattern, theline) == 0) { -      free(theline); +      xfree(theline);        break;      }      ga_concat(&ga, theline);      ga_append(&ga, '\n'); -    free(theline); +    xfree(theline);    }    ga_append(&ga, NUL); diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c index 9267e7991c..42779d6b71 100644 --- a/src/nvim/file_search.c +++ b/src/nvim/file_search.c @@ -496,19 +496,19 @@ vim_findfile_init (        }        if (temp == NULL || wc_path == NULL) { -        free(buf); -        free(temp); -        free(wc_path); +        xfree(buf); +        xfree(temp); +        xfree(wc_path);          goto error_return;        }        STRCPY(temp, search_ctx->ffsc_fix_path + len);        STRCAT(temp, search_ctx->ffsc_wc_path); -      free(search_ctx->ffsc_wc_path); -      free(wc_path); +      xfree(search_ctx->ffsc_wc_path); +      xfree(wc_path);        search_ctx->ffsc_wc_path = temp;      } -    free(buf); +    xfree(buf);    }    sptr = ff_create_stack_element(ff_expand_buffer, @@ -563,7 +563,7 @@ void vim_findfile_cleanup(void *ctx)    vim_findfile_free_visited(ctx);    ff_clear(ctx); -  free(ctx); +  xfree(ctx);  }  /* @@ -947,7 +947,7 @@ char_u *vim_findfile(void *search_ctx_arg)        break;    } -  free(file_path); +  xfree(file_path);    return NULL;  } @@ -975,8 +975,8 @@ static void vim_findfile_free_visited_list(ff_visited_list_hdr_T **list_headp)      vp = (*list_headp)->ffvl_next;      ff_free_visited_list((*list_headp)->ffvl_visited_list); -    free((*list_headp)->ffvl_filename); -    free(*list_headp); +    xfree((*list_headp)->ffvl_filename); +    xfree(*list_headp);      *list_headp = vp;    }    *list_headp = NULL; @@ -988,8 +988,8 @@ static void ff_free_visited_list(ff_visited_T *vl)    while (vl != NULL) {      vp = vl->ffv_next; -    free(vl->ffv_wc_path); -    free(vl); +    xfree(vl->ffv_wc_path); +    xfree(vl);      vl = vp;    }    vl = NULL; @@ -1205,13 +1205,13 @@ static ff_stack_T *ff_pop(ff_search_ctx_T *search_ctx)  static void ff_free_stack_element(ff_stack_T *stack_ptr)  {    /* free handles possible NULL pointers */ -  free(stack_ptr->ffs_fix_path); -  free(stack_ptr->ffs_wc_path); +  xfree(stack_ptr->ffs_fix_path); +  xfree(stack_ptr->ffs_wc_path);    if (stack_ptr->ffs_filearray != NULL)      FreeWild(stack_ptr->ffs_filearray_size, stack_ptr->ffs_filearray); -  free(stack_ptr); +  xfree(stack_ptr);  }  /* @@ -1225,19 +1225,19 @@ static void ff_clear(ff_search_ctx_T *search_ctx)    while ((sptr = ff_pop(search_ctx)) != NULL)      ff_free_stack_element(sptr); -  free(search_ctx->ffsc_file_to_search); -  free(search_ctx->ffsc_start_dir); -  free(search_ctx->ffsc_fix_path); -  free(search_ctx->ffsc_wc_path); +  xfree(search_ctx->ffsc_file_to_search); +  xfree(search_ctx->ffsc_start_dir); +  xfree(search_ctx->ffsc_fix_path); +  xfree(search_ctx->ffsc_wc_path);    if (search_ctx->ffsc_stopdirs_v != NULL) {      int i = 0;      while (search_ctx->ffsc_stopdirs_v[i] != NULL) { -      free(search_ctx->ffsc_stopdirs_v[i]); +      xfree(search_ctx->ffsc_stopdirs_v[i]);        i++;      } -    free(search_ctx->ffsc_stopdirs_v); +    xfree(search_ctx->ffsc_stopdirs_v);    }    search_ctx->ffsc_stopdirs_v = NULL; @@ -1327,9 +1327,9 @@ static void     *fdip_search_ctx = NULL;  #if defined(EXITFREE)  void free_findfile(void)  { -  free(ff_file_to_find); +  xfree(ff_file_to_find);    vim_findfile_cleanup(fdip_search_ctx); -  free(ff_expand_buffer); +  xfree(ff_expand_buffer);  }  #endif @@ -1382,7 +1382,7 @@ find_file_in_path_option (      expand_env(ptr, NameBuff, MAXPATHL);      ptr[len] = save_char; -    free(ff_file_to_find); +    xfree(ff_file_to_find);      ff_file_to_find = vim_strsave(NameBuff);    } @@ -1487,7 +1487,7 @@ find_file_in_path_option (              fdip_search_ctx, FALSE, rel_fname);          if (fdip_search_ctx != NULL)            did_findfile_init = TRUE; -        free(buf); +        xfree(buf);        }      }    } diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 233a7d4aac..def1cc1d1a 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -881,12 +881,12 @@ retry:        notconverted = TRUE;        conv_error = 0;        if (fenc_alloced) -        free(fenc); +        xfree(fenc);        fenc = (char_u *)"";        fenc_alloced = FALSE;      } else {        if (fenc_alloced) -        free(fenc); +        xfree(fenc);        if (fenc_next != NULL) {          fenc = next_fenc(&fenc_next);          fenc_alloced = (fenc_next != NULL); @@ -897,7 +897,7 @@ retry:      }      if (tmpname != NULL) {        os_remove((char *)tmpname);  // delete converted file -      free(tmpname); +      xfree(tmpname);        tmpname = NULL;      }    } @@ -1026,7 +1026,7 @@ retry:          }          if (linerest)           /* copy characters from the previous buffer */            memmove(new_buffer, ptr - linerest, (size_t)linerest); -        free(buffer); +        xfree(buffer);          buffer = new_buffer;          ptr = buffer + linerest;          line_start = buffer; @@ -1215,7 +1215,7 @@ retry:            } else {              /* BOM detected: set "fenc" and jump back */              if (fenc_alloced) -              free(fenc); +              xfree(fenc);              fenc = ccname;              fenc_alloced = FALSE;            } @@ -1738,7 +1738,7 @@ failed:          OPT_FREE | OPT_LOCAL, 0);    }    if (fenc_alloced) -    free(fenc); +    xfree(fenc);  # ifdef USE_ICONV    if (iconv_fd != (iconv_t)-1) {      iconv_close(iconv_fd); @@ -1757,7 +1757,7 @@ failed:        fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);    }  #endif -  free(buffer); +  xfree(buffer);  #ifdef HAVE_DUP    if (read_stdin) { @@ -1769,7 +1769,7 @@ failed:    if (tmpname != NULL) {      os_remove((char *)tmpname);  // delete converted file -    free(tmpname); +    xfree(tmpname);    }    --no_wait_return;                     /* may wait for return now */ @@ -1886,7 +1886,7 @@ failed:          c = TRUE;          msg_add_lines(c, (long)linecnt, filesize); -      free(keep_msg); +      xfree(keep_msg);        keep_msg = NULL;        msg_scrolled_ign = TRUE;        p = msg_trunc_attr(IObuff, FALSE, 0); @@ -2084,7 +2084,7 @@ void set_forced_fenc(exarg_T *eap)    if (eap->force_enc != 0) {      char_u *fenc = enc_canonize(eap->cmd + eap->force_enc);      set_string_option_direct((char_u *)"fenc", -1, fenc, OPT_FREE|OPT_LOCAL, 0); -    free(fenc); +    xfree(fenc);    }  } @@ -2113,7 +2113,7 @@ static char_u *next_fenc(char_u **pp)      r = vim_strnsave(*pp, (int)(p - *pp));      *pp = p + 1;      p = enc_canonize(r); -    free(r); +    xfree(r);      r = p;    }    return r; @@ -2157,7 +2157,7 @@ readfile_charconvert (      MSG(errmsg);      if (tmpname != NULL) {        os_remove((char *)tmpname);  // delete converted file -      free(tmpname); +      xfree(tmpname);        tmpname = NULL;      }    } @@ -2816,7 +2816,7 @@ buf_write (             */            backup = modname(rootname, backup_ext, FALSE);            if (backup == NULL) { -            free(rootname); +            xfree(rootname);              some_error = TRUE;                          /* out of memory */              goto nobackup;            } @@ -2832,7 +2832,7 @@ buf_write (                 * link). If we don't check here, we either ruin the file when                 * copying or erase it after writing.                 */ -              free(backup); +              xfree(backup);                backup = NULL;                    /* no backup file to delete */              } else if (!p_bk) {                /* @@ -2851,13 +2851,13 @@ buf_write (                }                /* They all exist??? Must be something wrong. */                if (*wp == 'a') { -                free(backup); +                xfree(backup);                  backup = NULL;                }              }            }          } -        free(rootname); +        xfree(rootname);          /*           * Try to create the backup file @@ -2871,7 +2871,7 @@ buf_write (                O_WRONLY|O_CREAT|O_EXCL|O_NOFOLLOW,                perm & 0777);            if (bfd < 0) { -            free(backup); +            xfree(backup);              backup = NULL;            } else {              /* set file protection same as original file, but @@ -2939,7 +2939,7 @@ buf_write (        }  nobackup:        close(fd);                /* ignore errors for closing read file */ -      free(copybuf); +      xfree(copybuf);        if (backup == NULL && errmsg == NULL)          errmsg = (char_u *)_( @@ -2986,7 +2986,7 @@ nobackup:            backup = NULL;          else {            backup = modname(rootname, backup_ext, FALSE); -          free(rootname); +          xfree(rootname);          }          if (backup != NULL) { @@ -3004,7 +3004,7 @@ nobackup:                --*p;              /* They all exist??? Must be something wrong! */              if (*p == 'a') { -              free(backup); +              xfree(backup);                backup = NULL;              }            } @@ -3023,7 +3023,7 @@ nobackup:            if (vim_rename(fname, backup) == 0)              break; -          free(backup);             /* don't do the rename below */ +          xfree(backup);             /* don't do the rename below */            backup = NULL;          }        } @@ -3250,7 +3250,7 @@ restore_backup:      }      if (wfname != fname) -      free(wfname); +      xfree(wfname);      goto fail;    }    errmsg = NULL; @@ -3446,7 +3446,7 @@ restore_backup:        }      }      os_remove((char *)wfname); -    free(wfname); +    xfree(wfname);    }    if (end == 0) { @@ -3606,7 +3606,7 @@ restore_backup:          EMSG(_("E205: Patchmode: can't save original file"));        else if (!os_file_exists((char_u *)org)) {          vim_rename(backup, (char_u *)org); -        free(backup);                   /* don't delete the file */ +        xfree(backup);                   /* don't delete the file */          backup = NULL;  #ifdef UNIX          set_file_time((char_u *)org, @@ -3632,7 +3632,7 @@ restore_backup:      }      if (org != NULL) {        os_setperm((char_u *)org, os_getperm(fname) & 0777); -      free(org); +      xfree(org);      }    } @@ -3655,11 +3655,11 @@ nofail:    /* Done saving, we accept changed buffer warnings again */    buf->b_saving = false; -  free(backup); +  xfree(backup);    if (buffer != smallbuf) -    free(buffer); -  free(fenc_tofree); -  free(write_info.bw_conv_buf); +    xfree(buffer); +  xfree(fenc_tofree); +  xfree(write_info.bw_conv_buf);  # ifdef USE_ICONV    if (write_info.bw_iconv_fd != (iconv_t)-1) {      iconv_close(write_info.bw_iconv_fd); @@ -3692,7 +3692,7 @@ nofail:      STRCAT(IObuff, errmsg);      emsg(IObuff);      if (errmsg_allocated) -      free(errmsg); +      xfree(errmsg);      retval = FAIL;      if (end == 0) { @@ -4314,7 +4314,7 @@ void shorten_fnames(int force)          && (force              || buf->b_sfname == NULL              || path_is_absolute_path(buf->b_sfname))) { -      free(buf->b_sfname); +      xfree(buf->b_sfname);        buf->b_sfname = NULL;        p = path_shorten_fname(buf->b_ffname, dirname);        if (p != NULL) { @@ -4366,7 +4366,7 @@ modname (      retval = xmalloc(MAXPATHL + extlen + 3);      if (os_dirname(retval, MAXPATHL) == FAIL ||          (fnamelen = (int)STRLEN(retval)) == 0) { -      free(retval); +      xfree(retval);        return NULL;      }      if (!after_pathsep(retval, retval + fnamelen)) { @@ -4596,7 +4596,7 @@ int vim_rename(char_u *from, char_u *to)        break;      } -  free(buffer); +  xfree(buffer);    close(fd_in);    if (close(fd_out) < 0)      errmsg = _("E209: Error closing \"%s\""); @@ -4705,11 +4705,11 @@ static int move_lines(buf_T *frombuf, buf_T *tobuf)    for (lnum = 1; lnum <= frombuf->b_ml.ml_line_count; ++lnum) {      p = vim_strsave(ml_get_buf(frombuf, lnum, FALSE));      if (ml_append(lnum - 1, p, 0, FALSE) == FAIL) { -      free(p); +      xfree(p);        retval = FAIL;        break;      } -    free(p); +    xfree(p);    }    /* Delete all the lines in "frombuf". */ @@ -4922,8 +4922,8 @@ buf_check_timestamp (        already_warned = TRUE;      } -    free(path); -    free(tbuf); +    xfree(path); +    xfree(tbuf);    }    if (reload) { @@ -5041,7 +5041,7 @@ void buf_reload(buf_T *buf, int orig_mode)        }      }    } -  free(ea.cmd); +  xfree(ea.cmd);    if (savebuf != NULL && buf_valid(savebuf))      wipe_buffer(savebuf, FALSE); @@ -5315,7 +5315,7 @@ static void show_autocmd(AutoPat *ap, event_T event)   */  static void au_remove_pat(AutoPat *ap)  { -  free(ap->pat); +  xfree(ap->pat);    ap->pat = NULL;    ap->buflocal_nr = -1;    au_need_clean = TRUE; @@ -5329,7 +5329,7 @@ static void au_remove_cmds(AutoPat *ap)    AutoCmd *ac;    for (ac = ap->cmds; ac != NULL; ac = ac->next) { -    free(ac->cmd); +    xfree(ac->cmd);      ac->cmd = NULL;    }    au_need_clean = TRUE; @@ -5361,8 +5361,8 @@ static void au_cleanup(void)           * the command has been marked for deletion */          if (ap->pat == NULL || ac->cmd == NULL) {            *prev_ac = ac->next; -          free(ac->cmd); -          free(ac); +          xfree(ac->cmd); +          xfree(ac);          } else            prev_ac = &(ac->next);        } @@ -5371,7 +5371,7 @@ static void au_cleanup(void)        if (ap->pat == NULL) {          *prev_ap = ap->next;          vim_regfree(ap->reg_prog); -        free(ap); +        xfree(ap);        } else          prev_ap = &(ap->next);      } @@ -5445,7 +5445,7 @@ static void au_del_group(char_u *name)    if (i == AUGROUP_ERROR)       /* the group doesn't exist */      EMSG2(_("E367: No such group: \"%s\""), name);    else { -    free(AUGROUP_NAME(i)); +    xfree(AUGROUP_NAME(i));      AUGROUP_NAME(i) = NULL;    }  } @@ -5637,7 +5637,7 @@ char_u *au_event_disable(char *what)    else      STRCAT(new_ei, what);    set_string_option_direct((char_u *)"ei", -1, new_ei, OPT_FREE, SID_NONE); -  free(new_ei); +  xfree(new_ei);    return save_ei;  } @@ -5647,7 +5647,7 @@ void au_event_restore(char_u *old_ei)    if (old_ei != NULL) {      set_string_option_direct((char_u *)"ei", -1, old_ei,          OPT_FREE, SID_NONE); -    free(old_ei); +    xfree(old_ei);    }  } @@ -5782,8 +5782,8 @@ void do_autocmd(char_u *arg, int forceit)    }    if (need_free) -    free(cmd); -  free(envpat); +    xfree(cmd); +  xfree(envpat);  }  /* @@ -5807,7 +5807,7 @@ static int au_get_grouparg(char_u **argp)        group = AUGROUP_ALL;              /* no match, use all groups */      else        *argp = skipwhite(p);             /* match, skip over group name */ -    free(group_name); +    xfree(group_name);    }    return group;  } @@ -5984,10 +5984,10 @@ static int do_autocmd_event(event_T event, char_u *pat, int nested, char_u *cmd,                &ap->allow_dirs, TRUE);            if (reg_pat != NULL)              ap->reg_prog = vim_regcomp(reg_pat, RE_MAGIC); -          free(reg_pat); +          xfree(reg_pat);            if (reg_pat == NULL || ap->reg_prog == NULL) { -            free(ap->pat); -            free(ap); +            xfree(ap->pat); +            xfree(ap);              return FAIL;            }          } @@ -6186,7 +6186,7 @@ aucmd_prepbuf (      /* Make sure w_localdir and globaldir are NULL to avoid a chdir() in       * win_enter_ext(). */ -    free(aucmd_win->w_localdir); +    xfree(aucmd_win->w_localdir);      aucmd_win->w_localdir = NULL;      aco->globaldir = globaldir;      globaldir = NULL; @@ -6262,7 +6262,7 @@ win_found:      hash_init(&aucmd_win->w_vars->dv_hashtab);       /* re-use the hashtab */      curbuf = curwin->w_buffer; -    free(globaldir); +    xfree(globaldir);      globaldir = aco->globaldir;      /* the buffer contents may have changed */ @@ -6599,7 +6599,7 @@ apply_autocmds_group (        fname = FullName_save(fname, FALSE);    }    if (fname == NULL) {      /* out of memory */ -    free(sfname); +    xfree(sfname);      retval = FALSE;      goto BYPASS_AU;    } @@ -6705,10 +6705,10 @@ apply_autocmds_group (    autocmd_busy = save_autocmd_busy;    filechangeshell_busy = FALSE;    autocmd_nested = save_autocmd_nested; -  free(sourcing_name); +  xfree(sourcing_name);    sourcing_name = save_sourcing_name;    sourcing_lnum = save_sourcing_lnum; -  free(autocmd_fname); +  xfree(autocmd_fname);    autocmd_fname = save_autocmd_fname;    autocmd_fname_full = save_autocmd_fname_full;    autocmd_bufnr = save_autocmd_bufnr; @@ -6717,8 +6717,8 @@ apply_autocmds_group (    restore_funccal(save_funccalp);    if (do_profiling == PROF_YES)      prof_child_exit(&wait_time); -  free(fname); -  free(sfname); +  xfree(fname); +  xfree(sfname);    --nesting;            /* see matching increment above */    // When stopping to execute autocommands, restore the search patterns and @@ -6730,12 +6730,12 @@ apply_autocmds_group (      did_filetype = FALSE;      while (au_pending_free_buf != NULL) {        buf_T *b = au_pending_free_buf->b_next; -      free(au_pending_free_buf); +      xfree(au_pending_free_buf);        au_pending_free_buf = b;      }      while (au_pending_free_win != NULL) {        win_T *w = au_pending_free_win->w_next; -      free(au_pending_free_win); +      xfree(au_pending_free_win);        au_pending_free_win = w;      }    } @@ -6806,7 +6806,7 @@ auto_next_pat (    char_u      *name;    char        *s; -  free(sourcing_name); +  xfree(sourcing_name);    sourcing_name = NULL;    for (ap = apc->curpat; ap != NULL && !got_int; ap = ap->next) { @@ -6942,9 +6942,9 @@ int has_autocmd(event_T event, char_u *sfname, buf_T *buf)        break;      } -  free(fname); +  xfree(fname);  #ifdef BACKSLASH_IN_FILENAME -  free(sfname); +  xfree(sfname);  #endif    return retval; @@ -7124,7 +7124,7 @@ int au_exists(char_u *arg)      }  theend: -  free(arg_save); +  xfree(arg_save);    return retval;  } @@ -7203,7 +7203,7 @@ int match_file_list(char_u *list, char_u *sfname, char_u *ffname)        break;      match = match_file_pat(regpat, NULL, ffname, sfname,          tail, (int)allow_dirs); -    free(regpat); +    xfree(regpat);      if (match)        return TRUE;    } @@ -7399,7 +7399,7 @@ file_pat_to_reg_pat (        EMSG(_("E219: Missing {."));      else        EMSG(_("E220: Missing }.")); -    free(reg_pat); +    xfree(reg_pat);      reg_pat = NULL;    }    return reg_pat; diff --git a/src/nvim/fold.c b/src/nvim/fold.c index 281e5b5768..8e6c2a598e 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -1326,7 +1326,7 @@ static void deleteFoldEntry(garray_T *gap, int idx, int recursive)                  sizeof(fold_T) * (size_t)(gap->ga_len - (idx + 1)));        /* move the contained folds one level up */        memmove(fp, nfp, sizeof(fold_T) * (size_t)moved); -      free(nfp); +      xfree(nfp);        gap->ga_len += moved - 1;      }    } @@ -1760,7 +1760,7 @@ char_u *get_foldtext(win_T *wp, linenr_T lnum, linenr_T lnume,        }        if (*p != NUL) {          p = transstr(text); -        free(text); +        xfree(text);          text = p;        }      } diff --git a/src/nvim/garray.c b/src/nvim/garray.c index 31a79db209..953eb58841 100644 --- a/src/nvim/garray.c +++ b/src/nvim/garray.c @@ -24,7 +24,7 @@  /// Clear an allocated growing array.  void ga_clear(garray_T *gap)  { -  free(gap->ga_data); +  xfree(gap->ga_data);    // Initialize growing array without resetting itemsize or growsize    gap->ga_data = NULL; @@ -114,7 +114,7 @@ void ga_remove_duplicate_strings(garray_T *gap)    // loop over the growing array in reverse    for (int i = gap->ga_len - 1; i > 0; i--) {      if (fnamecmp(fnames[i - 1], fnames[i]) == 0) { -      free(fnames[i]); +      xfree(fnames[i]);        // close the gap (move all strings one slot lower)        for (int j = i + 1; j < gap->ga_len; j++) { diff --git a/src/nvim/garray.h b/src/nvim/garray.h index b758fce5da..642eaf54f0 100644 --- a/src/nvim/garray.h +++ b/src/nvim/garray.h @@ -61,7 +61,7 @@ static inline void *ga_append_via_ptr(garray_T *gap, size_t item_size)      ga_clear(_gap);                                             \    } while (false) -#define FREE_PTR_PTR(ptr) free(*(ptr)) +#define FREE_PTR_PTR(ptr) xfree(*(ptr))  /// Call `free` for every pointer stored in the garray and then frees the  /// garray. diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index d901e99a2d..f45ee609bd 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -167,7 +167,7 @@ void free_buff(buffheader_T *buf)    for (p = buf->bh_first.b_next; p != NULL; p = np) {      np = p->b_next; -    free(p); +    xfree(p);    }    buf->bh_first.b_next = NULL;  } @@ -365,7 +365,7 @@ static int read_readbuf(buffheader_T *buf, int advance)    if (advance) {      if (curr->b_str[++buf->bh_index] == NUL) {        buf->bh_first.b_next = curr->b_next; -      free(curr); +      xfree(curr);        buf->bh_index = 0;      }    } @@ -495,7 +495,7 @@ void saveRedobuff(void)      s = get_buffcont(&save_redobuff, FALSE);      if (s != NULL) {        add_buff(&redobuff, s, -1L); -      free(s); +      xfree(s);      }    }  } @@ -904,7 +904,7 @@ int ins_typebuf(char_u *str, int noremap, int offset, int nottyped, int silent)          typebuf.tb_buf + typebuf.tb_off + offset,          (size_t)(typebuf.tb_len - offset + 1));      if (typebuf.tb_buf != typebuf_init) -      free(typebuf.tb_buf); +      xfree(typebuf.tb_buf);      typebuf.tb_buf = s1;      memmove(s2 + newoff, typebuf.tb_noremap + typebuf.tb_off, @@ -913,7 +913,7 @@ int ins_typebuf(char_u *str, int noremap, int offset, int nottyped, int silent)          typebuf.tb_noremap + typebuf.tb_off + offset,          (size_t)(typebuf.tb_len - offset));      if (typebuf.tb_noremap != noremapbuf_init) -      free(typebuf.tb_noremap); +      xfree(typebuf.tb_noremap);      typebuf.tb_noremap = s2;      typebuf.tb_off = newoff; @@ -1162,11 +1162,11 @@ void free_typebuf(void)    if (typebuf.tb_buf == typebuf_init)      EMSG2(_(e_intern2), "Free typebuf 1");    else -    free(typebuf.tb_buf); +    xfree(typebuf.tb_buf);    if (typebuf.tb_noremap == noremapbuf_init)      EMSG2(_(e_intern2), "Free typebuf 2");    else -    free(typebuf.tb_noremap); +    xfree(typebuf.tb_noremap);  }  /* @@ -2068,10 +2068,10 @@ static int vgetorpeek(int advance)                i = ins_typebuf(s, noremap,                    0, TRUE, cmd_silent || save_m_silent);                if (save_m_expr) -                free(s); +                xfree(s);              } -            free(save_m_keys); -            free(save_m_str); +            xfree(save_m_keys); +            xfree(save_m_str);              if (i == FAIL) {                c = -1;                break; @@ -2906,9 +2906,9 @@ do_map (              } else {                          /* new rhs for existing entry */                mp->m_mode &= ~mode;                      /* remove mode bits */                if (mp->m_mode == 0 && !did_it) {             /* reuse entry */ -                free(mp->m_str); +                xfree(mp->m_str);                  mp->m_str = vim_strsave(rhs); -                free(mp->m_orig_str); +                xfree(mp->m_orig_str);                  mp->m_orig_str = vim_strsave(orig_rhs);                  mp->m_noremap = noremap;                  mp->m_nowait = nowait; @@ -2998,8 +2998,8 @@ do_map (    }  theend: -  free(keys_buf); -  free(arg_buf); +  xfree(keys_buf); +  xfree(arg_buf);    return retval;  } @@ -3012,11 +3012,11 @@ static void map_free(mapblock_T **mpp)    mapblock_T  *mp;    mp = *mpp; -  free(mp->m_keys); -  free(mp->m_str); -  free(mp->m_orig_str); +  xfree(mp->m_keys); +  xfree(mp->m_str); +  xfree(mp->m_orig_str);    *mpp = mp->m_next; -  free(mp); +  xfree(mp);  }  /* @@ -3211,7 +3211,7 @@ showmap (    if (mapchars != NULL) {      msg_puts(mapchars);      len = (int)STRLEN(mapchars); -    free(mapchars); +    xfree(mapchars);    }    while (++len <= 3) @@ -3246,7 +3246,7 @@ showmap (      char_u *s = vim_strsave(mp->m_str);      vim_unescape_csi(s);      msg_outtrans_special(s, FALSE); -    free(s); +    xfree(s);    }    if (p_verbose > 0)      last_set_msg(mp->m_script_ID); @@ -3285,7 +3285,7 @@ int map_to_exists(char_u *str, char_u *modechars, int abbr)      mode |= CMDLINE;    retval = map_to_exists_mode(rhs, mode, abbr); -  free(buf); +  xfree(buf);    return retval;  } @@ -3469,7 +3469,7 @@ int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file)                p = NULL;              }            } -          free(p); +          xfree(p);          }        }       /* for (mp) */      }     /* for (hash) */ @@ -3499,7 +3499,7 @@ int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file)        if (STRCMP(*ptr1, *ptr2))          *++ptr1 = *ptr2++;        else { -        free(*ptr2++); +        xfree(*ptr2++);          count--;        }      } @@ -3617,7 +3617,7 @@ int check_abbr(int c, char_u *ptr, int col, int mincol)                && qlen == len                && !STRNCMP(q, ptr, (size_t)len);        if (q != mp->m_keys) { -        free(q); +        xfree(q);        }        if (match) {          break; @@ -3669,7 +3669,7 @@ int check_abbr(int c, char_u *ptr, int col, int mincol)          /* no abbrev. for these chars */          typebuf.tb_no_abbr_cnt += (int)STRLEN(s) + j + 1;          if (mp->m_expr) -          free(s); +          xfree(s);        }        tb[0] = Ctrl_H; @@ -3725,13 +3725,13 @@ eval_map_expr (    msg_row = save_msg_row;    restore_cmdline_alloc(save_cmd); -  free(expr); +  xfree(expr);    if (p == NULL)      return NULL;    /* Escape CSI in the result to be able to use the string as typeahead. */    res = vim_strsave_escape_csi(p); -  free(p); +  xfree(p);    return res;  } @@ -4171,7 +4171,7 @@ void add_map(char_u *map, int mode)    p_cpo = (char_u *)"";         /* Allow <> notation */    s = vim_strsave(map);    (void)do_map(0, s, mode, FALSE); -  free(s); +  xfree(s);    p_cpo = cpo_save;  } diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c index b5e7ec414c..6e9ad02b3a 100644 --- a/src/nvim/hardcopy.c +++ b/src/nvim/hardcopy.c @@ -551,7 +551,7 @@ static void prt_header(prt_settings_T *psettings, int pagenum, linenr_T lnum)      p += l;    } -  free(tbuf); +  xfree(tbuf);    if (psettings->do_syntax)      /* Set colors for next character. */ @@ -1539,7 +1539,7 @@ static int prt_find_resource(char *name, struct prt_ps_resource_S *resource)    retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,                  resource->filename)              && resource->filename[0] != NUL); -  free(buffer); +  xfree(buffer);    return retval;  } @@ -1921,7 +1921,7 @@ void mch_print_cleanup(void)       */      for (i = PRT_PS_FONT_ROMAN; i <= PRT_PS_FONT_BOLDOBLIQUE; i++) {        if (prt_ps_mb_font.ps_fontname[i] != NULL) -        free(prt_ps_mb_font.ps_fontname[i]); +        xfree(prt_ps_mb_font.ps_fontname[i]);        prt_ps_mb_font.ps_fontname[i] = NULL;      }    } @@ -1936,7 +1936,7 @@ void mch_print_cleanup(void)      prt_file_error = FALSE;    }    if (prt_ps_file_name != NULL) { -    free(prt_ps_file_name); +    xfree(prt_ps_file_name);      prt_ps_file_name = NULL;    }  } @@ -2342,7 +2342,7 @@ int mch_print_init(prt_settings_T *psettings, char_u *jobname, int forceit)      p = expand_env_save(psettings->outfile);      if (p != NULL) {        prt_ps_fd = mch_fopen((char *)p, WRITEBIN); -      free(p); +      xfree(p);      }    }    if (prt_ps_fd == NULL) { @@ -3032,7 +3032,7 @@ int mch_print_text_out(char_u *p, size_t len)    /* Need to free any translated characters */    if (prt_do_conv) -    free(p); +    xfree(p);    prt_text_run += char_width;    prt_pos_x += char_width; diff --git a/src/nvim/hashtab.c b/src/nvim/hashtab.c index 6b90c4fee4..2da937633e 100644 --- a/src/nvim/hashtab.c +++ b/src/nvim/hashtab.c @@ -53,7 +53,7 @@ void hash_init(hashtab_T *ht)  void hash_clear(hashtab_T *ht)  {    if (ht->ht_array != ht->ht_smallarray) { -    free(ht->ht_array); +    xfree(ht->ht_array);    }  } @@ -65,7 +65,7 @@ void hash_clear_all(hashtab_T *ht, unsigned int off)    size_t todo = ht->ht_used;    for (hashitem_T *hi = ht->ht_array; todo > 0; ++hi) {      if (!HASHITEM_EMPTY(hi)) { -      free(hi->hi_key - off); +      xfree(hi->hi_key - off);        todo--;      }    } @@ -351,7 +351,7 @@ static void hash_may_resize(hashtab_T *ht, size_t minitems)    }    if (ht->ht_array != ht->ht_smallarray) { -    free(ht->ht_array); +    xfree(ht->ht_array);    }    ht->ht_array = newarray;    ht->ht_mask = newmask; diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c index bd9e005676..48d8522865 100644 --- a/src/nvim/if_cscope.c +++ b/src/nvim/if_cscope.c @@ -433,7 +433,7 @@ static void cs_stat_emsg(char *fname)    (void)sprintf(buf, stat_emsg, fname, errno);    (void)EMSG(buf); -  free(buf); +  xfree(buf);  } @@ -470,7 +470,7 @@ cs_add_common (    if (fname == NULL)      goto add_err;    fname = (char *)vim_strnsave((char_u *)fname, len); -  free(fbuf); +  xfree(fbuf);    FileInfo file_info;    bool file_info_ok  = os_fileinfo(fname, &file_info);    if (!file_info_ok) { @@ -538,15 +538,15 @@ staterr:      }    } -  free(fname); -  free(fname2); -  free(ppath); +  xfree(fname); +  xfree(fname2); +  xfree(ppath);    return CSCOPE_SUCCESS;  add_err: -  free(fname2); -  free(fname); -  free(ppath); +  xfree(fname2); +  xfree(fname); +  xfree(ppath);    return CSCOPE_FAILURE;  } /* cs_add_common */ @@ -605,7 +605,7 @@ static int cs_cnt_matches(int idx)        cs_reading_emsg(idx); -      free(buf); +      xfree(buf);        return -1;      } @@ -636,7 +636,7 @@ static int cs_cnt_matches(int idx)      break;    } -  free(buf); +  xfree(buf);    return nlines;  } /* cs_cnt_matches */ @@ -805,9 +805,9 @@ err_closing:      }  # ifdef UNIX      /* on Win32 we still need prog */ -    free(prog); +    xfree(prog);  # endif -    free(ppath); +    xfree(ppath);  #if defined(UNIX)  # if defined(HAVE_SETSID) || defined(HAVE_SETPGID) @@ -852,8 +852,8 @@ err_closing:      si.hStdInput  = stdin_rd;      created = CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE,          NULL, NULL, &si, &pi); -    free(prog); -    free(cmd); +    xfree(prog); +    xfree(cmd);      if (!created) {        PERROR(_("cs_create_connection exec failed")); @@ -982,7 +982,7 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose, int us        sprintf(buf, nf, *qfpos, *(qfpos-1));        (void)EMSG(buf); -      free(buf); +      xfree(buf);        return FALSE;      } @@ -1022,22 +1022,22 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose, int us      if (nummatches[i] == 0)        (void)cs_read_prompt(i);    } -  free(cmd); +  xfree(cmd);    if (totmatches == 0) {      char *nf = _("E259: no matches found for cscope query %s of %s");      char *buf;      if (!verbose) { -      free(nummatches); +      xfree(nummatches);        return FALSE;      }      buf = xmalloc(strlen(opt) + strlen(pat) + strlen(nf));      sprintf(buf, nf, opt, pat);      (void)EMSG(buf); -    free(buf); -    free(nummatches); +    xfree(buf); +    xfree(nummatches);      return FALSE;    } @@ -1079,8 +1079,8 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose, int us        }      }      os_remove((char *)tmp); -    free(tmp); -    free(nummatches); +    xfree(tmp); +    xfree(nummatches);      return TRUE;    } else {      char **matches = NULL, **contexts = NULL; @@ -1089,7 +1089,7 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose, int us      /* read output */      cs_fill_results((char *)pat, totmatches, nummatches, &matches,          &contexts, &matched); -    free(nummatches); +    xfree(nummatches);      if (matches == NULL)        return FALSE; @@ -1424,12 +1424,12 @@ static char *cs_manage_matches(char **matches, char **contexts, int totmatches,      if (mp != NULL) {        if (cnt > 0)          while (cnt--) { -          free(mp[cnt]); +          xfree(mp[cnt]);            if (cp != NULL) -            free(cp[cnt]); +            xfree(cp[cnt]);          } -      free(mp); -      free(cp); +      xfree(mp); +      xfree(cp);      }      mp = NULL;      cp = NULL; @@ -1537,14 +1537,14 @@ static void cs_file_results(FILE *f, int *nummatches_a)        else          fprintf(f, "%s\t%s\t%s %s\n", fullname, slno, context, search); -      free(context); -      free(fullname); +      xfree(context); +      xfree(fullname);      }     /* for all matches */      (void)cs_read_prompt(i);    }   /* for all cscope connections */ -  free(buf); +  xfree(buf);  }  /* @@ -1583,7 +1583,7 @@ static void cs_fill_results(char *tagstr, int totmatches, int *nummatches_a, cha        matches[totsofar] = cs_make_vim_style_matches(fullname, slno, search,                                                      tagstr); -      free(fullname); +      xfree(fullname);        if (strcmp(cntx, "<global>") == 0)          cntxts[totsofar] = NULL; @@ -1601,16 +1601,16 @@ static void cs_fill_results(char *tagstr, int totmatches, int *nummatches_a, cha    if (totsofar == 0) {      /* No matches, free the arrays and return NULL in "*matches_p". */ -    free(matches); +    xfree(matches);      matches = NULL; -    free(cntxts); +    xfree(cntxts);      cntxts = NULL;    }    *matched = totsofar;    *matches_p = matches;    *cntxts_p = cntxts; -  free(buf); +  xfree(buf);  } /* cs_fill_results */ @@ -1661,7 +1661,7 @@ static void cs_print_tags_priv(char **matches, char **cntxts, int num_matches)    (void)sprintf(buf, cstag_msg, ptag);    MSG_PUTS_ATTR(buf, hl_attr(HLF_T)); -  free(tbuf); +  xfree(tbuf);    MSG_PUTS_ATTR(_("\n   #   line"), hl_attr(HLF_T));      /* strlen is 7 */    msg_advance(msg_col + 2); @@ -1727,7 +1727,7 @@ static void cs_print_tags_priv(char **matches, char **cntxts, int num_matches)        MSG_PUTS_LONG(extra);      } -    free(tbuf);     /* only after printing extra due to strtok use */ +    xfree(tbuf);     /* only after printing extra due to strtok use */      if (msg_col)        msg_putchar('\n'); @@ -1741,7 +1741,7 @@ static void cs_print_tags_priv(char **matches, char **cntxts, int num_matches)      num++;    }   /* for all matches */ -  free(buf); +  xfree(buf);  } /* cs_print_tags_priv */ @@ -1806,7 +1806,7 @@ static int cs_read_prompt(int i)          else if (p_csverbose)            cs_reading_emsg(i);           /* don't have additional information */          cs_release_csp(i, TRUE); -        free(buf); +        xfree(buf);          return CSCOPE_FAILURE;        } @@ -1821,7 +1821,7 @@ static int cs_read_prompt(int i)      break;                  /* did find the prompt */    } -  free(buf); +  xfree(buf);    return CSCOPE_SUCCESS;  } @@ -1947,9 +1947,9 @@ static void cs_release_csp(int i, int freefnpp)      (void)fclose(csinfo[i].to_fp);    if (freefnpp) { -    free(csinfo[i].fname); -    free(csinfo[i].ppath); -    free(csinfo[i].flags); +    xfree(csinfo[i].fname); +    xfree(csinfo[i].ppath); +    xfree(csinfo[i].flags);    }    clear_csinfo(i); @@ -1996,13 +1996,13 @@ static int cs_reset(exarg_T *eap)          MSG_PUTS_ATTR(buf, hl_attr(HLF_R));        }      } -    free(dblist[i]); -    free(pplist[i]); -    free(fllist[i]); +    xfree(dblist[i]); +    xfree(pplist[i]); +    xfree(fllist[i]);    } -  free(dblist); -  free(pplist); -  free(fllist); +  xfree(dblist); +  xfree(pplist); +  xfree(fllist);    if (p_csverbose)      MSG_ATTR(_("All cscope databases reset"), hl_attr(HLF_R) | MSG_HIST); @@ -2061,7 +2061,7 @@ static char *cs_resolve_file(int i, char *name)      fullname = xstrdup(name);    } -  free(csdir); +  xfree(csdir);    return fullname;  } @@ -2109,7 +2109,7 @@ void cs_end(void)    for (i = 0; i < csinfo_size; i++)      cs_release_csp(i, TRUE); -  free(csinfo); +  xfree(csinfo);    csinfo_size = 0;  } diff --git a/src/nvim/indent.c b/src/nvim/indent.c index 5711207933..183456d3f7 100644 --- a/src/nvim/indent.c +++ b/src/nvim/indent.c @@ -297,7 +297,7 @@ int set_indent(int size, int flags)      }      retval = true;    } else { -    free(newline); +    xfree(newline);    }    curwin->w_cursor.col = ind_len;    return retval; diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c index 3b9214abc1..c0613331cf 100644 --- a/src/nvim/indent_c.c +++ b/src/nvim/indent_c.c @@ -136,7 +136,7 @@ bool cin_is_cinword(char_u *line)      }    } -  free(cinw_buf); +  xfree(cinw_buf);    return retval;  } @@ -3280,7 +3280,7 @@ theend:    /* put the cursor back where it belongs */    curwin->w_cursor = cur_curpos; -  free(linecopy); +  xfree(linecopy);    if (amount < 0)      return 0; diff --git a/src/nvim/lib/khash.h b/src/nvim/lib/khash.h index c9198e048c..96e7ea6df0 100644 --- a/src/nvim/lib/khash.h +++ b/src/nvim/lib/khash.h @@ -181,7 +181,7 @@ typedef khint_t khiter_t;  #define krealloc(P,Z) xrealloc(P,Z)  #endif  #ifndef kfree -#define kfree(P) free(P) +#define kfree(P) xfree(P)  #endif  static const double __ac_HASH_UPPER = 0.77; diff --git a/src/nvim/lib/klist.h b/src/nvim/lib/klist.h index f8dc7d4c43..7df809f07b 100644 --- a/src/nvim/lib/klist.h +++ b/src/nvim/lib/klist.h @@ -44,9 +44,9 @@      static inline void kmp_destroy_##name(kmp_##name##_t *mp) {         \          size_t k;                                                       \          for (k = 0; k < mp->n; ++k) {                                   \ -            kmpfree_f(mp->buf[k]); free(mp->buf[k]);                    \ +            kmpfree_f(mp->buf[k]); xfree(mp->buf[k]);                   \          }                                                               \ -        free(mp->buf); free(mp);                                        \ +        xfree(mp->buf); xfree(mp);                                      \      }                                                                   \      static inline kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) {     \          ++mp->cnt;                                                      \ @@ -95,7 +95,7 @@              kmp_free(name, kl->mp, p);                                  \          kmp_free(name, kl->mp, p);                                      \          kmp_destroy(name, kl->mp);                                      \ -        free(kl);                                                       \ +        xfree(kl);                                                       \      }                                                                   \      static inline kltype_t *kl_pushp_##name(kl_##name##_t *kl) {        \          kl1_##name *q, *p = kmp_alloc(name, kl->mp);                    \ diff --git a/src/nvim/lib/kvec.h b/src/nvim/lib/kvec.h index 982b5d6f1c..0466cb229c 100644 --- a/src/nvim/lib/kvec.h +++ b/src/nvim/lib/kvec.h @@ -55,7 +55,7 @@ int main() {  #define kvec_t(type) struct { size_t size, capacity; type *items; }  #define kv_init(v) ((v).size = (v).capacity = 0, (v).items = 0) -#define kv_destroy(v) free((v).items) +#define kv_destroy(v) xfree((v).items)  #define kv_A(v, i) ((v).items[(i)])  #define kv_pop(v) ((v).items[--(v).size])  #define kv_size(v) ((v).size) diff --git a/src/nvim/main.c b/src/nvim/main.c index a03fd2e8a9..4753dc31c3 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -644,7 +644,7 @@ main_loop (          // duplicates.          p = keep_msg;          msg_attr(p, keep_msg_attr); -        free(p); +        xfree(p);        }        if (need_fileinfo) {              /* show file info after redraw */          fileinfo(FALSE, TRUE, FALSE); @@ -840,7 +840,7 @@ static void init_locale(void)        bindtextdomain(VIMPACKAGE, (char *)NameBuff);      }      if (mustfree) -      free(p); +      xfree(p);      textdomain(VIMPACKAGE);    }    TIME_MSG("locale set"); @@ -1285,7 +1285,7 @@ scripterror:          char_u      *r;          r = concat_fnames(p, path_tail(alist_name(&GARGLIST[0])), TRUE); -        free(p); +        xfree(p);          p = r;        } @@ -1322,7 +1322,7 @@ scripterror:      p = xmalloc(STRLEN(parmp->commands[0]) + 3);      sprintf((char *)p, ":%s\r", parmp->commands[0]);      set_vim_var_string(VV_SWAPCOMMAND, p, -1); -    free(p); +    xfree(p);    }    TIME_MSG("parsing arguments");  } @@ -1753,7 +1753,7 @@ static void exe_commands(mparm_T *parmp)    for (i = 0; i < parmp->n_commands; ++i) {      do_cmdline_cmd(parmp->commands[i]);      if (parmp->cmds_tofree[i]) -      free(parmp->commands[i]); +      xfree(parmp->commands[i]);    }    sourcing_name = NULL;    current_SID = 0; diff --git a/src/nvim/map.c b/src/nvim/map.c index 06ae19f5bc..5d83020619 100644 --- a/src/nvim/map.c +++ b/src/nvim/map.c @@ -45,7 +45,7 @@    void map_##T##_##U##_free(Map(T, U) *map)                                   \    {                                                                           \      kh_destroy(T##_##U##_map, map->table);                                    \ -    free(map);                                                                \ +    xfree(map);                                                               \    }                                                                           \                                                                                \    U map_##T##_##U##_get(Map(T, U) *map, T key)                                \ diff --git a/src/nvim/mark.c b/src/nvim/mark.c index bc4eaa5b60..a142d12c13 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -131,7 +131,7 @@ int setmark_pos(int c, pos_T *pos, int fnum)      i = c - 'A';      namedfm[i].fmark.mark = *pos;      namedfm[i].fmark.fnum = fnum; -    free(namedfm[i].fname); +    xfree(namedfm[i].fname);      namedfm[i].fname = NULL;      return OK;    } @@ -157,7 +157,7 @@ void setpcmark(void)    /* If jumplist is full: remove oldest entry */    if (++curwin->w_jumplistlen > JUMPLISTSIZE) {      curwin->w_jumplistlen = JUMPLISTSIZE; -    free(curwin->w_jumplist[0].fname); +    xfree(curwin->w_jumplist[0].fname);      for (i = 1; i < JUMPLISTSIZE; ++i)        curwin->w_jumplist[i - 1] = curwin->w_jumplist[i];    } @@ -496,7 +496,7 @@ void fmarks_check_names(buf_T *buf)      }    } -  free(name); +  xfree(name);  }  static void fmarks_check_one(xfmark_T *fm, char_u *name, buf_T *buf) @@ -505,7 +505,7 @@ static void fmarks_check_one(xfmark_T *fm, char_u *name, buf_T *buf)        && fm->fname != NULL        && fnamecmp(name, fm->fname) == 0) {      fm->fmark.fnum = buf->b_fnum; -    free(fm->fname); +    xfree(fm->fname);      fm->fname = NULL;    }  } @@ -623,7 +623,7 @@ void do_marks(exarg_T *eap)            arg, &namedfm[i].fmark.mark, name,            namedfm[i].fmark.fnum == curbuf->b_fnum);        if (namedfm[i].fmark.fnum != 0) -        free(name); +        xfree(name);      }    }    show_one_mark('"', arg, &curbuf->b_last_cursor, NULL, TRUE); @@ -678,7 +678,7 @@ show_one_mark (        if (name != NULL) {          msg_outtrans_attr(name, current ? hl_attr(HLF_D) : 0);          if (mustfree) -          free(name); +          xfree(name);        }      }      ui_flush();                    /* show one line at a time */ @@ -735,7 +735,7 @@ void ex_delmarks(exarg_T *eap)              else                n = i - 'A';              namedfm[n].fmark.mark.lnum = 0; -            free(namedfm[n].fname); +            xfree(namedfm[n].fname);              namedfm[n].fname = NULL;            }          } @@ -777,7 +777,7 @@ void ex_jumps(exarg_T *eap)        msg_putchar('\n');        if (got_int) { -        free(name); +        xfree(name);          break;        }        sprintf((char *)IObuff, "%c %2d %5ld %4d ", @@ -790,7 +790,7 @@ void ex_jumps(exarg_T *eap)        msg_outtrans_attr(name,            curwin->w_jumplist[i].fmark.fnum == curbuf->b_fnum            ? hl_attr(HLF_D) : 0); -      free(name); +      xfree(name);        os_breakcheck();      }      ui_flush(); @@ -824,7 +824,7 @@ void ex_changes(exarg_T *eap)        msg_outtrans(IObuff);        name = mark_line(&curbuf->b_changelist[i], 17);        msg_outtrans_attr(name, hl_attr(HLF_D)); -      free(name); +      xfree(name);        os_breakcheck();      }      ui_flush(); @@ -1120,7 +1120,7 @@ static void cleanup_jumplist(void)      if (i >= curwin->w_jumplistlen)         /* no duplicate */        curwin->w_jumplist[to++] = curwin->w_jumplist[from];      else -      free(curwin->w_jumplist[from].fname); +      xfree(curwin->w_jumplist[from].fname);    }    if (curwin->w_jumplistidx == curwin->w_jumplistlen)      curwin->w_jumplistidx = to; @@ -1151,7 +1151,7 @@ void free_jumplist(win_T *wp)    int i;    for (i = 0; i < wp->w_jumplistlen; ++i) -    free(wp->w_jumplist[i].fname); +    xfree(wp->w_jumplist[i].fname);  }  void set_last_cursor(win_T *win) @@ -1167,7 +1167,7 @@ void free_all_marks(void)    for (i = 0; i < NMARKS + EXTRA_MARKS; i++)      if (namedfm[i].fmark.mark.lnum != 0) -      free(namedfm[i].fname); +      xfree(namedfm[i].fname);  }  #endif @@ -1212,7 +1212,7 @@ int read_viminfo_filemark(vir_T *virp, int force)        fm->fmark.mark.coladd = 0;        fm->fmark.fnum = 0;        str = skipwhite(str); -      free(fm->fname); +      xfree(fm->fname);        fm->fname = viminfo_readstring(virp, (int)(str - virp->vir_line),            FALSE);      } @@ -1247,9 +1247,9 @@ void write_viminfo_filemarks(FILE *fp)                : (name != NULL                   && STRCMP(name, namedfm[i].fname) == 0)))          break; -    free(name); +    xfree(name); -    free(namedfm[i].fname); +    xfree(namedfm[i].fname);      for (; i > NMARKS; --i)        namedfm[i] = namedfm[i - 1];      namedfm[NMARKS].fmark.mark = curwin->w_cursor; @@ -1293,7 +1293,7 @@ static void write_one_filemark(FILE *fp, xfmark_T *fm, int c1, int c2)    }    if (fm->fmark.fnum != 0) -    free(name); +    xfree(name);  }  /* @@ -1317,7 +1317,7 @@ int removable(char_u *name)        }      }    } -  free(name); +  xfree(name);    return retval;  } @@ -1474,7 +1474,7 @@ void copy_viminfo_marks(vir_T *virp, FILE *fp_out, int count, int eof, int flags          count++;        }      } -    free(str); +    xfree(str);      pos.coladd = 0;      while (!(eof = viminfo_readline(virp)) && line[0] == TAB) { @@ -1520,5 +1520,5 @@ void copy_viminfo_marks(vir_T *virp, FILE *fp_out, int count, int eof, int flags        break;      }    } -  free(name_buf); +  xfree(name_buf);  } diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c index fd6050f2d6..e45d43270a 100644 --- a/src/nvim/mbyte.c +++ b/src/nvim/mbyte.c @@ -523,7 +523,7 @@ char_u * mb_init(void)        convert_setup(&vimconv, p_enc, (char_u *)"utf-8");        vimconv.vc_fail = true;      } -    free(p); +    xfree(p);    }  #endif @@ -549,7 +549,7 @@ char_u * mb_init(void)             */            p = string_convert(&vimconv, (char_u *)buf, NULL);            if (p != NULL) { -            free(p); +            xfree(p);              n = 1;            } else              n = 2; @@ -3103,7 +3103,7 @@ void utf_find_illegal(void)    for (;; ) {      p = get_cursor_pos_ptr();      if (vimconv.vc_type != CONV_NONE) { -      free(tofree); +      xfree(tofree);        tofree = string_convert(&vimconv, p, NULL);        if (tofree == NULL)          break; @@ -3142,7 +3142,7 @@ void utf_find_illegal(void)    beep_flush();  theend: -  free(tofree); +  xfree(tofree);    convert_setup(&vimconv, NULL, NULL);  } @@ -3375,7 +3375,7 @@ char_u *enc_canonize(char_u *enc) FUNC_ATTR_NONNULL_RET        STRMOVE(r, p);    } else if ((i = enc_alias_search(p)) >= 0) {      /* alias recognized, get canonical name */ -    free(r); +    xfree(r);      r = vim_strsave((char_u *)enc_canon_table[i].name);    }    return r; @@ -3537,7 +3537,7 @@ static char_u * iconv_string(vimconv_T *vcp, char_u *str, size_t slen,        p = xmalloc(len);        if (done > 0)          memmove(p, result, done); -      free(result); +      xfree(result);        result = p;      } @@ -3582,7 +3582,7 @@ static char_u * iconv_string(vimconv_T *vcp, char_u *str, size_t slen,        fromlen -= l;      } else if (ICONV_ERRNO != ICONV_E2BIG) {        /* conversion failed */ -      free(result); +      xfree(result);        result = NULL;        break;      } @@ -3891,7 +3891,7 @@ char_u * string_convert_ext(vimconv_T *vcp, char_u *ptr,            if (l_w == 0) {              /* Illegal utf-8 byte cannot be converted */ -            free(retval); +            xfree(retval);              return NULL;            }            if (unconvlenp != NULL && l_w > len - i) { @@ -3925,7 +3925,7 @@ char_u * string_convert_ext(vimconv_T *vcp, char_u *ptr,              if (c < 0x100)                *d++ = c;              else if (vcp->vc_fail) { -              free(retval); +              xfree(retval);                return NULL;              } else {                *d++ = 0xbf; diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c index 26542759be..bbe2e62021 100644 --- a/src/nvim/memfile.c +++ b/src/nvim/memfile.c @@ -99,7 +99,7 @@ memfile_T *mf_open(char_u *fname, int flags)      mf_do_open(mfp, fname, flags);      if (mfp->mf_fd < 0) {            // fail if file could not be opened -      free(mfp); +      xfree(mfp);        return NULL;      }    } @@ -210,12 +210,12 @@ void mf_close(memfile_T *mfp, bool del_file)      mf_free_bhdr(hp);    }    while (mfp->mf_free_first != NULL)    // free entries in free list -    free(mf_rem_free(mfp)); +    xfree(mf_rem_free(mfp));    mf_hash_free(&mfp->mf_hash);    mf_hash_free_all(&mfp->mf_trans);     // free hashtable and its items -  free(mfp->mf_fname); -  free(mfp->mf_ffname); -  free(mfp); +  xfree(mfp->mf_fname); +  xfree(mfp->mf_ffname); +  xfree(mfp);  }  /// Close the swap file for a memfile. Used when 'swapfile' is reset. @@ -242,8 +242,8 @@ void mf_close_file(buf_T *buf, bool getlines)    if (mfp->mf_fname != NULL) {      os_remove((char *)mfp->mf_fname);    // delete the swap file -    free(mfp->mf_fname); -    free(mfp->mf_ffname); +    xfree(mfp->mf_fname); +    xfree(mfp->mf_ffname);      mfp->mf_fname = NULL;      mfp->mf_ffname = NULL;    } @@ -302,7 +302,7 @@ bhdr_T *mf_new(memfile_T *mfp, bool negative, unsigned page_count)      } else {                    // use the number, remove entry from free list        freep = mf_rem_free(mfp);        hp->bh_bnum = freep->bh_bnum; -      free(freep); +      xfree(freep);      }    } else {                      // get a new number      if (hp == NULL) { @@ -398,11 +398,11 @@ void mf_put(memfile_T *mfp, bhdr_T *hp, bool dirty, bool infile)  /// Signal block as no longer used (may put it in the free list).  void mf_free(memfile_T *mfp, bhdr_T *hp)  { -  free(hp->bh_data);            // free data +  xfree(hp->bh_data);            // free data    mf_rem_hash(mfp, hp);         // get *hp out of the hash list    mf_rem_used(mfp, hp);         // get *hp out of the used list    if (hp->bh_bnum < 0) { -    free(hp);                   // don't want negative numbers in free list +    xfree(hp);                   // don't want negative numbers in free list      mfp->mf_neg_count--;    } else {      mf_ins_free(mfp, hp);       // put *hp in the free list @@ -627,7 +627,7 @@ static bhdr_T *mf_release(memfile_T *mfp, unsigned page_count)    /// Make sure page_count of bh_data is right.    if (hp->bh_page_count != page_count) { -    free(hp->bh_data); +    xfree(hp->bh_data);      hp->bh_data = xmalloc(mfp->mf_page_size * page_count);      hp->bh_page_count = page_count;    } @@ -682,8 +682,8 @@ static bhdr_T *mf_alloc_bhdr(memfile_T *mfp, unsigned page_count)  /// Free a block header and its block memory.  static void mf_free_bhdr(bhdr_T *hp)  { -  free(hp->bh_data); -  free(hp); +  xfree(hp->bh_data); +  xfree(hp);  }  /// Insert a block in the free list. @@ -843,7 +843,7 @@ static int mf_trans_add(memfile_T *mfp, bhdr_T *hp)        freep->bh_page_count -= page_count;      } else {        freep = mf_rem_free(mfp); -      free(freep); +      xfree(freep);      }    } else {      new_bnum = mfp->mf_blocknr_max; @@ -881,7 +881,7 @@ blocknr_T mf_trans_del(memfile_T *mfp, blocknr_T old_nr)    // remove entry from the trans list    mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np); -  free(np); +  xfree(np);    return new_bnum;  } @@ -902,7 +902,7 @@ void mf_set_ffname(memfile_T *mfp)  void mf_fullname(memfile_T *mfp)  {    if (mfp != NULL && mfp->mf_fname != NULL && mfp->mf_ffname != NULL) { -    free(mfp->mf_fname); +    xfree(mfp->mf_fname);      mfp->mf_fname = mfp->mf_ffname;      mfp->mf_ffname = NULL;    } @@ -940,8 +940,8 @@ static void mf_do_open(memfile_T *mfp, char_u *fname, int flags)    // If the file cannot be opened, use memory only    if (mfp->mf_fd < 0) { -    free(mfp->mf_fname); -    free(mfp->mf_ffname); +    xfree(mfp->mf_fname); +    xfree(mfp->mf_ffname);      mfp->mf_fname = NULL;      mfp->mf_ffname = NULL;    } else { @@ -979,7 +979,7 @@ static void mf_hash_init(mf_hashtab_T *mht)  static void mf_hash_free(mf_hashtab_T *mht)  {    if (mht->mht_buckets != mht->mht_small_buckets) -    free(mht->mht_buckets); +    xfree(mht->mht_buckets);  }  /// Free the array of a hash table and all the items it contains. @@ -990,7 +990,7 @@ static void mf_hash_free_all(mf_hashtab_T *mht)    for (size_t idx = 0; idx <= mht->mht_mask; idx++)      for (mf_hashitem_T *mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next) {        next = mhi->mhi_next; -      free(mhi); +      xfree(mhi);      }    mf_hash_free(mht); @@ -1088,7 +1088,7 @@ static void mf_hash_grow(mf_hashtab_T *mht)    }    if (mht->mht_buckets != mht->mht_small_buckets) -    free(mht->mht_buckets); +    xfree(mht->mht_buckets);    mht->mht_buckets = buckets;    mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1; diff --git a/src/nvim/memline.c b/src/nvim/memline.c index 448f15cc07..a72dc43eb4 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -373,7 +373,7 @@ error:    if (mfp != NULL) {      if (hp)        mf_put(mfp, hp, false, false); -    mf_close(mfp, true);            /* will also free(mfp->mf_fname) */ +    mf_close(mfp, true);            /* will also xfree(mfp->mf_fname) */    }    buf->b_ml.ml_mfp = NULL;    return FAIL; @@ -418,7 +418,7 @@ void ml_setname(buf_T *buf)      /* if the file name is the same we don't have to do anything */      if (fnamecmp(fname, mfp->mf_fname) == 0) { -      free(fname); +      xfree(fname);        success = TRUE;        break;      } @@ -431,14 +431,14 @@ void ml_setname(buf_T *buf)      /* try to rename the swap file */      if (vim_rename(mfp->mf_fname, fname) == 0) {        success = TRUE; -      free(mfp->mf_fname); +      xfree(mfp->mf_fname);        mfp->mf_fname = fname; -      free(mfp->mf_ffname); +      xfree(mfp->mf_ffname);        mf_set_ffname(mfp);        ml_upd_block0(buf, UB_SAME_DIR);        break;      } -    free(fname);                /* this fname didn't work, try another */ +    xfree(fname);                /* this fname didn't work, try another */    }    if (mfp->mf_fd == -1) {           /* need to (re)open the swap file */ @@ -567,9 +567,9 @@ void ml_close(buf_T *buf, int del_file)      return;    mf_close(buf->b_ml.ml_mfp, del_file);       /* close the .swp file */    if (buf->b_ml.ml_line_lnum != 0 && (buf->b_ml.ml_flags & ML_LINE_DIRTY)) -    free(buf->b_ml.ml_line_ptr); -  free(buf->b_ml.ml_stack); -  free(buf->b_ml.ml_chunksize); +    xfree(buf->b_ml.ml_line_ptr); +  xfree(buf->b_ml.ml_stack); +  xfree(buf->b_ml.ml_chunksize);    buf->b_ml.ml_chunksize = NULL;    buf->b_ml.ml_mfp = NULL; @@ -935,7 +935,7 @@ void ml_recover(void)      /* need to reallocate the memory used to store the data */      p = xmalloc(mfp->mf_page_size);      memmove(p, hp->bh_data, previous_page_size); -    free(hp->bh_data); +    xfree(hp->bh_data);      hp->bh_data = p;      b0p = hp->bh_data;    } @@ -1008,7 +1008,7 @@ void ml_recover(void)      set_fileformat(b0_ff - 1, OPT_LOCAL);    if (b0_fenc != NULL) {      set_option_value((char_u *)"fenc", 0L, b0_fenc, OPT_LOCAL); -    free(b0_fenc); +    xfree(b0_fenc);    }    unchanged(curbuf, TRUE); @@ -1194,7 +1194,7 @@ void ml_recover(void)        /* Need to copy one line, fetching the other one may flush it. */        p = vim_strsave(ml_get(idx));        i = STRCMP(p, ml_get(idx + lnum)); -      free(p); +      xfree(p);        if (i != 0) {          changed_int();          ++curbuf->b_changedtick; @@ -1237,16 +1237,16 @@ void ml_recover(void)    redraw_curbuf_later(NOT_VALID);  theend: -  free(fname_used); +  xfree(fname_used);    recoverymode = FALSE;    if (mfp != NULL) {      if (hp != NULL)        mf_put(mfp, hp, false, false); -    mf_close(mfp, false);           /* will also free(mfp->mf_fname) */ +    mf_close(mfp, false);           /* will also xfree(mfp->mf_fname) */    }    if (buf != NULL) {  //may be NULL if swap file not found. -    free(buf->b_ml.ml_stack); -    free(buf); +    xfree(buf->b_ml.ml_stack); +    xfree(buf);    }    if (serious_error && called_from_main)      ml_close(curbuf, TRUE); @@ -1348,7 +1348,7 @@ recover_names (            tail = concat_fnames(dir_name, tail, TRUE);          }          num_names = recov_file_names(names, tail, FALSE); -        free(tail); +        xfree(tail);        }      } @@ -1372,7 +1372,7 @@ recover_names (            swapname = NULL;            num_files = 1;          } -        free(swapname); +        xfree(swapname);        }      } @@ -1386,9 +1386,9 @@ recover_names (            /* Remove the name from files[i].  Move further entries             * down.  When the array becomes empty free it here, since             * FreeWild() won't be called below. */ -          free(files[i]); +          xfree(files[i]);            if (--num_files == 0) -            free(files); +            xfree(files);            else              for (; i < num_files; ++i)                files[i] = files[i + 1]; @@ -1429,11 +1429,11 @@ recover_names (        file_count += num_files;      for (int i = 0; i < num_names; ++i) -      free(names[i]); +      xfree(names[i]);      if (num_files > 0)        FreeWild(num_files, files);    } -  free(dir_name); +  xfree(dir_name);    return file_count;  } @@ -1453,8 +1453,8 @@ static char_u *make_percent_swname(char_u *dir, char_u *name)        if (vim_ispathsep(*d))          *d = '%';      d = concat_fnames(dir, s, TRUE); -    free(s); -    free(f); +    xfree(s); +    xfree(f);    }    return d;  } @@ -1582,7 +1582,7 @@ static int recov_file_names(char_u **names, char_u *path, int prepend_dot)      if (STRCMP(p, names[num_names]) != 0)        ++num_names;      else -      free(names[num_names]); +      xfree(names[num_names]);    } else      ++num_names; @@ -2339,7 +2339,7 @@ int ml_replace(linenr_T lnum, char_u *line, int copy)    if (curbuf->b_ml.ml_line_lnum != lnum)            /* other line buffered */      ml_flush_line(curbuf);                          /* flush it */    else if (curbuf->b_ml.ml_flags & ML_LINE_DIRTY)   /* same line allocated */ -    free(curbuf->b_ml.ml_line_ptr);             /* free it */ +    xfree(curbuf->b_ml.ml_line_ptr);             /* free it */    curbuf->b_ml.ml_line_ptr = line;    curbuf->b_ml.ml_line_lnum = lnum;    curbuf->b_ml.ml_flags = (curbuf->b_ml.ml_flags | ML_LINE_DIRTY) & ~ML_EMPTY; @@ -2694,7 +2694,7 @@ static void ml_flush_line(buf_T *buf)          (void)ml_delete_int(buf, lnum, FALSE);        }      } -    free(new_line); +    xfree(new_line);      entered = FALSE;    } @@ -2938,7 +2938,7 @@ static int ml_add_stack(buf_T *buf)      infoptr_T *newstack = xmalloc(sizeof(infoptr_T) *                                      (buf->b_ml.ml_stack_size + STACK_INCR));      memmove(newstack, buf->b_ml.ml_stack, (size_t)top * sizeof(infoptr_T)); -    free(buf->b_ml.ml_stack); +    xfree(buf->b_ml.ml_stack);      buf->b_ml.ml_stack = newstack;      buf->b_ml.ml_stack_size += STACK_INCR;    } @@ -3070,7 +3070,7 @@ char_u *makeswapname(char_u *fname, char_u *ffname, buf_T *buf, char_u *dir_name      r = NULL;      if ((s = make_percent_swname(dir_name, fname)) != NULL) {        r = modname(s, (char_u *)".swp", FALSE); -      free(s); +      xfree(s);      }      return r;    } @@ -3089,7 +3089,7 @@ char_u *makeswapname(char_u *fname, char_u *ffname, buf_T *buf, char_u *dir_name      return NULL;    s = get_file_in_dir(r, dir_name); -  free(r); +  xfree(r);    return s;  } @@ -3129,7 +3129,7 @@ get_file_in_dir (        t = concat_fnames(fname, dname + 2, TRUE);        *tail = save_char;        retval = concat_fnames(t, tail, TRUE); -      free(t); +      xfree(t);      }    } else {      retval = concat_fnames(dname, tail, TRUE); @@ -3264,7 +3264,7 @@ findswapname (      if (fname == NULL)          /* must be out of memory */        break;      if ((n = (int)STRLEN(fname)) == 0) {        /* safety check */ -      free(fname); +      xfree(fname);        fname = NULL;        break;      } @@ -3394,7 +3394,7 @@ findswapname (              if (process_still_running && choice >= 4)                choice++;                 /* Skip missing "Delete it" button */  # endif -            free(name); +            xfree(name);              /* pretend screen didn't scroll, need redraw anyway */              msg_scrolled = 0; @@ -3447,7 +3447,7 @@ findswapname (      if (fname[n - 1] == 'a') {          /* ".s?a" */        if (fname[n - 2] == 'a') {        /* ".saa": tried enough, give up */          EMSG(_("E326: Too many swap files found")); -        free(fname); +        xfree(fname);          fname = NULL;          break;        } @@ -3457,7 +3457,7 @@ findswapname (      --fname[n - 1];                     /* ".swo", ".swn", etc. */    } -  free(dir_name); +  xfree(dir_name);    return fname;  } diff --git a/src/nvim/memory.c b/src/nvim/memory.c index 2223b65a93..35409aef49 100644 --- a/src/nvim/memory.c +++ b/src/nvim/memory.c @@ -92,6 +92,12 @@ void *xmalloc(size_t size)    return ret;  } +/// free wrapper that returns delegates to the backing memory manager +void xfree(void *ptr) +{ +  free(ptr); +} +  /// calloc() wrapper  ///  /// @see {xmalloc} @@ -541,8 +547,8 @@ void free_all_mem(void)    clear_sb_text();            /* free any scrollback text */    /* Free some global vars. */ -  free(last_cmdline); -  free(new_last_cmdline); +  xfree(last_cmdline); +  xfree(new_last_cmdline);    set_keep_msg(NULL, 0);    /* Clear cmdline history. */ diff --git a/src/nvim/menu.c b/src/nvim/menu.c index 8d9b5045b9..1689e7419e 100644 --- a/src/nvim/menu.c +++ b/src/nvim/menu.c @@ -188,7 +188,7 @@ ex_menu (          if (modes & (1 << i)) {            p = popup_mode_name(menu_path, i);            menu_nable_recurse(root_menu, p, MENU_ALL_MODES, enable); -          free(p); +          xfree(p);          }      }      menu_nable_recurse(root_menu, menu_path, modes, enable); @@ -207,7 +207,7 @@ ex_menu (          if (modes & (1 << i)) {            p = popup_mode_name(menu_path, i);            remove_menu(&root_menu, p, MENU_ALL_MODES, TRUE); -          free(p); +          xfree(p);          }      } @@ -241,11 +241,11 @@ ex_menu (            // Include all modes, to make ":amenu" work            menuarg.modes = modes;            add_menu_path(p, &menuarg, pri_tab, map_to); -          free(p); +          xfree(p);          }      } -    free(map_buf); +    xfree(map_buf);    } @@ -391,12 +391,12 @@ add_menu_path (      menup = &menu->children;      parent = menu;      name = next_name; -    free(dname); +    xfree(dname);      dname = NULL;      if (pri_tab[pri_idx + 1] != -1)        ++pri_idx;    } -  free(path_name); +  xfree(path_name);    /*     * Only add system menu items which have not been defined yet. @@ -470,8 +470,8 @@ add_menu_path (    return OK;  erret: -  free(path_name); -  free(dname); +  xfree(path_name); +  xfree(dname);    /* Delete any empty submenu we added before discovering the error.  Repeat     * for higher levels. */ @@ -663,14 +663,14 @@ static void free_menu(vimmenu_T **menup)    /* Don't change *menup until after calling gui_mch_destroy_menu(). The     * MacOS code needs the original structure to properly delete the menu. */    *menup = menu->next; -  free(menu->name); -  free(menu->dname); -  free(menu->en_name); -  free(menu->en_dname); -  free(menu->actext); +  xfree(menu->name); +  xfree(menu->dname); +  xfree(menu->en_name); +  xfree(menu->en_dname); +  xfree(menu->actext);    for (i = 0; i < MENU_MODES; i++)      free_menu_string(menu, i); -  free(menu); +  xfree(menu);  } @@ -686,7 +686,7 @@ static void free_menu_string(vimmenu_T *menu, int idx)      if (menu->strings[i] == menu->strings[idx])        count++;    if (count == 1) -    free(menu->strings[idx]); +    xfree(menu->strings[idx]);    menu->strings[idx] = NULL;  } @@ -711,11 +711,11 @@ static int show_menus(char_u *path_name, int modes)          /* Found menu */          if (*p != NUL && menu->children == NULL) {            EMSG(_(e_notsubmenu)); -          free(path_name); +          xfree(path_name);            return FAIL;          } else if ((menu->modes & modes) == 0x0) {            EMSG(_(e_othermode)); -          free(path_name); +          xfree(path_name);            return FAIL;          }          break; @@ -724,14 +724,14 @@ static int show_menus(char_u *path_name, int modes)      }      if (menu == NULL) {        EMSG2(_(e_nomenu), name); -      free(path_name); +      xfree(path_name);        return FAIL;      }      name = p;      parent = menu;      menu = menu->children;    } -  free(path_name); +  xfree(path_name);    /* Now we have found the matching menu, and we list the mappings */    /* Highlight title */ @@ -893,7 +893,7 @@ char_u *set_context_in_menu_cmd(expand_T *xp, char_u *cmd, char_u *arg, int forc               * Menu path continues, but we have reached a leaf.               * Or menu exists only in another mode.               */ -            free(path_name); +            xfree(path_name);              return NULL;            }            break; @@ -902,13 +902,13 @@ char_u *set_context_in_menu_cmd(expand_T *xp, char_u *cmd, char_u *arg, int forc        }        if (menu == NULL) {          /* No menu found with the name we were looking for */ -        free(path_name); +        xfree(path_name);          return NULL;        }        name = p;        menu = menu->children;      } -    free(path_name); +    xfree(path_name);      xp->xp_context = expand_menus ? EXPAND_MENUNAMES : EXPAND_MENUS;      xp->xp_pattern = after_dot; @@ -1289,7 +1289,7 @@ void ex_emenu(exarg_T *eap)      menu = menu->children;      name = p;    } -  free(saved_name); +  xfree(saved_name);    if (menu == NULL) {      EMSG2(_("E334: Menu not found: %s"), eap->arg);      return; @@ -1410,7 +1410,7 @@ vimmenu_T *gui_find_menu(char_u *path_name)    if (menu == NULL)      EMSG(_("E337: Menu not found - check menu names"));  theend: -  free(saved_name); +  xfree(saved_name);    return menu;  }  #endif @@ -1429,9 +1429,9 @@ static garray_T menutrans_ga = GA_EMPTY_INIT_VALUE;  #define FREE_MENUTRANS(mt) \    menutrans_T* _mt = (mt); \ -  free(_mt->from); \ -  free(_mt->from_noamp); \ -  free(_mt->to) +  xfree(_mt->from); \ +  xfree(_mt->from_noamp); \ +  xfree(_mt->to)  /*   * ":menutrans". @@ -1514,11 +1514,11 @@ static char_u *menutrans_lookup(char_u *name, int len)    name[len] = c;    for (int i = 0; i < menutrans_ga.ga_len; i++) {      if (STRCMP(dname, tp[i].from_noamp) == 0) { -      free(dname); +      xfree(dname);        return tp[i].to;      }    } -  free(dname); +  xfree(dname);    return NULL;  } diff --git a/src/nvim/message.c b/src/nvim/message.c index b2e9488388..ae4d0ec230 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -200,7 +200,7 @@ msg_attr_keep (        * Columns + sc_col)      set_keep_msg(s, 0); -  free(buf); +  xfree(buf);    --entered;    return retval;  } @@ -362,7 +362,7 @@ static char_u   *last_sourcing_name = NULL;   */  void reset_last_sourcing(void)  { -  free(last_sourcing_name); +  xfree(last_sourcing_name);    last_sourcing_name = NULL;    last_sourcing_lnum = 0;  } @@ -433,18 +433,18 @@ void msg_source(int attr)    p = get_emsg_source();    if (p != NULL) {      msg_attr(p, attr); -    free(p); +    xfree(p);    }    p = get_emsg_lnum();    if (p != NULL) {      msg_attr(p, hl_attr(HLF_N)); -    free(p); +    xfree(p);      last_sourcing_lnum = sourcing_lnum;      /* only once for each line */    }    /* remember the last sourcing name printed, also when it's empty */    if (sourcing_name == NULL || other_sourcing_name()) { -    free(last_sourcing_name); +    xfree(last_sourcing_name);      if (sourcing_name == NULL)        last_sourcing_name = NULL;      else @@ -525,13 +525,13 @@ int emsg(char_u *s)        if (p != NULL) {          STRCAT(p, "\n");          redir_write(p, -1); -        free(p); +        xfree(p);        }        p = get_emsg_lnum();        if (p != NULL) {          STRCAT(p, "\n");          redir_write(p, -1); -        free(p); +        xfree(p);        }        redir_write(s, -1);        return TRUE; @@ -726,8 +726,8 @@ int delete_first_msg(void)      assert(msg_hist_len == 1);      last_msg_hist = NULL;    } -  free(p->msg); -  free(p); +  xfree(p->msg); +  xfree(p);    --msg_hist_len;    return OK;  } @@ -949,7 +949,7 @@ void wait_return(int redraw)    reset_last_sourcing();    if (keep_msg != NULL && vim_strsize(keep_msg) >=        (Rows - cmdline_row - 1) * Columns + sc_col) { -    free(keep_msg); +    xfree(keep_msg);      keep_msg = NULL;                /* don't redisplay message, it's too long */    } @@ -985,7 +985,7 @@ static void hit_return_msg(void)   */  void set_keep_msg(char_u *s, int attr)  { -  free(keep_msg); +  xfree(keep_msg);    if (s != NULL && msg_silent == 0)      keep_msg = vim_strsave(s);    else @@ -1002,7 +1002,7 @@ void msg_start(void)    int did_return = FALSE;    if (!msg_silent) { -    free(keep_msg); +    xfree(keep_msg);      keep_msg = NULL;                    /* don't display old message now */    } @@ -1088,7 +1088,7 @@ static void msg_home_replace_attr(char_u *fname, int attr)    name = home_replace_save(NULL, fname);    msg_outtrans_attr(name, attr); -  free(name); +  xfree(name);  }  /* @@ -1808,7 +1808,7 @@ static void inc_msg_scrolled(void)        p = tofree;      }      set_vim_var_string(VV_SCROLLSTART, p, -1); -    free(tofree); +    xfree(tofree);    }    ++msg_scrolled;  } @@ -1879,7 +1879,7 @@ void clear_sb_text(void)    while (last_msgchunk != NULL) {      mp = last_msgchunk->sb_prev; -    free(last_msgchunk); +    xfree(last_msgchunk);      last_msgchunk = mp;    }  } @@ -2586,7 +2586,7 @@ void give_warning(char_u *message, bool hl) FUNC_ATTR_NONNULL_ARG(1)    ++no_wait_return;    set_vim_var_string(VV_WARNINGMSG, message, -1); -  free(keep_msg); +  xfree(keep_msg);    keep_msg = NULL;    if (hl)      keep_msg_attr = hl_attr(HLF_W); @@ -2715,7 +2715,7 @@ do_dialog (      break;    } -  free(hotkeys); +  xfree(hotkeys);    State = oldState;    setmouse(); @@ -2816,7 +2816,7 @@ static char_u * console_dialog_alloc(const char_u *message,    // Now allocate space for the strings -  free(confirm_msg); +  xfree(confirm_msg);    confirm_msg = xmalloc(len);    *confirm_msg = NUL; diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c index e58ec71e77..d8b84293c3 100644 --- a/src/nvim/misc1.c +++ b/src/nvim/misc1.c @@ -929,16 +929,16 @@ open_line (      curwin->w_cursor.col = 0;      curwin->w_cursor.coladd = 0;      ins_bytes(p_extra);         /* will call changed_bytes() */ -    free(p_extra); +    xfree(p_extra);      next_line = NULL;    }    retval = TRUE;                /* success! */  theend:    curbuf->b_p_pi = saved_pi; -  free(saved_line); -  free(next_line); -  free(allocated); +  xfree(saved_line); +  xfree(next_line); +  xfree(allocated);    return retval;  } @@ -2432,7 +2432,7 @@ int get_keystroke(void)  #endif      break;    } -  free(buf); +  xfree(buf);    mapped_ctrl_c = save_mapped_ctrl_c;    return n; @@ -2784,7 +2784,7 @@ get_cmd_output (    call_shell(command, kShellOptDoOut | kShellOptExpand | flags, NULL);    --no_check_timestamps; -  free(command); +  xfree(command);    /*     * read the names from the file into memory @@ -2806,7 +2806,7 @@ get_cmd_output (    os_remove((char *)tempname);    if (i != len) {      EMSG2(_(e_notread), tempname); -    free(buffer); +    xfree(buffer);      buffer = NULL;    } else if (ret_len == NULL) {      /* Change NUL into SOH, otherwise the string is truncated. */ @@ -2820,7 +2820,7 @@ get_cmd_output (    }  done: -  free(tempname); +  xfree(tempname);    return buffer;  } @@ -2833,8 +2833,8 @@ void FreeWild(int count, char_u **files)    if (count <= 0 || files == NULL)      return;    while (count--) -    free(files[count]); -  free(files); +    xfree(files[count]); +  xfree(files);  }  /* diff --git a/src/nvim/misc2.c b/src/nvim/misc2.c index 79b42cabf0..7a584d4ea1 100644 --- a/src/nvim/misc2.c +++ b/src/nvim/misc2.c @@ -329,10 +329,10 @@ int call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg)            : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""            : p_sxq);        retval = os_call_shell(ncmd, opts, extra_shell_arg); -      free(ncmd); +      xfree(ncmd);        if (ecmd != cmd) -        free(ecmd); +        xfree(ecmd);      }    } @@ -387,7 +387,7 @@ int vim_chdir(char_u *new_dir)    if (dir_name == NULL)      return -1;    r = os_chdir((char *)dir_name); -  free(dir_name); +  xfree(dir_name);    return r;  } @@ -453,7 +453,7 @@ char *read_string(FILE *fd, size_t cnt)    for (size_t i = 0; i < cnt; i++) {      int c = getc(fd);      if (c == EOF) { -      free(str); +      xfree(str);        return NULL;      }      str[i] = (uint8_t)c; diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index 34879e425e..fc0409e137 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -478,9 +478,9 @@ static void on_request_event(Event event)                                              result,                                              &out_buffer));    // All arguments were freed already, but we still need to free the array -  free(args.items); +  xfree(args.items);    decref(channel); -  free(e); +  xfree(e);  }  static bool channel_write(Channel *channel, WBuffer *buffer) @@ -601,7 +601,7 @@ static void unsubscribe(Channel *channel, char *event)    // Since the string is no longer used by other channels, release it's memory    pmap_del(cstr_t)(event_strings, event_string); -  free(event_string); +  xfree(event_string);  }  /// Close the channel streams/job and free the channel resources. @@ -655,13 +655,13 @@ static void free_channel(Channel *channel)    pmap_free(cstr_t)(channel->subscribed_events);    kv_destroy(channel->call_stack);    kv_destroy(channel->delayed_notifications); -  free(channel); +  xfree(channel);  }  static void close_cb(uv_handle_t *handle)  { -  free(handle->data); -  free(handle); +  xfree(handle->data); +  xfree(handle);  }  static Channel *register_channel(void) @@ -738,7 +738,7 @@ static WBuffer *serialize_request(uint64_t channel_id,    WBuffer *rv = wstream_new_buffer(xmemdup(sbuffer->data, sbuffer->size),                                     sbuffer->size,                                     refcount, -                                   free); +                                   xfree);    msgpack_sbuffer_clear(sbuffer);    api_free_array(args);    return rv; @@ -757,7 +757,7 @@ static WBuffer *serialize_response(uint64_t channel_id,    WBuffer *rv = wstream_new_buffer(xmemdup(sbuffer->data, sbuffer->size),                                     sbuffer->size,                                     1,  // responses only go though 1 channel -                                   free); +                                   xfree);    msgpack_sbuffer_clear(sbuffer);    api_free_object(arg);    return rv; diff --git a/src/nvim/msgpack_rpc/remote_ui.c b/src/nvim/msgpack_rpc/remote_ui.c index b554d76bed..07d78dd9d7 100644 --- a/src/nvim/msgpack_rpc/remote_ui.c +++ b/src/nvim/msgpack_rpc/remote_ui.c @@ -48,9 +48,9 @@ void remote_ui_disconnect(uint64_t channel_id)    // destroy pending screen updates    api_free_array(data->buffer);    pmap_del(uint64_t)(connected_uis, channel_id); -  free(ui->data); +  xfree(ui->data);    ui_detach(ui); -  free(ui); +  xfree(ui);  }  static Object remote_ui_attach(uint64_t channel_id, uint64_t request_id, diff --git a/src/nvim/msgpack_rpc/server.c b/src/nvim/msgpack_rpc/server.c index 91aca0c37a..c03531ca0c 100644 --- a/src/nvim/msgpack_rpc/server.c +++ b/src/nvim/msgpack_rpc/server.c @@ -57,7 +57,7 @@ bool server_init(void)    if (!os_getenv(LISTEN_ADDRESS_ENV_VAR)) {      char *listen_address = (char *)vim_tempname();      os_setenv(LISTEN_ADDRESS_ENV_VAR, listen_address, 1); -    free(listen_address); +    xfree(listen_address);    }    return server_start((char *)os_getenv(LISTEN_ADDRESS_ENV_VAR)) == 0; @@ -256,10 +256,10 @@ static void connection_cb(uv_stream_t *server, int status)  static void free_client(uv_handle_t *handle)  { -  free(handle); +  xfree(handle);  }  static void free_server(uv_handle_t *handle)  { -  free(handle->data); +  xfree(handle->data);  } diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 4fcf6f9594..0dbaf52b7e 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -980,7 +980,7 @@ getcount:        /* now reset it, otherwise it's put in the history again */        keep_msg = kmsg;        msg_attr(kmsg, keep_msg_attr); -      free(kmsg); +      xfree(kmsg);      }      setcursor();      ui_flush(); @@ -1015,7 +1015,7 @@ normal_end:      clear_showcmd();    checkpcmark();                /* check if we moved since setting pcmark */ -  free(ca.searchbuf); +  xfree(ca.searchbuf);    if (has_mbyte)      mb_adjust_cursor(); @@ -1160,7 +1160,7 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank)          else {            AppendToRedobuffLit(repeat_cmdline, -1);            AppendToRedobuff(NL_STR); -          free(repeat_cmdline); +          xfree(repeat_cmdline);            repeat_cmdline = NULL;          }        } @@ -3342,7 +3342,7 @@ find_decl (      reset_search_dir();    } -  free(pat); +  xfree(pat);    p_ws = save_p_ws;    p_scs = save_p_scs; @@ -4261,7 +4261,7 @@ static void nv_ident(cmdarg_T *cap)        }        if (n == 0) {          EMSG(_(e_noident));              /* found dashes only */ -        free(buf); +        xfree(buf);          return;        } @@ -4312,11 +4312,11 @@ static void nv_ident(cmdarg_T *cap)      /* Escape the argument properly for a shell command */      ptr = vim_strnsave(ptr, n);      p = vim_strsave_shellescape(ptr, true, true); -    free(ptr); +    xfree(ptr);      newbuf = (char_u *)xrealloc(buf, STRLEN(buf) + STRLEN(p) + 1);      buf = newbuf;      STRCAT(buf, p); -    free(p); +    xfree(p);    } else {      if (cmdchar == '*')        aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); @@ -4365,7 +4365,7 @@ static void nv_ident(cmdarg_T *cap)    } else      do_cmdline_cmd(buf); -  free(buf); +  xfree(buf);  }  /* @@ -4724,7 +4724,7 @@ static void nv_gotofile(cmdarg_T *cap)        check_cursor_lnum();        beginline(BL_SOL | BL_FIX);      } -    free(ptr); +    xfree(ptr);    } else      clearop(cap->oap);  } diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 6c67063739..85b1244fa3 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -668,7 +668,7 @@ int get_expr_register(void)    if (new_line == NULL)      return NUL;    if (*new_line == NUL)         /* use previous line */ -    free(new_line); +    xfree(new_line);    else      set_expr_line(new_line);    return '='; @@ -680,7 +680,7 @@ int get_expr_register(void)   */  void set_expr_line(char_u *new_line)  { -  free(expr_line); +  xfree(expr_line);    expr_line = new_line;  } @@ -709,7 +709,7 @@ char_u *get_expr_line(void)    ++nested;    rv = eval_to_string(expr_copy, NULL, TRUE);    --nested; -  free(expr_copy); +  xfree(expr_copy);    return rv;  } @@ -843,7 +843,7 @@ void put_register(int name, void *reg)    get_yank_register(name, YREG_PUT);    free_yank_all();    *y_current = *(struct yankreg *)reg; -  free(reg); +  xfree(reg);    set_clipboard(name);  } @@ -923,11 +923,11 @@ static int stuff_yank(int regname, char_u *p)  {    /* check for read-only register */    if (regname != 0 && !valid_yank_reg(regname, TRUE)) { -    free(p); +    xfree(p);      return FAIL;    }    if (regname == '_') {             /* black hole: don't do anything */ -    free(p); +    xfree(p);      return OK;    }    get_yank_register(regname, YREG_YANK); @@ -937,8 +937,8 @@ static int stuff_yank(int regname, char_u *p)      STRCPY(lp, *pp);      // TODO(philix): use xstpcpy() in stuff_yank()      STRCAT(lp, p); -    free(p); -    free(*pp); +    xfree(p); +    xfree(*pp);      *pp = lp;    } else {      free_yank_all(); @@ -992,7 +992,7 @@ do_execreg (        EMSG(_(e_nolastcmd));        return FAIL;      } -    free(new_last_cmdline);     /* don't keep the cmdline containing @: */ +    xfree(new_last_cmdline);     /* don't keep the cmdline containing @: */      new_last_cmdline = NULL;      /* Escape all control characters with a CTRL-V */      p = vim_strsave_escaped_ext( @@ -1006,13 +1006,13 @@ do_execreg (        retval = put_in_typebuf(p + 5, TRUE, TRUE, silent);      else        retval = put_in_typebuf(p, TRUE, TRUE, silent); -    free(p); +    xfree(p);    } else if (regname == '=') {      p = get_expr_line();      if (p == NULL)        return FAIL;      retval = put_in_typebuf(p, TRUE, colon, silent); -    free(p); +    xfree(p);    } else if (regname == '.') {        /* use last inserted text */      p = get_last_insert_save();      if (p == NULL) { @@ -1020,7 +1020,7 @@ do_execreg (        return FAIL;      }      retval = put_in_typebuf(p, FALSE, colon, silent); -    free(p); +    xfree(p);    } else {      get_yank_register(regname, YREG_PASTE);      if (y_current->y_array == NULL) @@ -1044,7 +1044,7 @@ do_execreg (        }        escaped = vim_strsave_escape_csi(y_current->y_array[i]);        retval = ins_typebuf(escaped, remap, 0, TRUE, silent); -      free(escaped); +      xfree(escaped);        if (retval == FAIL)          return FAIL;        if (colon && ins_typebuf((char_u *)":", remap, 0, TRUE, silent) @@ -1110,7 +1110,7 @@ put_in_typebuf (        retval = ins_typebuf(p, esc ? REMAP_NONE : REMAP_YES,            0, TRUE, silent);      if (esc) -      free(p); +      xfree(p);    }    if (colon && retval == OK)      retval = ins_typebuf((char_u *)":", REMAP_NONE, 0, TRUE, silent); @@ -1154,7 +1154,7 @@ insert_reg (        return FAIL;      stuffescaped(arg, literally);      if (allocated) -      free(arg); +      xfree(arg);    } else {                            /* name or number register */      get_yank_register(regname, YREG_PASTE);      if (y_current->y_array == NULL) @@ -1804,7 +1804,7 @@ int op_replace(oparg_T *oap, int c)          ml_append(curwin->w_cursor.lnum++, after_p, 0, FALSE);          appended_lines_mark(curwin->w_cursor.lnum, 1L);          oap->end.lnum++; -        free(after_p); +        xfree(after_p);        }      }    } else { @@ -2186,7 +2186,7 @@ void op_insert(oparg_T *oap, long count1)        curwin->w_cursor.col = oap->start.col;        check_cursor(); -      free(ins_text); +      xfree(ins_text);      }    }  } @@ -2299,7 +2299,7 @@ int op_change(oparg_T *oap)        }        check_cursor();        changed_lines(oap->start.lnum + 1, 0, oap->end.lnum + 1, 0L); -      free(ins_text); +      xfree(ins_text);      }    } @@ -2341,9 +2341,9 @@ static void free_yank(long n)      long i;      for (i = n; --i >= 0; ) { -      free(y_current->y_array[i]); +      xfree(y_current->y_array[i]);      } -    free(y_current->y_array); +    xfree(y_current->y_array);      y_current->y_array = NULL;    }  } @@ -2507,7 +2507,7 @@ int op_yank(oparg_T *oap, int deleting, int mess)      new_ptr = xmalloc(sizeof(char_u *) * (curr->y_size + y_current->y_size));      for (j = 0; j < curr->y_size; ++j)        new_ptr[j] = curr->y_array[j]; -    free(curr->y_array); +    xfree(curr->y_array);      curr->y_array = new_ptr;      if (yanktype == MLINE)      /* MLINE overrides MCHAR and MBLOCK */ @@ -2520,8 +2520,8 @@ int op_yank(oparg_T *oap, int deleting, int mess)                       + STRLEN(y_current->y_array[0]) + 1);        STRCPY(pnew, curr->y_array[--j]);        STRCAT(pnew, y_current->y_array[0]); -      free(curr->y_array[j]); -      free(y_current->y_array[0]); +      xfree(curr->y_array[j]); +      xfree(y_current->y_array[0]);        curr->y_array[j++] = pnew;        y_idx = 1;      } else @@ -2529,7 +2529,7 @@ int op_yank(oparg_T *oap, int deleting, int mess)      while (y_idx < y_current->y_size)        curr->y_array[j++] = y_current->y_array[y_idx++];      curr->y_size = j; -    free(y_current->y_array); +    xfree(y_current->y_array);      y_current = curr;    }    if (curwin->w_p_rnu) { @@ -2735,7 +2735,7 @@ do_put (          goto end;        ptr = vim_strsave(get_cursor_pos_ptr());        ml_append(curwin->w_cursor.lnum, ptr, (colnr_T)0, FALSE); -      free(ptr); +      xfree(ptr);        ptr = vim_strnsave(get_cursor_line_ptr(), curwin->w_cursor.col);        ml_replace(curwin->w_cursor.lnum, ptr, FALSE); @@ -3049,7 +3049,7 @@ do_put (            STRCAT(newp, ptr);            /* insert second line */            ml_append(lnum, newp, (colnr_T)0, FALSE); -          free(newp); +          xfree(newp);            oldp = ml_get(lnum);            newp = (char_u *) xmalloc((size_t)(col + yanklen + 1)); @@ -3154,9 +3154,9 @@ error:  end:    if (allocated) -    free(insert_string); +    xfree(insert_string);    if (regname == '=') -    free(y_array); +    xfree(y_array);    VIsual_active = FALSE; @@ -3618,9 +3618,9 @@ int do_join(long count,    curwin->w_set_curswant = TRUE;  theend: -  free(spaces); +  xfree(spaces);    if (remove_comments) -    free(comments); +    xfree(comments);    return ret;  } @@ -3681,7 +3681,7 @@ static int same_leader(linenr_T lnum, int leader1_len, char_u *leader1_flags, in        while (vim_iswhite(line1[idx1]))          ++idx1;    } -  free(line1); +  xfree(line1);    return idx2 == leader2_len && idx1 == leader1_len;  } @@ -4479,7 +4479,7 @@ int do_addsub(int command, linenr_T Prenum1)      *ptr = NUL;      STRCAT(buf1, buf2);      ins_str(buf1);              /* insert the new number */ -    free(buf1); +    xfree(buf1);    }    --curwin->w_cursor.col;    curwin->w_set_curswant = TRUE; @@ -4556,7 +4556,7 @@ int read_viminfo_register(vir_T *virp, int force)    if (do_it) {      if (size == 0) { -      free(array); +      xfree(array);      } else if (size < limit) {        y_current->y_array = xrealloc(array, size * sizeof(char_u *));      } else { @@ -5018,7 +5018,7 @@ static void str_to_reg(struct yankreg *y_ptr, int yank_type, const char_u *str,        ssize_t s_len = extra + line_len;        if (append) { -        free(pp[lnum]); +        xfree(pp[lnum]);          append = false;  // only first line is appended        }        pp[lnum] = s; @@ -5430,7 +5430,7 @@ static bool get_clipboard(int name, struct yankreg** target, bool quiet)      // a known-to-be charwise yank might have a final linebreak      // but otherwise there is no line after the final newline      if (reg->y_type != MCHAR) { -      free(reg->y_array[reg->y_size-1]); +      xfree(reg->y_array[reg->y_size-1]);        reg->y_size--;        if (reg->y_type == MAUTO) {          reg->y_type = MLINE; @@ -5459,9 +5459,9 @@ static bool get_clipboard(int name, struct yankreg** target, bool quiet)  err:    if (reg->y_array) {      for (int i = 0; i < reg->y_size; i++) { -      free(reg->y_array[i]); +      xfree(reg->y_array[i]);      } -    free(reg->y_array); +    xfree(reg->y_array);    }    reg->y_array = NULL;    reg->y_size = 0; diff --git a/src/nvim/option.c b/src/nvim/option.c index 7e5410ff63..23a23a0814 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -1827,11 +1827,11 @@ void set_init_1(void)          ga.ga_len += len;        }        if (mustfree) -        free(p); +        xfree(p);      }      if (ga.ga_data != NULL) {        set_string_default("bsk", ga.ga_data); -      free(ga.ga_data); +      xfree(ga.ga_data);      }    } @@ -1885,10 +1885,10 @@ void set_init_1(void)            options[opt_idx].def_val[VI_DEFAULT] = buf;            options[opt_idx].flags |= P_DEF_ALLOCED;          } else -          free(buf);           /* cannot happen */ +          xfree(buf);           /* cannot happen */        }        if (mustfree) -        free(cdpath); +        xfree(cdpath);      }    } @@ -1958,7 +1958,7 @@ void set_init_1(void)         * split P_DEF_ALLOCED in two.         */        if (options[opt_idx].flags & P_DEF_ALLOCED) -        free(options[opt_idx].def_val[VI_DEFAULT]); +        xfree(options[opt_idx].def_val[VI_DEFAULT]);        options[opt_idx].def_val[VI_DEFAULT] = p;        options[opt_idx].flags |= P_DEF_ALLOCED;      } @@ -1998,7 +1998,7 @@ void set_init_1(void)         * for practical purposes, thus use that.  It's not an alias to         * still support conversion between gb18030 and utf-8. */        p_enc = vim_strsave((char_u *)"cp936"); -      free(p); +      xfree(p);      }      if (mb_init() == NULL) {        opt_idx = findoption((char_u *)"encoding"); @@ -2028,7 +2028,7 @@ void set_init_1(void)  #endif      } else { -      free(p_enc); +      xfree(p_enc);        // mb_init() failed; fallback to utf8 and try again.        p_enc = save_enc;        mb_init(); @@ -2136,7 +2136,7 @@ void set_string_default(const char *name, const char_u *val)    int opt_idx = findoption((char_u *)name);    if (opt_idx >= 0) {      if (options[opt_idx].flags & P_DEF_ALLOCED) { -      free(options[opt_idx].def_val[VI_DEFAULT]); +      xfree(options[opt_idx].def_val[VI_DEFAULT]);      }      options[opt_idx].def_val[VI_DEFAULT] = (char_u *) xstrdup((char *) val); @@ -2276,7 +2276,7 @@ void set_init_3(void)          options[idx_srr].def_val[VI_DEFAULT] = p_srr;        }      } -    free(p); +    xfree(p);    }  #endif @@ -2782,7 +2782,7 @@ do_set (                        (char_u *)"indent,eol,start");                    break;                  } -                free(oldval); +                xfree(oldval);                  oldval = *(char_u **)varp;                }                /* @@ -2879,7 +2879,7 @@ do_set (                    || (flags & P_COMMA)) {                  s = option_expand(opt_idx, newval);                  if (s != NULL) { -                  free(newval); +                  xfree(newval);                    newlen = (unsigned)STRLEN(s) + 1;                    if (adding || prepending || removing)                      newlen += (unsigned)STRLEN(origval) + 1; @@ -3373,13 +3373,13 @@ void check_buf_options(buf_T *buf)  void free_string_option(char_u *p)  {    if (p != empty_option) -    free(p); +    xfree(p);  }  void clear_string_option(char_u **pp)  {    if (*pp != empty_option) -    free(*pp); +    xfree(*pp);    *pp = empty_option;  } @@ -3768,7 +3768,7 @@ did_set_string_option (      if (errmsg == NULL) {        /* canonize the value, so that STRCMP() can be used on it */        p = enc_canonize(*varp); -      free(*varp); +      xfree(*varp);        *varp = p;        if (varp == &p_enc) {          errmsg = mb_init(); @@ -3795,7 +3795,7 @@ did_set_string_option (    } else if (varp == &p_penc) {      /* Canonize printencoding if VIM standard one */      p = enc_canonize(p_penc); -    free(p_penc); +    xfree(p_penc);      p_penc = p;    } else if (varp == &curbuf->b_p_keymap) {      /* load or unload key mapping tables */ @@ -4456,7 +4456,7 @@ skip:        return e_invarg;        /* illegal trailing comma as in "set cc=80," */    } -  free(wp->w_p_cc_cols); +  xfree(wp->w_p_cc_cols);    if (count == 0)      wp->w_p_cc_cols = NULL;    else { @@ -4649,7 +4649,7 @@ static char_u *compile_cap_prog(synblock_T *synblock)      /* Prepend a ^ so that we only match at one column */      re = concat_str((char_u *)"^", synblock->b_p_spc);      synblock->b_cap_prog = vim_regcomp(re, RE_MAGIC); -    free(re); +    xfree(re);      if (synblock->b_cap_prog == NULL) {        synblock->b_cap_prog = rp;         /* restore the previous program */        return e_invarg; @@ -5930,7 +5930,7 @@ showoptions (        os_breakcheck();      }    } -  free(items); +  xfree(items);  }  /* @@ -6157,10 +6157,10 @@ static int put_setstring(FILE *fd, char *cmd, char *name, char_u **valuep, int e        buf = xmalloc(MAXPATHL);        home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);        if (put_escstr(fd, buf, 2) == FAIL) { -        free(buf); +        xfree(buf);          return FAIL;        } -      free(buf); +      xfree(buf);      } else if (put_escstr(fd, *valuep, 2) == FAIL)        return FAIL;    } @@ -7438,10 +7438,10 @@ void vimrc_found(char_u *fname, char_u *envname)        p = FullName_save(fname, FALSE);        if (p != NULL) {          vim_setenv(envname, p); -        free(p); +        xfree(p);        }      } else if (dofree) -      free(p); +      xfree(p);    }  } @@ -7608,7 +7608,7 @@ void save_file_ff(buf_T *buf)    /* Only use free/alloc when necessary, they take time. */    if (buf->b_start_fenc == NULL        || STRCMP(buf->b_start_fenc, buf->b_p_fenc) != 0) { -    free(buf->b_start_fenc); +    xfree(buf->b_start_fenc);      buf->b_start_fenc = vim_strsave(buf->b_p_fenc);    }  } diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c index fd6237c5b0..37158f4d3c 100644 --- a/src/nvim/os/env.c +++ b/src/nvim/os/env.c @@ -113,7 +113,7 @@ void init_homedir(void)    char_u  *var;    /* In case we are called a second time (when 'encoding' changes). */ -  free(homedir); +  xfree(homedir);    homedir = NULL;    var = (char_u *)os_getenv("HOME"); @@ -144,7 +144,7 @@ void init_homedir(void)  void free_homedir(void)  { -  free(homedir); +  xfree(homedir);  }  #endif @@ -304,7 +304,7 @@ void expand_env_esc(char_u *srcp, char_u *dst, int dstlen, bool esc, bool one,          char_u  *p = vim_strsave(var);          if (mustfree) { -          free(var); +          xfree(var);          }          var = p;          mustfree = true; @@ -318,7 +318,7 @@ void expand_env_esc(char_u *srcp, char_u *dst, int dstlen, bool esc, bool one,          char_u  *p = vim_strsave_escaped(var, (char_u *)" \t");          if (mustfree) -          free(var); +          xfree(var);          var = p;          mustfree = true;        } @@ -341,7 +341,7 @@ void expand_env_esc(char_u *srcp, char_u *dst, int dstlen, bool esc, bool one,          copy_char = false;        }        if (mustfree) -        free(var); +        xfree(var);      }      if (copy_char) {        /* copy at least one char */ @@ -380,11 +380,11 @@ static char *vim_version_dir(char *vimdir)    p = concat_fnames((char_u *)vimdir, (char_u *)VIM_VERSION_NODOT, true);    if (os_isdir(p))      return (char *)p; -  free(p); +  xfree(p);    p = concat_fnames((char_u *)vimdir, (char_u *)RUNTIME_DIRNAME, true);    if (os_isdir(p))      return (char *)p; -  free(p); +  xfree(p);    return NULL;  } @@ -483,7 +483,7 @@ char_u *vim_getenv(char_u *name, bool *mustfree)        p = vim_strnsave(p, (size_t)(pend - p));        if (!os_isdir(p)) { -        free(p); +        xfree(p);          p = NULL;        } else {          *mustfree = true; @@ -634,7 +634,7 @@ void home_replace(buf_T *buf, char_u *src, char_u *dst, int dstlen, bool one)    *dst = NUL;    if (homedir_env != homedir_env_orig) -    free(homedir_env); +    xfree(homedir_env);  }  /// Like home_replace, store the replaced string in allocated memory. @@ -663,7 +663,7 @@ void vim_setenv(char_u *name, char_u *val)    if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0) {      char_u  *buf = concat_str(val, (char_u *)"/lang");      bindtextdomain(VIMPACKAGE, (char *)buf); -    free(buf); +    xfree(buf);    }  } @@ -678,7 +678,7 @@ char_u *get_env_name(expand_T *xp, int idx)    char *envname = os_getenvname_at_index((size_t)idx);    if (envname) {      STRLCPY(name, envname, ENVNAMELEN); -    free(envname); +    xfree(envname);      return name;    } else {      return NULL; diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c index d583323b1f..2a41001cde 100644 --- a/src/nvim/os/fs.c +++ b/src/nvim/os/fs.c @@ -152,14 +152,14 @@ static bool is_executable_in_path(const char_u *name, char_u **abspath)          *abspath = save_absolute_path(buf);        } -      free(buf); +      xfree(buf);        return true;      }      if (*e != ':') {        // End of $PATH without finding any executable called name. -      free(buf); +      xfree(buf);        return false;      } diff --git a/src/nvim/os/job_private.h b/src/nvim/os/job_private.h index af13d2e636..983106d918 100644 --- a/src/nvim/os/job_private.h +++ b/src/nvim/os/job_private.h @@ -11,6 +11,7 @@  #include "nvim/os/pty_process.h"  #include "nvim/os/shell.h"  #include "nvim/log.h" +#include "nvim/memory.h"  struct job {    // Job id the index in the job table plus one. @@ -104,12 +105,12 @@ static inline void job_decref(Job *job)      // Invoke the exit_cb      job_exit_callback(job);      // Free all memory allocated for the job -    free(job->proc_stdin->data); -    free(job->proc_stdout->data); -    free(job->proc_stderr->data); +    xfree(job->proc_stdin->data); +    xfree(job->proc_stdout->data); +    xfree(job->proc_stderr->data);      shell_free_argv(job->opts.argv);      process_destroy(job); -    free(job); +    xfree(job);    }  } diff --git a/src/nvim/os/pipe_process.c b/src/nvim/os/pipe_process.c index 5535c3fe93..2ac305e967 100644 --- a/src/nvim/os/pipe_process.c +++ b/src/nvim/os/pipe_process.c @@ -72,8 +72,8 @@ void pipe_process_init(Job *job)  void pipe_process_destroy(Job *job)  {    UvProcess *pipeproc = job->process; -  free(pipeproc->proc.data); -  free(pipeproc); +  xfree(pipeproc->proc.data); +  xfree(pipeproc);    job->process = NULL;  } diff --git a/src/nvim/os/pty_process.c b/src/nvim/os/pty_process.c index 9a2721f769..c64f3f9932 100644 --- a/src/nvim/os/pty_process.c +++ b/src/nvim/os/pty_process.c @@ -65,8 +65,8 @@ void pty_process_init(Job *job) FUNC_ATTR_NONNULL_ALL  void pty_process_destroy(Job *job) FUNC_ATTR_NONNULL_ALL  { -  free(job->opts.term_name); -  free(job->process); +  xfree(job->opts.term_name); +  xfree(job->process);    job->process = NULL;  } diff --git a/src/nvim/os/rstream.c b/src/nvim/os/rstream.c index 29b8a5a9e1..702f282d53 100644 --- a/src/nvim/os/rstream.c +++ b/src/nvim/os/rstream.c @@ -162,8 +162,8 @@ size_t rbuffer_available(RBuffer *rbuffer)  void rbuffer_free(RBuffer *rbuffer)  { -  free(rbuffer->data); -  free(rbuffer); +  xfree(rbuffer->data); +  xfree(rbuffer);  }  /// Creates a new RStream instance. A RStream encapsulates all the boilerplate @@ -216,7 +216,7 @@ void rstream_free(RStream *rstream)    }    rbuffer_free(rstream->buffer); -  free(rstream); +  xfree(rstream);  }  /// Sets the underlying `uv_stream_t` instance @@ -401,8 +401,8 @@ static void fread_idle_cb(uv_idle_t *handle)  static void close_cb(uv_handle_t *handle)  { -  free(handle->data); -  free(handle); +  xfree(handle->data); +  xfree(handle);  }  static void rbuffer_relocate(RBuffer *rbuffer) diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c index 6fcb62a5f3..4f5928ba8a 100644 --- a/src/nvim/os/shell.c +++ b/src/nvim/os/shell.c @@ -80,11 +80,11 @@ void shell_free_argv(char **argv)    while (*p != NULL) {      // Free each argument -    free(*p); +    xfree(*p);      p++;    } -  free(argv); +  xfree(argv);  }  /// Calls the user-configured 'shell' (p_sh) for running a command or wildcard @@ -128,11 +128,11 @@ int os_call_shell(char_u *cmd, ShellOpts opts, char_u *extra_args)                       emsg_silent,                       forward_output); -  free(input.data); +  xfree(input.data);    if (output) {      (void)write_output(output, nread, true, true); -    free(output); +    xfree(output);    }    if (!emsg_silent && status != 0 && !(opts & kShellOptSilent)) { @@ -250,7 +250,7 @@ static int shell(const char *cmd,      if (buf.len == 0) {        // no data received from the process, return NULL        *output = NULL; -      free(buf.data); +      xfree(buf.data);      } else {        // NUL-terminate to make the output directly usable as a C string        buf.data[buf.len] = NUL; diff --git a/src/nvim/os/wstream.c b/src/nvim/os/wstream.c index ad9d936625..73896c381d 100644 --- a/src/nvim/os/wstream.c +++ b/src/nvim/os/wstream.c @@ -76,7 +76,7 @@ void wstream_free(WStream *wstream) {        uv_close((uv_handle_t *)wstream->stream, close_cb);      } else {        handle_set_wstream((uv_handle_t *)wstream->stream, NULL); -      free(wstream); +      xfree(wstream);      }    } else {      wstream->freed = true; @@ -157,7 +157,7 @@ bool wstream_write(WStream *wstream, WBuffer *buffer)    uvbuf.len = buffer->size;    if (uv_write(&data->uv_req, wstream->stream, &uvbuf, 1, write_cb)) { -    free(data); +    xfree(data);      goto err;    } @@ -216,11 +216,11 @@ static void write_cb(uv_write_t *req, int status)      if (data->wstream->free_handle) {        uv_close((uv_handle_t *)data->wstream->stream, close_cb);      } else { -      free(data->wstream); +      xfree(data->wstream);      }    } -  free(data); +  xfree(data);  }  void wstream_release_wbuffer(WBuffer *buffer) @@ -230,14 +230,14 @@ void wstream_release_wbuffer(WBuffer *buffer)        buffer->cb(buffer->data);      } -    free(buffer); +    xfree(buffer);    }  }  static void close_cb(uv_handle_t *handle)  { -  free(handle_get_wstream(handle)); -  free(handle->data); -  free(handle); +  xfree(handle_get_wstream(handle)); +  xfree(handle->data); +  xfree(handle);  } diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c index 26a4cdb083..e69b5ccc27 100644 --- a/src/nvim/os_unix.c +++ b/src/nvim/os_unix.c @@ -435,11 +435,11 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,    if (ampersent)      os_delay(10L, true); -  free(command); +  xfree(command);    if (i) {                         /* os_call_shell() failed */      os_remove((char *)tempname); -    free(tempname); +    xfree(tempname);      /*       * With interactive completion, the error message is not printed.       */ @@ -472,18 +472,18 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,        MSG(_(e_wildexpand));        msg_start();                      /* don't overwrite this message */      } -    free(tempname); +    xfree(tempname);      goto notfound;    }    int fseek_res = fseek(fd, 0L, SEEK_END);    if (fseek_res < 0) { -    free(tempname); +    xfree(tempname);      fclose(fd);      return FAIL;    }    long long templen = ftell(fd);        /* get size of temp file */    if (templen < 0) { -    free(tempname); +    xfree(tempname);      fclose(fd);      return FAIL;    } @@ -501,11 +501,11 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,    if (readlen != len) {      /* unexpected read error */      EMSG2(_(e_notread), tempname); -    free(tempname); -    free(buffer); +    xfree(tempname); +    xfree(buffer);      return FAIL;    } -  free(tempname); +  xfree(tempname);    /* file names are separated with Space */    if (shell_style == STYLE_ECHO) { @@ -574,7 +574,7 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,       * /bin/sh will happily expand it to nothing rather than returning an       * error; and hey, it's good to check anyway -- webb.       */ -    free(buffer); +    xfree(buffer);      goto notfound;    }    *num_file = i; @@ -628,11 +628,11 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,        add_pathsep(p);             /* add '/' to a directory name */      (*file)[j++] = p;    } -  free(buffer); +  xfree(buffer);    *num_file = j;    if (*num_file == 0) {     /* rejected all entries */ -    free(*file); +    xfree(*file);      *file = NULL;      goto notfound;    } diff --git a/src/nvim/path.c b/src/nvim/path.c index 80f1947ccf..36d550b764 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -380,7 +380,7 @@ FullName_save (    } else {      new_fname = vim_strsave(fname);    } -  free(buf); +  xfree(buf);    return new_fname;  } @@ -557,7 +557,7 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,    starts_with_dot = (*s == '.');    pat = file_pat_to_reg_pat(s, e, NULL, FALSE);    if (pat == NULL) { -    free(buf); +    xfree(buf);      return 0;    } @@ -574,10 +574,10 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,    regmatch.regprog = vim_regcomp(pat, RE_MAGIC);    if (flags & (EW_NOERROR | EW_NOTWILD))      --emsg_silent; -  free(pat); +  xfree(pat);    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0) { -    free(buf); +    xfree(buf);      return 0;    } @@ -634,7 +634,7 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,      os_closedir(&dir);    } -  free(buf); +  xfree(buf);    vim_regfree(regmatch.regprog);    matches = gap->ga_len - start_len; @@ -750,7 +750,7 @@ static void expand_path_option(char_u *curdir, garray_T *gap)      GA_APPEND(char_u *, gap, vim_strsave(buf));    } -  free(buf); +  xfree(buf);  }  /* @@ -819,13 +819,13 @@ static void uniquefy_paths(garray_T *gap, char_u *pattern)    file_pattern[1] = NUL;    STRCAT(file_pattern, pattern);    pat = file_pat_to_reg_pat(file_pattern, NULL, NULL, TRUE); -  free(file_pattern); +  xfree(file_pattern);    if (pat == NULL)      return;    regmatch.rm_ic = TRUE;                /* always ignore case */    regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING); -  free(pat); +  xfree(pat);    if (regmatch.regprog == NULL)      return; @@ -910,16 +910,16 @@ static void uniquefy_paths(garray_T *gap, char_u *pattern)      add_pathsep(rel_path);      STRCAT(rel_path, short_name); -    free(fnames[i]); +    xfree(fnames[i]);      fnames[i] = rel_path;      sort_again = TRUE;      os_breakcheck();    } -  free(curdir); +  xfree(curdir);    for (int i = 0; i < gap->ga_len; i++) -    free(in_curdir[i]); -  free(in_curdir); +    xfree(in_curdir[i]); +  xfree(in_curdir);    ga_clear_strings(&path_ga);    vim_regfree(regmatch.regprog); @@ -978,7 +978,7 @@ expand_in_path (    ga_init(&path_ga, (int)sizeof(char_u *), 1);    expand_path_option(curdir, &path_ga); -  free(curdir); +  xfree(curdir);    if (GA_EMPTY(&path_ga))      return 0; @@ -986,7 +986,7 @@ expand_in_path (    ga_clear_strings(&path_ga);    globpath(paths, pattern, gap, (flags & EW_ICASE) ? WILD_ICASE : 0); -  free(paths); +  xfree(paths);    return gap->ga_len;  } @@ -1110,7 +1110,7 @@ int gen_expand_wildcards(int num_pat, char_u **pat, int *num_file,           * found file names and start all over again.           */          else if (has_env_var(p) || *p == '~') { -          free(p); +          xfree(p);            ga_clear_strings(&ga);            i = mch_expand_wildcards(num_pat, pat, num_file, file,                flags | EW_KEEPDOLLAR); @@ -1154,13 +1154,13 @@ int gen_expand_wildcards(int num_pat, char_u **pat, int *num_file,          addfile(&ga, t, flags | EW_DIR | EW_FILE);        else if (os_file_exists(t))          addfile(&ga, t, flags); -      free(t); +      xfree(t);      }      if (did_expand_in_path && !GA_EMPTY(&ga) && (flags & EW_PATH))        uniquefy_paths(&ga, p);      if (p != pat[i]) -      free(p); +      xfree(p);    }    *num_file = ga.ga_len; @@ -1206,7 +1206,7 @@ expand_backtick (    else      buffer = get_cmd_output(cmd, NULL,          (flags & EW_SILENT) ? kShellOptSilent : 0, NULL); -  free(cmd); +  xfree(cmd);    if (buffer == NULL)      return 0; @@ -1229,7 +1229,7 @@ expand_backtick (        ++cmd;    } -  free(buffer); +  xfree(buffer);    return cnt;  } @@ -1509,13 +1509,13 @@ find_file_name_in_path (      /* Repeat finding the file "count" times.  This matters when it       * appears several times in the path. */      while (file_name != NULL && --count > 0) { -      free(file_name); +      xfree(file_name);        file_name = find_file_in_path(ptr, len, options, FALSE, rel_fname);      }    } else      file_name = vim_strnsave(ptr, len); -  free(tofree); +  xfree(tofree);    return file_name;  } @@ -1793,7 +1793,7 @@ char_u *path_shorten_fname_if_possible(char_u *full_path)        p = full_path;      }    } -  free(dirname); +  xfree(dirname);    return p;  } @@ -1854,8 +1854,8 @@ int expand_wildcards_eval(char_u **pat, int *num_file, char_u ***file,      ret = expand_wildcards(1, &exp_pat, num_file, file, flags);    if (eval_pat != NULL) { -    free(exp_pat); -    free(eval_pat); +    xfree(exp_pat); +    xfree(eval_pat);    }    return ret; @@ -1903,13 +1903,13 @@ int expand_wildcards(int num_pat, char_u **pat, int *num_file, char_u ***file,          break;        if (match_file_list(p_wig, (*file)[i], ffname)) {          /* remove this matching file from the list */ -        free((*file)[i]); +        xfree((*file)[i]);          for (j = i; j + 1 < *num_file; ++j)            (*file)[j] = (*file)[j + 1];          --*num_file;          --i;        } -      free(ffname); +      xfree(ffname);      }    } diff --git a/src/nvim/popupmnu.c b/src/nvim/popupmnu.c index 7ef962fa2f..10012a9775 100644 --- a/src/nvim/popupmnu.c +++ b/src/nvim/popupmnu.c @@ -18,6 +18,7 @@  #include "nvim/screen.h"  #include "nvim/search.h"  #include "nvim/strings.h" +#include "nvim/memory.h"  #include "nvim/window.h"  #include "nvim/edit.h" @@ -377,12 +378,12 @@ void pum_redraw(void)                  }                }                screen_puts_len(rt, (int)STRLEN(rt), row, col - size + 1, attr); -              free(rt_start); -              free(st); +              xfree(rt_start); +              xfree(st);                col -= width;              } else {                screen_puts_len(st, (int)STRLEN(st), row, col, attr); -              free(st); +              xfree(st);                col += width;              } diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index 8e55cced78..7e83132a25 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -784,15 +784,15 @@ qf_init_ok:    for (fmt_ptr = fmt_first; fmt_ptr != NULL; fmt_ptr = fmt_first) {      fmt_first = fmt_ptr->next;      vim_regfree(fmt_ptr->prog); -    free(fmt_ptr); +    xfree(fmt_ptr);    }    qf_clean_dir_stack(&dir_stack);    qf_clean_dir_stack(&file_stack);  qf_init_end: -  free(namebuf); -  free(errmsg); -  free(pattern); -  free(fmtstr); +  xfree(namebuf); +  xfree(errmsg); +  xfree(pattern); +  xfree(fmtstr);    qf_update_buffer(qi); @@ -855,7 +855,7 @@ static void ll_free_all(qf_info_T **pqi)      /* No references to this location list */      for (i = 0; i < qi->qf_listcount; ++i)        qf_free(qi, i); -    free(qi); +    xfree(qi);    }  } @@ -1091,7 +1091,7 @@ static int qf_get_fnum(char_u *directory, char_u *fname)         * directory change.         */        if (!os_file_exists(ptr)) { -        free(ptr); +        xfree(ptr);          directory = qf_guess_filepath(fname);          if (directory)            ptr = concat_fnames(directory, fname, TRUE); @@ -1100,7 +1100,7 @@ static int qf_get_fnum(char_u *directory, char_u *fname)        }        /* Use concatenated directory name and file name */        fnum = buflist_add(ptr, 0); -      free(ptr); +      xfree(ptr);        return fnum;      }      return buflist_add(fname, 0); @@ -1134,7 +1134,7 @@ static char_u *qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr)      ds_new = (*stackptr)->next;      (*stackptr)->dirname = NULL;      while (ds_new) { -      free((*stackptr)->dirname); +      xfree((*stackptr)->dirname);        (*stackptr)->dirname = concat_fnames(ds_new->dirname, dirbuf,            TRUE);        if (os_isdir((*stackptr)->dirname)) @@ -1147,13 +1147,13 @@ static char_u *qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr)      while ((*stackptr)->next != ds_new) {        ds_ptr = (*stackptr)->next;        (*stackptr)->next = (*stackptr)->next->next; -      free(ds_ptr->dirname); -      free(ds_ptr); +      xfree(ds_ptr->dirname); +      xfree(ds_ptr);      }      /* Nothing found -> it must be on top level */      if (ds_new == NULL) { -      free((*stackptr)->dirname); +      xfree((*stackptr)->dirname);        (*stackptr)->dirname = vim_strsave(dirbuf);      }    } @@ -1163,7 +1163,7 @@ static char_u *qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr)    else {      ds_ptr = *stackptr;      *stackptr = (*stackptr)->next; -    free(ds_ptr); +    xfree(ds_ptr);      return NULL;    }  } @@ -1184,8 +1184,8 @@ static char_u *qf_pop_dir(struct dir_stack_T **stackptr)    if (*stackptr != NULL) {      ds_ptr = *stackptr;      *stackptr = (*stackptr)->next; -    free(ds_ptr->dirname); -    free(ds_ptr); +    xfree(ds_ptr->dirname); +    xfree(ds_ptr);    }    /* return NEW top element as current dir or NULL if stack is empty*/ @@ -1201,8 +1201,8 @@ static void qf_clean_dir_stack(struct dir_stack_T **stackptr)    while ((ds_ptr = *stackptr) != NULL) {      *stackptr = (*stackptr)->next; -    free(ds_ptr->dirname); -    free(ds_ptr); +    xfree(ds_ptr->dirname); +    xfree(ds_ptr);    }  } @@ -1239,7 +1239,7 @@ static char_u *qf_guess_filepath(char_u *filename)    ds_ptr = dir_stack->next;    fullname = NULL;    while (ds_ptr) { -    free(fullname); +    xfree(fullname);      fullname = concat_fnames(ds_ptr->dirname, filename, TRUE);      if (os_file_exists(fullname)) @@ -1248,14 +1248,14 @@ static char_u *qf_guess_filepath(char_u *filename)      ds_ptr = ds_ptr->next;    } -  free(fullname); +  xfree(fullname);    /* clean up all dirs we already left */    while (dir_stack->next != ds_ptr) {      ds_tmp = dir_stack->next;      dir_stack->next = dir_stack->next->next; -    free(ds_tmp->dirname); -    free(ds_tmp); +    xfree(ds_tmp->dirname); +    xfree(ds_tmp);    }    return ds_ptr==NULL ? NULL : ds_ptr->dirname; @@ -1876,10 +1876,10 @@ static void qf_free(qf_info_T *qi, int idx)    while (qi->qf_lists[idx].qf_count) {      qfp = qi->qf_lists[idx].qf_start->qf_next;      if (qi->qf_lists[idx].qf_title != NULL && !stop) { -      free(qi->qf_lists[idx].qf_start->qf_text); +      xfree(qi->qf_lists[idx].qf_start->qf_text);        stop = (qi->qf_lists[idx].qf_start == qfp); -      free(qi->qf_lists[idx].qf_start->qf_pattern); -      free(qi->qf_lists[idx].qf_start); +      xfree(qi->qf_lists[idx].qf_start->qf_pattern); +      xfree(qi->qf_lists[idx].qf_start);        if (stop)          /* Somehow qf_count may have an incorrect value, set it to 1           * to avoid crashing when it's wrong. @@ -1889,7 +1889,7 @@ static void qf_free(qf_info_T *qi, int idx)      qi->qf_lists[idx].qf_start = qfp;      --qi->qf_lists[idx].qf_count;    } -  free(qi->qf_lists[idx].qf_title); +  xfree(qi->qf_lists[idx].qf_title);    qi->qf_lists[idx].qf_title = NULL;    qi->qf_lists[idx].qf_index = 0;  } @@ -2526,8 +2526,8 @@ void ex_make(exarg_T *eap)      qf_jump(qi, 0, 0, FALSE);                   /* display first error */    os_remove((char *)fname); -  free(fname); -  free(cmd); +  xfree(fname); +  xfree(cmd);  }  /* @@ -2573,7 +2573,7 @@ static char_u *get_mef_name(void)      if (!file_or_link_found) {        break;      } -    free(name); +    xfree(name);    }    return name;  } @@ -2834,7 +2834,7 @@ void ex_vimgrep(exarg_T *eap)          msg_outtrans(fname);        else {          msg_outtrans(p); -        free(p); +        xfree(p);        }        msg_clr_eos();        msg_didout = FALSE;           /* overwrite this message */ @@ -3021,9 +3021,9 @@ void ex_vimgrep(exarg_T *eap)    }  theend: -  free(dirname_now); -  free(dirname_start); -  free(target_dir); +  xfree(dirname_now); +  xfree(dirname_start); +  xfree(target_dir);    vim_regfree(regmatch.regprog);  } @@ -3091,7 +3091,7 @@ static void restore_start_dir(char_u *dirname_start)      ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;      ex_cd(&ea);    } -  free(dirname_now); +  xfree(dirname_now);  }  /* @@ -3356,10 +3356,10 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)          type == NULL ? NUL : *type,          valid); -    free(filename); -    free(pattern); -    free(text); -    free(type); +    xfree(filename); +    xfree(pattern); +    xfree(text); +    xfree(type);      if (status == FAIL) {        retval = FAIL; @@ -3599,12 +3599,12 @@ void ex_helpgrep(exarg_T *eap)                          ) == FAIL) {                    got_int = TRUE;                    if (line != IObuff) -                    free(line); +                    xfree(line);                    break;                  }                }                if (line != IObuff) -                free(line); +                xfree(line);                ++lnum;                line_breakcheck();              } diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index d5e963c2f8..a260860e17 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -1265,7 +1265,7 @@ static regprog_T *bt_regcomp(char_u *expr, int re_flags)    regcode = r->program;    regc(REGMAGIC);    if (reg(REG_NOPAREN, &flags) == NULL || reg_toolong) { -    free(r); +    xfree(r);      if (reg_toolong)        EMSG_RET_NULL(_("E339: Pattern too long"));      return NULL; @@ -1349,7 +1349,7 @@ static regprog_T *bt_regcomp(char_u *expr, int re_flags)   */  static void bt_regfree(regprog_T *prog)  { -  free(prog); +  xfree(prog);  }  /* @@ -3236,8 +3236,8 @@ void free_regexp_stuff(void)  {    ga_clear(®stack);    ga_clear(&backpos); -  free(reg_tofree); -  free(reg_prev_sub); +  xfree(reg_tofree); +  xfree(reg_prev_sub);  }  #endif @@ -3509,7 +3509,7 @@ theend:    /* Free "reg_tofree" when it's a bit big.     * Free regstack and backpos if they are bigger than their initial size. */    if (reg_tofreelen > 400) { -    free(reg_tofree); +    xfree(reg_tofree);      reg_tofree = NULL;    }    if (regstack.ga_maxlen > REGSTACK_INITIAL) @@ -3551,8 +3551,8 @@ void unref_extmatch(reg_extmatch_T *em)    if (em != NULL && --em->refcnt <= 0) {      for (i = 0; i < NSUBEXP; ++i) -      free(em->matches[i]); -    free(em); +      xfree(em->matches[i]); +    xfree(em);    }  } @@ -5642,7 +5642,7 @@ static int match_with_backref(linenr_T start_lnum, colnr_T start_col, linenr_T e        len = (int)STRLEN(regline);        if (reg_tofree == NULL || len >= (int)reg_tofreelen) {          len += 50;              /* get some extra */ -        free(reg_tofree); +        xfree(reg_tofree);          reg_tofree = xmalloc(len);          reg_tofreelen = len;        } @@ -6382,7 +6382,7 @@ char_u *regtilde(char_u *source, int magic)          STRCPY(tmpsub + len + prevlen, p + 1);          if (newsub != source)                 /* already allocated newsub */ -          free(newsub); +          xfree(newsub);          newsub = tmpsub;          p = newsub + len + prevlen;        } else if (magic) @@ -6398,7 +6398,7 @@ char_u *regtilde(char_u *source, int magic)      }    } -  free(reg_prev_sub); +  xfree(reg_prev_sub);    if (newsub != source)         /* newsub was allocated, just keep it */      reg_prev_sub = newsub;    else                          /* no ~ found, need to save newsub  */ @@ -6494,14 +6494,14 @@ static int vim_regsub_both(char_u *source, char_u *dest, int copy, int magic, in        if (eval_result != NULL) {          STRCPY(dest, eval_result);          dst += STRLEN(eval_result); -        free(eval_result); +        xfree(eval_result);          eval_result = NULL;        }      } else {        win_T       *save_reg_win;        int save_ireg_ic; -      free(eval_result); +      xfree(eval_result);        /* The expression may contain substitute(), which calls us         * recursively.  Make sure submatch() gets the text from the first @@ -6542,7 +6542,7 @@ static int vim_regsub_both(char_u *source, char_u *dest, int copy, int magic, in          if (had_backslash && backslash) {            /* Backslashes will be consumed, need to double them. */            s = vim_strsave_escaped(eval_result, (char_u *)"\\"); -          free(eval_result); +          xfree(eval_result);            eval_result = s;          } @@ -7073,7 +7073,7 @@ static int vim_regexec_both(regmatch_T *rmp, char_u *line, colnr_T col, bool nl)        result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl);      } -    free(pat); +    xfree(pat);      p_re = save_p_re;    } @@ -7127,7 +7127,7 @@ long vim_regexec_multi(                                                     tm);      } -    free(pat); +    xfree(pat);      p_re = save_p_re;    } diff --git a/src/nvim/regexp_nfa.c b/src/nvim/regexp_nfa.c index 1de167c40f..56e488fbd4 100644 --- a/src/nvim/regexp_nfa.c +++ b/src/nvim/regexp_nfa.c @@ -2886,7 +2886,7 @@ static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size)    if (stackp < stack)                 \    {                                   \      st_error(postfix, end, p);      \ -    free(stack);                    \ +    xfree(stack);                    \      return NULL;                    \    } @@ -3317,13 +3317,13 @@ static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size)    e = POP();    if (stackp != stack) { -    free(stack); +    xfree(stack);      EMSG_RET_NULL(_("E875: (NFA regexp) (While converting from postfix to NFA),"                      "too many states left on stack"));    }    if (istate >= nstate) { -    free(stack); +    xfree(stack);      EMSG_RET_NULL(_("E876: (NFA regexp) "                      "Not enough space to store the whole NFA "));    } @@ -3337,7 +3337,7 @@ static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size)    ret = e.start;  theend: -  free(stack); +  xfree(stack);    return ret;  #undef POP1 @@ -4195,7 +4195,7 @@ addstate_here (        memmove(&(newl[listidx + count]),            &(l->t[listidx + 1]),            sizeof(nfa_thread_T) * (l->n - count - listidx - 1)); -      free(l->t); +      xfree(l->t);        l->t = newl;      } else {        /* make space for new states, then move them from the @@ -6033,9 +6033,9 @@ nextchar:  theend:    /* Free memory */ -  free(list[0].t); -  free(list[1].t); -  free(listids); +  xfree(list[0].t); +  xfree(list[1].t); +  xfree(listids);  #undef ADD_STATE_IF_MATCH  #ifdef NFA_REGEXP_DEBUG_LOG    fclose(debug); @@ -6340,13 +6340,13 @@ static regprog_T *nfa_regcomp(char_u *expr, int re_flags)    nfa_regengine.expr = NULL;  out: -  free(post_start); +  xfree(post_start);    post_start = post_ptr = post_end = NULL;    state_ptr = NULL;    return (regprog_T *)prog;  fail: -  free(prog); +  xfree(prog);    prog = NULL;  #ifdef REGEXP_DEBUG    nfa_postfix_dump(expr, FAIL); @@ -6361,9 +6361,9 @@ fail:  static void nfa_regfree(regprog_T *prog)  {    if (prog != NULL) { -    free(((nfa_regprog_T *)prog)->match_text); -    free(((nfa_regprog_T *)prog)->pattern); -    free(prog); +    xfree(((nfa_regprog_T *)prog)->match_text); +    xfree(((nfa_regprog_T *)prog)->pattern); +    xfree(prog);    }  } diff --git a/src/nvim/screen.c b/src/nvim/screen.c index c32603afb0..acd8e925e0 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -1905,7 +1905,7 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T    }    if (text != buf) -    free(text); +    xfree(text);    /*     * 6. set highlighting for the Visual area an other text. @@ -3015,7 +3015,7 @@ win_line (        --n_extra;      } else {        if (p_extra_free != NULL) { -        free(p_extra_free); +        xfree(p_extra_free);          p_extra_free = NULL;        }        /* @@ -4700,7 +4700,7 @@ win_redr_status_matches (    }    win_redraw_last_status(topframe); -  free(buf); +  xfree(buf);  }  /* @@ -4915,7 +4915,7 @@ get_keymap_str (        sprintf((char *)buf, "<%s>", p);      else        buf[0] = NUL; -    free(s); +    xfree(s);    }    return buf[0] != NUL;  } @@ -5021,14 +5021,14 @@ win_redr_custom (    width = build_stl_str_hl(ewp, buf, sizeof(buf),        stl, use_sandbox,        fillchar, maxwidth, hltab, tabtab); -  free(stl); +  xfree(stl);    ewp->w_p_crb = p_crb_save;    /* Make all characters printable. */    p = transstr(buf);    len = STRLCPY(buf, p, sizeof(buf));    len = (size_t)len < sizeof(buf) ? len : (int)sizeof(buf) - 1; -  free(p); +  xfree(p);    /* fill up with "fillchar" */    while (width < maxwidth && len < (int)sizeof(buf) - 1) { @@ -5999,23 +5999,23 @@ retry:         * and over again. */        done_outofmem_msg = TRUE;      } -    free(new_ScreenLines); +    xfree(new_ScreenLines);      new_ScreenLines = NULL; -    free(new_ScreenLinesUC); +    xfree(new_ScreenLinesUC);      new_ScreenLinesUC = NULL;      for (i = 0; i < p_mco; ++i) { -      free(new_ScreenLinesC[i]); +      xfree(new_ScreenLinesC[i]);        new_ScreenLinesC[i] = NULL;      } -    free(new_ScreenLines2); +    xfree(new_ScreenLines2);      new_ScreenLines2 = NULL; -    free(new_ScreenAttrs); +    xfree(new_ScreenAttrs);      new_ScreenAttrs = NULL; -    free(new_LineOffset); +    xfree(new_LineOffset);      new_LineOffset = NULL; -    free(new_LineWraps); +    xfree(new_LineWraps);      new_LineWraps = NULL; -    free(new_TabPageIdxs); +    xfree(new_TabPageIdxs);      new_TabPageIdxs = NULL;    } else {      done_outofmem_msg = FALSE; @@ -6126,15 +6126,15 @@ void free_screenlines(void)  {    int i; -  free(ScreenLinesUC); +  xfree(ScreenLinesUC);    for (i = 0; i < Screen_mco; ++i) -    free(ScreenLinesC[i]); -  free(ScreenLines2); -  free(ScreenLines); -  free(ScreenAttrs); -  free(LineOffset); -  free(LineWraps); -  free(TabPageIdxs); +    xfree(ScreenLinesC[i]); +  xfree(ScreenLines2); +  xfree(ScreenLines); +  xfree(ScreenAttrs); +  xfree(LineOffset); +  xfree(LineWraps); +  xfree(TabPageIdxs);  }  void screenclear(void) diff --git a/src/nvim/search.c b/src/nvim/search.c index f62aeabd72..f015c233c8 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -179,7 +179,7 @@ search_regcomp (      add_to_history(HIST_SEARCH, pat, TRUE, NUL);    if (mr_pattern_alloced) { -    free(mr_pattern); +    xfree(mr_pattern);      mr_pattern_alloced = FALSE;    } @@ -249,7 +249,7 @@ char_u *reverse_text(char_u *s) FUNC_ATTR_NONNULL_RET  void save_re_pat(int idx, char_u *pat, int magic)  {    if (spats[idx].pat != pat) { -    free(spats[idx].pat); +    xfree(spats[idx].pat);      spats[idx].pat = vim_strsave(pat);      spats[idx].magic = magic;      spats[idx].no_scs = no_smartcase; @@ -284,10 +284,10 @@ void save_search_patterns(void)  void restore_search_patterns(void)  {    if (--save_level == 0) { -    free(spats[0].pat); +    xfree(spats[0].pat);      spats[0] = saved_spats[0];      set_vv_searchforward(); -    free(spats[1].pat); +    xfree(spats[1].pat);      spats[1] = saved_spats[1];      last_idx = saved_last_idx;      SET_NO_HLSEARCH(saved_no_hlsearch); @@ -297,11 +297,11 @@ void restore_search_patterns(void)  #if defined(EXITFREE)  void free_search_patterns(void)  { -  free(spats[0].pat); -  free(spats[1].pat); +  xfree(spats[0].pat); +  xfree(spats[1].pat);    if (mr_pattern_alloced) { -    free(mr_pattern); +    xfree(mr_pattern);      mr_pattern_alloced = FALSE;      mr_pattern = NULL;    } @@ -377,7 +377,7 @@ void reset_search_dir(void)   */  void set_last_search_pat(const char_u *s, int idx, int magic, int setlast)  { -  free(spats[idx].pat); +  xfree(spats[idx].pat);    /* An empty string means that nothing should be matched. */    if (*s == NUL)      spats[idx].pat = NULL; @@ -393,7 +393,7 @@ void set_last_search_pat(const char_u *s, int idx, int magic, int setlast)    if (setlast)      last_idx = idx;    if (save_level) { -    free(saved_spats[idx].pat); +    xfree(saved_spats[idx].pat);      saved_spats[idx] = spats[0];      if (spats[idx].pat == NULL)        saved_spats[idx].pat = NULL; @@ -1075,17 +1075,17 @@ int do_search(           * left, but do reverse the text. */          if (curwin->w_p_rl && *curwin->w_p_rlc == 's') {            char_u *r = reverse_text(trunc != NULL ? trunc : msgbuf); -          free(trunc); +          xfree(trunc);            trunc = r;          }          if (trunc != NULL) {            msg_outtrans(trunc); -          free(trunc); +          xfree(trunc);          } else            msg_outtrans(msgbuf);          msg_clr_eos();          msg_check(); -        free(msgbuf); +        xfree(msgbuf);          gotocmdline(FALSE);          ui_flush(); @@ -1203,7 +1203,7 @@ int do_search(  end_do_search:    if ((options & SEARCH_KEEP) || cmdmod.keeppatterns)      spats[0].off = old_off; -  free(strcopy); +  xfree(strcopy);    return retval;  } @@ -3246,8 +3246,8 @@ again:    r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",        0, NULL, (linenr_T)0, 0L); -  free(spat); -  free(epat); +  xfree(spat); +  xfree(epat);    if (r < 1 || lt(curwin->w_cursor, old_end)) {      /* Can't find other end or it's before the previous end.  Could be a @@ -4006,7 +4006,7 @@ find_pattern_in_path (      /* ignore case according to p_ic, p_scs and pat */      regmatch.rm_ic = ignorecase(pat);      regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0); -    free(pat); +    xfree(pat);      if (regmatch.regprog == NULL)        goto fpip_end;    } @@ -4070,7 +4070,7 @@ find_pattern_in_path (                  prev_fname = NULL;                }              } -            free(new_fname); +            xfree(new_fname);              new_fname = NULL;              already_searched = TRUE;              break; @@ -4173,17 +4173,17 @@ find_pattern_in_path (              bigger[i + max_path_depth] = files[i];            old_files += max_path_depth;            max_path_depth *= 2; -          free(files); +          xfree(files);            files = bigger;          }          if ((files[depth + 1].fp = mch_fopen((char *)new_fname, "r"))              == NULL) -          free(new_fname); +          xfree(new_fname);          else {            if (++depth == old_files) {              // Something wrong. We will forget one of our already visited files              // now. -            free(files[old_files].name); +            xfree(files[old_files].name);              ++old_files;            }            files[depth].name = curr_fname = new_fname; @@ -4491,11 +4491,11 @@ exit_matched:    /* Close any files that are still open. */    for (i = 0; i <= depth; i++) {      fclose(files[i].fp); -    free(files[i].name); +    xfree(files[i].name);    }    for (i = old_files; i < max_path_depth; i++) -    free(files[i].name); -  free(files); +    xfree(files[i].name); +  xfree(files);    if (type == CHECK_PATH) {      if (!did_show) { @@ -4518,7 +4518,7 @@ exit_matched:      msg_end();  fpip_end: -  free(file_line); +  xfree(file_line);    vim_regfree(regmatch.regprog);    vim_regfree(incl_regmatch.regprog);    vim_regfree(def_regmatch.regprog); @@ -4629,7 +4629,7 @@ int read_viminfo_search_pattern(vir_T *virp, int force)      if (force || spats[idx].pat == NULL) {        val = viminfo_readstring(virp, (int)(lp - virp->vir_line + 1), TRUE);        set_last_search_pat(val, idx, magic, setlast); -      free(val); +      xfree(val);        spats[idx].no_scs = no_scs;        spats[idx].off.line = off_line;        spats[idx].off.end = off_end; diff --git a/src/nvim/spell.c b/src/nvim/spell.c index 6708ad2aa7..7b38b540cb 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -2097,7 +2097,7 @@ spell_move_to (      len = (int)STRLEN(line);      if (buflen < len + MAXWLEN + 2) { -      free(buf); +      xfree(buf);        buflen = len + MAXWLEN + 2;        buf = xmalloc(buflen);      } @@ -2172,7 +2172,7 @@ spell_move_to (                if (dir == FORWARD) {                  // No need to search further.                  wp->w_cursor = found_pos; -                free(buf); +                xfree(buf);                  if (attrp != NULL)                    *attrp = attr;                  return len; @@ -2195,7 +2195,7 @@ spell_move_to (      if (dir == BACKWARD && found_pos.lnum != 0) {        // Use the last match in the line (before the cursor).        wp->w_cursor = found_pos; -      free(buf); +      xfree(buf);        return found_len;      } @@ -2259,7 +2259,7 @@ spell_move_to (      line_breakcheck();    } -  free(buf); +  xfree(buf);    return 0;  } @@ -2376,26 +2376,26 @@ static slang_T *slang_alloc(char_u *lang)  // Free the contents of an slang_T and the structure itself.  static void slang_free(slang_T *lp)  { -  free(lp->sl_name); -  free(lp->sl_fname); +  xfree(lp->sl_name); +  xfree(lp->sl_fname);    slang_clear(lp); -  free(lp); +  xfree(lp);  }  /// Frees a salitem_T  static void free_salitem(salitem_T *smp) { -  free(smp->sm_lead); +  xfree(smp->sm_lead);    // Don't free sm_oneof and sm_rules, they point into sm_lead. -  free(smp->sm_to); -  free(smp->sm_lead_w); -  free(smp->sm_oneof_w); -  free(smp->sm_to_w); +  xfree(smp->sm_to); +  xfree(smp->sm_lead_w); +  xfree(smp->sm_oneof_w); +  xfree(smp->sm_to_w);  }  /// Frees a fromto_T  static void free_fromto(fromto_T *ftp) { -  free(ftp->ft_from); -  free(ftp->ft_to); +  xfree(ftp->ft_from); +  xfree(ftp->ft_to);  }  // Clear an slang_T so that the file can be reloaded. @@ -2403,18 +2403,18 @@ static void slang_clear(slang_T *lp)  {    garray_T    *gap; -  free(lp->sl_fbyts); +  xfree(lp->sl_fbyts);    lp->sl_fbyts = NULL; -  free(lp->sl_kbyts); +  xfree(lp->sl_kbyts);    lp->sl_kbyts = NULL; -  free(lp->sl_pbyts); +  xfree(lp->sl_pbyts);    lp->sl_pbyts = NULL; -  free(lp->sl_fidxs); +  xfree(lp->sl_fidxs);    lp->sl_fidxs = NULL; -  free(lp->sl_kidxs); +  xfree(lp->sl_kidxs);    lp->sl_kidxs = NULL; -  free(lp->sl_pidxs); +  xfree(lp->sl_pidxs);    lp->sl_pidxs = NULL;    GA_DEEP_CLEAR(&lp->sl_rep, fromto_T, free_fromto); @@ -2433,25 +2433,25 @@ static void slang_clear(slang_T *lp)      vim_regfree(lp->sl_prefprog[i]);    }    lp->sl_prefixcnt = 0; -  free(lp->sl_prefprog); +  xfree(lp->sl_prefprog);    lp->sl_prefprog = NULL; -  free(lp->sl_info); +  xfree(lp->sl_info);    lp->sl_info = NULL; -  free(lp->sl_midword); +  xfree(lp->sl_midword);    lp->sl_midword = NULL;    vim_regfree(lp->sl_compprog); -  free(lp->sl_comprules); -  free(lp->sl_compstartflags); -  free(lp->sl_compallflags); +  xfree(lp->sl_comprules); +  xfree(lp->sl_compstartflags); +  xfree(lp->sl_compallflags);    lp->sl_compprog = NULL;    lp->sl_comprules = NULL;    lp->sl_compstartflags = NULL;    lp->sl_compallflags = NULL; -  free(lp->sl_syllable); +  xfree(lp->sl_syllable);    lp->sl_syllable = NULL;    ga_clear(&lp->sl_syl_items); @@ -2474,9 +2474,9 @@ static void slang_clear(slang_T *lp)  // Clear the info from the .sug file in "lp".  static void slang_clear_sug(slang_T *lp)  { -  free(lp->sl_sbyts); +  xfree(lp->sl_sbyts);    lp->sl_sbyts = NULL; -  free(lp->sl_sidxs); +  xfree(lp->sl_sidxs);    lp->sl_sidxs = NULL;    close_spellbuf(lp->sl_sugbuf);    lp->sl_sugbuf = NULL; @@ -2642,7 +2642,7 @@ spell_load_file (        if (p == NULL)          goto endFAIL;        set_map_str(lp, p); -      free(p); +      xfree(p);        break;      case SN_WORDS: @@ -2799,7 +2799,7 @@ static int read_charflags_section(FILE *fd)    // <folcharslen> <folchars>    fol = read_cnt_string(fd, 2, &follen);    if (follen < 0) { -    free(flags); +    xfree(flags);      return follen;    } @@ -2807,8 +2807,8 @@ static int read_charflags_section(FILE *fd)    if (flags != NULL && fol != NULL)      set_spell_charflags(flags, flagslen, fol); -  free(flags); -  free(fol); +  xfree(flags); +  xfree(fol);    // When <charflagslen> is zero then <fcharlen> must also be zero.    if ((flags == NULL) != (fol == NULL)) @@ -2878,7 +2878,7 @@ static int read_rep_section(FILE *fd, garray_T *gap, short *first)        return SP_FORMERROR;      ftp->ft_to = read_cnt_string(fd, 1, &c);      if (c <= 0) { -      free(ftp->ft_from); +      xfree(ftp->ft_from);        if (c < 0)          return c;        return SP_FORMERROR; @@ -2973,7 +2973,7 @@ static int read_sal_section(FILE *fd, slang_T *slang)      // <saltolen> <salto>      smp->sm_to = read_cnt_string(fd, 1, &ccnt);      if (ccnt < 0) { -      free(smp->sm_lead); +      xfree(smp->sm_lead);        return ccnt;      } @@ -3136,7 +3136,7 @@ static int read_sofo_section(FILE *fd, slang_T *slang)    // <sofotolen> <sofoto>    to = read_cnt_string(fd, 2, &cnt);    if (cnt < 0) { -    free(from); +    xfree(from);      return cnt;    } @@ -3148,8 +3148,8 @@ static int read_sofo_section(FILE *fd, slang_T *slang)    else      res = 0; -  free(from); -  free(to); +  xfree(from); +  xfree(to);    return res;  } @@ -3250,7 +3250,7 @@ static int read_compound(FILE *fd, slang_T *slang, int len)    while (todo-- > 0) {      c = getc(fd);                                       // <compflags>      if (c == EOF) { -      free(pat); +      xfree(pat);        return SP_TRUNCERROR;      } @@ -3281,7 +3281,7 @@ static int read_compound(FILE *fd, slang_T *slang, int len)      // Copy flag to "sl_comprules", unless we run into a wildcard.      if (crp != NULL) {        if (c == '?' || c == '+' || c == '*') { -        free(slang->sl_comprules); +        xfree(slang->sl_comprules);          slang->sl_comprules = NULL;          crp = NULL;        } else @@ -3311,7 +3311,7 @@ static int read_compound(FILE *fd, slang_T *slang, int len)      *crp = NUL;    slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT); -  free(pat); +  xfree(pat);    if (slang->sl_compprog == NULL)      return SP_FORMERROR; @@ -3961,7 +3961,7 @@ char_u *did_set_spelllang(win_T *wp)    }  theend: -  free(spl_copy); +  xfree(spl_copy);    recursive = false;    redraw_win_later(wp, NOT_VALID);    return ret_msg; @@ -3971,7 +3971,7 @@ theend:  static void clear_midword(win_T *wp)  {    memset(wp->w_s->b_spell_ismw, 0, 256); -  free(wp->w_s->b_spell_ismw_mb); +  xfree(wp->w_s->b_spell_ismw_mb);    wp->w_s->b_spell_ismw_mb = NULL;  } @@ -4000,7 +4000,7 @@ static void use_midword(slang_T *lp, win_T *wp)          // Append multi-byte chars to "b_spell_ismw_mb".          n = (int)STRLEN(wp->w_s->b_spell_ismw_mb);          bp = vim_strnsave(wp->w_s->b_spell_ismw_mb, n + l); -        free(wp->w_s->b_spell_ismw_mb); +        xfree(wp->w_s->b_spell_ismw_mb);          wp->w_s->b_spell_ismw_mb = bp;          STRLCPY(bp + n, p, l + 1);        } @@ -4124,7 +4124,7 @@ void spell_delete_wordlist(void)      os_remove((char *)int_wordlist);      int_wordlist_spl(fname);      os_remove((char *)fname); -    free(int_wordlist); +    xfree(int_wordlist);      int_wordlist = NULL;    }  } @@ -4147,9 +4147,9 @@ void spell_free_all(void)    spell_delete_wordlist(); -  free(repl_to); +  xfree(repl_to);    repl_to = NULL; -  free(repl_from); +  xfree(repl_from);    repl_from = NULL;  } @@ -4392,7 +4392,7 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)        continue;      // Convert from "SET" to 'encoding' when needed. -    free(pc); +    xfree(pc);      if (spin->si_conv.vc_type != CONV_NONE) {        pc = string_convert(&spin->si_conv, rline, NULL);        if (pc == NULL) { @@ -5005,9 +5005,9 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)          (void)set_spell_chartab(fol, low, upp);      } -    free(fol); -    free(low); -    free(upp); +    xfree(fol); +    xfree(low); +    xfree(upp);    }    // Use compound specifications of the .aff file for the spell info. @@ -5070,7 +5070,7 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)      spin->si_midword = midword;    } -  free(pc); +  xfree(pc);    fclose(fd);    return aff;  } @@ -5344,7 +5344,7 @@ static void spell_free_aff(afffile_T *aff)    affheader_T *ah;    affentry_T  *ae; -  free(aff->af_enc); +  xfree(aff->af_enc);    // All this trouble to free the "ae_prog" items...    for (ht = &aff->af_pref;; ht = &aff->af_suff) { @@ -5461,7 +5461,7 @@ static int spell_read_dic(spellinfo_T *spin, char_u *fname, afffile_T *affile)      // Skip non-ASCII words when "spin->si_ascii" is true.      if (spin->si_ascii && has_non_ascii(w)) {        ++non_ascii; -      free(pc); +      xfree(pc);        continue;      } @@ -5483,7 +5483,7 @@ static int spell_read_dic(spellinfo_T *spin, char_u *fname, afffile_T *affile)      dw = getroom_save(spin, w);      if (dw == NULL) {        retval = FAIL; -      free(pc); +      xfree(pc);        break;      } @@ -5542,7 +5542,7 @@ static int spell_read_dic(spellinfo_T *spin, char_u *fname, afffile_T *affile)          retval = FAIL;      } -    free(pc); +    xfree(pc);    }    if (duplicate > 0) @@ -5938,7 +5938,7 @@ static int spell_read_wordfile(spellinfo_T *spin, char_u *fname)      rline[l] = NUL;      // Convert from "/encoding={encoding}" to 'encoding' when needed. -    free(pc); +    xfree(pc);      if (spin->si_conv.vc_type != CONV_NONE) {        pc = string_convert(&spin->si_conv, rline, NULL);        if (pc == NULL) { @@ -5974,7 +5974,7 @@ static int spell_read_wordfile(spellinfo_T *spin, char_u *fname)                    p_enc) == FAIL)              smsg((char_u *)_("Conversion in %s not supported: from %s to %s"),                  fname, line, p_enc); -          free(enc); +          xfree(enc);            spin->si_conv.vc_fail = true;          }          continue; @@ -6054,7 +6054,7 @@ static int spell_read_wordfile(spellinfo_T *spin, char_u *fname)      did_word = true;    } -  free(pc); +  xfree(pc);    fclose(fd);    if (spin->si_ascii && non_ascii > 0) { @@ -6123,7 +6123,7 @@ static void free_blocks(sblock_T *bl)    while (bl != NULL) {      next = bl->sb_next; -    free(bl); +    xfree(bl);      bl = next;    }  } @@ -7167,7 +7167,7 @@ static void spell_make_sugfile(spellinfo_T *spin, char_u *wfname)    sug_write(spin, fname);  theend: -  free(fname); +  xfree(fname);    if (free_slang)      slang_free(slang);    free_blocks(spin->si_blocks); @@ -7514,7 +7514,7 @@ static void close_spellbuf(buf_T *buf)  {    if (buf != NULL) {      ml_close(buf, TRUE); -    free(buf); +    xfree(buf);    }  } @@ -7737,8 +7737,8 @@ mkspell (    }  theend: -  free(fname); -  free(wfname); +  xfree(fname); +  xfree(wfname);  }  // Display a message for spell file processing when 'verbose' is set or using @@ -7812,7 +7812,7 @@ spell_add_word (          break;        if (*spf == NUL) {          EMSGN(_("E765: 'spellfile' does not have %" PRId64 " entries"), idx); -        free(fnamebuf); +        xfree(fnamebuf);          return;        }      } @@ -7823,7 +7823,7 @@ spell_add_word (        buf = NULL;      if (buf != NULL && bufIsChanged(buf)) {        EMSG(_(e_bufloaded)); -      free(fnamebuf); +      xfree(fnamebuf);        return;      } @@ -7908,7 +7908,7 @@ spell_add_word (      redraw_all_later(SOME_VALID);    } -  free(fnamebuf); +  xfree(fnamebuf);  }  // Initialize 'spellfile' for the current buffer. @@ -7977,7 +7977,7 @@ static void init_spellfile(void)        aspath = false;      } -    free(buf); +    xfree(buf);    }  } @@ -8464,9 +8464,9 @@ void spell_suggest(int count)        smsg((char_u *)_("Sorry, only %" PRId64 " suggestions"),            (int64_t)sug.su_ga.ga_len);    } else { -    free(repl_from); +    xfree(repl_from);      repl_from = NULL; -    free(repl_to); +    xfree(repl_to);      repl_to = NULL;      // When 'rightleft' is set the list is drawn right-left. @@ -8638,7 +8638,7 @@ static bool check_need_cap(linenr_T lnum, colnr_T col)      }    } -  free(line_copy); +  xfree(line_copy);    return need_cap;  } @@ -8696,7 +8696,7 @@ void ex_spellrepall(exarg_T *eap)    p_ws = save_ws;    curwin->w_cursor = pos; -  free(frompat); +  xfree(frompat);    if (sub_nsubs == 0)      EMSG2(_("E753: Not found: %s"), repl_from); @@ -8849,7 +8849,7 @@ spell_find_suggest (      }    } -  free(sps_copy); +  xfree(sps_copy);    if (do_combine)      // Combine the two list of suggestions.  This must be done last, @@ -9181,7 +9181,7 @@ static void tree_count_words(char_u *byts, idx_T *idxs)  // Free the info put in "*su" by spell_find_suggest().  static void spell_find_cleanup(suginfo_T *su)  { -# define FREE_SUG_WORD(sug) free(sug->st_word) +# define FREE_SUG_WORD(sug) xfree(sug->st_word)    // Free the suggestions.    GA_DEEP_CLEAR(&su->su_ga, suggest_T, FREE_SUG_WORD);    GA_DEEP_CLEAR(&su->su_sga, suggest_T, FREE_SUG_WORD); @@ -10866,7 +10866,7 @@ static void score_combine(suginfo_T *su)          if (j == ga.ga_len)            stp[ga.ga_len++] = SUG(*gap, i);          else -          free(p); +          xfree(p);        }      }    } @@ -10877,7 +10877,7 @@ static void score_combine(suginfo_T *su)    // Truncate the list to the number of suggestions that will be displayed.    if (ga.ga_len > su->su_maxcount) {      for (int i = su->su_maxcount; i < ga.ga_len; ++i) { -      free(stp[i].st_word); +      xfree(stp[i].st_word);      }      ga.ga_len = su->su_maxcount;    } @@ -11004,7 +11004,7 @@ static void suggest_try_soundalike_finish(void)        todo = (int)slang->sl_sounddone.ht_used;        for (hi = slang->sl_sounddone.ht_array; todo > 0; ++hi)          if (!HASHITEM_EMPTY(hi)) { -          free(HI2SFT(hi)); +          xfree(HI2SFT(hi));            --todo;          } @@ -11328,7 +11328,7 @@ static void set_map_str(slang_T *lp, char_u *map)            // This should have been checked when generating the .spl            // file.            EMSG(_("E783: duplicate char in MAP entry")); -          free(b); +          xfree(b);          }        } else          lp->sl_map_array[c] = headc; @@ -11511,7 +11511,7 @@ check_suggestions (      (void)spell_check(curwin, longword, &attr, NULL, false);      if (attr != HLF_COUNT) {        // Remove this entry. -      free(stp[i].st_word); +      xfree(stp[i].st_word);        --gap->ga_len;        if (i < gap->ga_len)          memmove(stp + i, stp + i + 1, @@ -11608,7 +11608,7 @@ cleanup_suggestions (    // Truncate the list to the number of suggestions that will be displayed.    if (gap->ga_len > keep) {      for (int i = keep; i < gap->ga_len; ++i) { -      free(stp[i].st_word); +      xfree(stp[i].st_word);      }      gap->ga_len = keep;      return stp[keep - 1].st_score; @@ -12548,7 +12548,7 @@ static int spell_edit_score(slang_T *slang, char_u *badword, char_u *goodword)    }    i = CNT(badlen - 1, goodlen - 1); -  free(cnt); +  xfree(cnt);    return i;  } @@ -12906,7 +12906,7 @@ void ex_spelldump(exarg_T *eap)    // enable spelling locally in the new window    set_option_value((char_u*)"spell", TRUE, (char_u*)"", OPT_LOCAL);    set_option_value((char_u*)"spl",  dummy,         spl, OPT_LOCAL); -  free(spl); +  xfree(spl);    if (!bufempty() || !buf_valid(curbuf))      return; diff --git a/src/nvim/strings.c b/src/nvim/strings.c index dd10184d38..4e70f48860 100644 --- a/src/nvim/strings.c +++ b/src/nvim/strings.c @@ -269,7 +269,7 @@ char_u *strup_save(const char_u *orig)          memcpy(s, res, (size_t)(p - res));          STRCPY(s + (p - res) + newl, p + l);          p = s + (p - res); -        free(res); +        xfree(res);          res = s;        } diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index 7be7c26954..8c32e5f06a 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -959,7 +959,7 @@ static void syn_stack_free_block(synblock_T *block)    if (block->b_sst_array != NULL) {      for (p = block->b_sst_first; p != NULL; p = p->sst_next)        clear_syn_state(p); -    free(block->b_sst_array); +    xfree(block->b_sst_array);      block->b_sst_array = NULL;      block->b_sst_len = 0;    } @@ -1044,7 +1044,7 @@ static void syn_stack_alloc(void)        to->sst_next = to + 1;      (sstp + len - 1)->sst_next = NULL; -    free(syn_block->b_sst_array); +    xfree(syn_block->b_sst_array);      syn_block->b_sst_array = sstp;      syn_block->b_sst_len = len;    } @@ -3054,7 +3054,7 @@ void syntax_clear(synblock_T *block)    vim_regfree(block->b_syn_linecont_prog);    block->b_syn_linecont_prog = NULL; -  free(block->b_syn_linecont_pat); +  xfree(block->b_syn_linecont_pat);    block->b_syn_linecont_pat = NULL;    block->b_syn_folditems = 0; @@ -3073,7 +3073,7 @@ void reset_synblock(win_T *wp)  {    if (wp->w_s != &wp->w_buffer->b_s) {      syntax_clear(wp->w_s); -    free(wp->w_s); +    xfree(wp->w_s);      wp->w_s = &wp->w_buffer->b_s;    }  } @@ -3097,7 +3097,7 @@ static void syntax_sync_clear(void)    vim_regfree(curwin->w_s->b_syn_linecont_prog);    curwin->w_s->b_syn_linecont_prog = NULL; -  free(curwin->w_s->b_syn_linecont_pat); +  xfree(curwin->w_s->b_syn_linecont_pat);    curwin->w_s->b_syn_linecont_pat = NULL;    syn_stack_free_all(curwin->w_s);              /* Need to recompute all syntax. */ @@ -3125,13 +3125,13 @@ static void syn_remove_pattern(synblock_T *block, int idx)   */  static void syn_clear_pattern(synblock_T *block, int i)  { -  free(SYN_ITEMS(block)[i].sp_pattern); +  xfree(SYN_ITEMS(block)[i].sp_pattern);    vim_regfree(SYN_ITEMS(block)[i].sp_prog);    /* Only free sp_cont_list and sp_next_list of first start pattern */    if (i == 0 || SYN_ITEMS(block)[i - 1].sp_type != SPTYPE_START) { -    free(SYN_ITEMS(block)[i].sp_cont_list); -    free(SYN_ITEMS(block)[i].sp_next_list); -    free(SYN_ITEMS(block)[i].sp_syn.cont_in_list); +    xfree(SYN_ITEMS(block)[i].sp_cont_list); +    xfree(SYN_ITEMS(block)[i].sp_next_list); +    xfree(SYN_ITEMS(block)[i].sp_syn.cont_in_list);    }  } @@ -3140,9 +3140,9 @@ static void syn_clear_pattern(synblock_T *block, int i)   */  static void syn_clear_cluster(synblock_T *block, int i)  { -  free(SYN_CLSTR(block)[i].scl_name); -  free(SYN_CLSTR(block)[i].scl_name_u); -  free(SYN_CLSTR(block)[i].scl_list); +  xfree(SYN_CLSTR(block)[i].scl_name); +  xfree(SYN_CLSTR(block)[i].scl_name_u); +  xfree(SYN_CLSTR(block)[i].scl_list);  }  /* @@ -3198,7 +3198,7 @@ static void syn_cmd_clear(exarg_T *eap, int syncing)             */            short scl_id = id - SYNID_CLUSTER; -          free(SYN_CLSTR(curwin->w_s)[scl_id].scl_list); +          xfree(SYN_CLSTR(curwin->w_s)[scl_id].scl_list);            SYN_CLSTR(curwin->w_s)[scl_id].scl_list = NULL;          }        } else { @@ -3760,9 +3760,9 @@ static void syn_clear_keyword(int id, hashtab_T *ht)              hi->hi_key = KE2HIKEY(kp_next);          } else            kp_prev->ke_next = kp_next; -        free(kp->next_list); -        free(kp->k_syn.cont_in_list); -        free(kp); +        xfree(kp->next_list); +        xfree(kp->k_syn.cont_in_list); +        xfree(kp);          kp = kp_next;        } else {          kp_prev = kp; @@ -3789,9 +3789,9 @@ static void clear_keywtab(hashtab_T *ht)        --todo;        for (kp = HI2KE(hi); kp != NULL; kp = kp_next) {          kp_next = kp->ke_next; -        free(kp->next_list); -        free(kp->k_syn.cont_in_list); -        free(kp); +        xfree(kp->next_list); +        xfree(kp->k_syn.cont_in_list); +        xfree(kp);        }      }    } @@ -4011,12 +4011,12 @@ get_syn_options (              }            if (i < 0) {              EMSG2(_("E394: Didn't find region item for %s"), gname); -            free(gname); +            xfree(gname);              return NULL;            }          } -        free(gname); +        xfree(gname);          arg = skipwhite(arg);        } else if (flagtab[fidx].flags == HL_FOLD                   && foldmethodIsSyntax(curwin)) @@ -4208,9 +4208,9 @@ static void syn_cmd_keyword(exarg_T *eap, int syncing)        }      } -    free(keyword_copy); -    free(syn_opt_arg.cont_in_list); -    free(syn_opt_arg.next_list); +    xfree(keyword_copy); +    xfree(syn_opt_arg.cont_in_list); +    xfree(syn_opt_arg.next_list);    }    if (rest != NULL) @@ -4311,10 +4311,10 @@ syn_cmd_match (     * Something failed, free the allocated memory.     */    vim_regfree(item.sp_prog); -  free(item.sp_pattern); -  free(syn_opt_arg.cont_list); -  free(syn_opt_arg.cont_in_list); -  free(syn_opt_arg.next_list); +  xfree(item.sp_pattern); +  xfree(syn_opt_arg.cont_list); +  xfree(syn_opt_arg.cont_in_list); +  xfree(syn_opt_arg.next_list);    if (rest == NULL)      EMSG2(_(e_invarg2), arg); @@ -4388,7 +4388,7 @@ syn_cmd_region (      key_end = rest;      while (*key_end && !vim_iswhite(*key_end) && *key_end != '=')        ++key_end; -    free(key); +    xfree(key);      key = vim_strnsave_up(rest, (int)(key_end - rest));      if (STRCMP(key, "MATCHGROUP") == 0)        item = ITEM_MATCHGROUP; @@ -4456,7 +4456,7 @@ syn_cmd_region (        ++pat_count;      }    } -  free(key); +  xfree(key);    if (illegal || not_enough)      rest = NULL; @@ -4530,17 +4530,17 @@ syn_cmd_region (      for (ppp = pat_ptrs[item]; ppp != NULL; ppp = ppp_next) {        if (!success) {          vim_regfree(ppp->pp_synp->sp_prog); -        free(ppp->pp_synp->sp_pattern); +        xfree(ppp->pp_synp->sp_pattern);        } -      free(ppp->pp_synp); +      xfree(ppp->pp_synp);        ppp_next = ppp->pp_next; -      free(ppp); +      xfree(ppp);      }    if (!success) { -    free(syn_opt_arg.cont_list); -    free(syn_opt_arg.cont_in_list); -    free(syn_opt_arg.next_list); +    xfree(syn_opt_arg.cont_list); +    xfree(syn_opt_arg.cont_in_list); +    xfree(syn_opt_arg.next_list);      if (not_enough)        EMSG2(_("E399: Not enough arguments: syntax region %s"), arg);      else if (illegal || rest == NULL) @@ -4580,11 +4580,11 @@ static void syn_combine_list(short **clstr1, short **clstr2, int list_op)      return;    if (*clstr1 == NULL || list_op == CLUSTER_REPLACE) {      if (list_op == CLUSTER_REPLACE) -      free(*clstr1); +      xfree(*clstr1);      if (list_op == CLUSTER_REPLACE || list_op == CLUSTER_ADD)        *clstr1 = *clstr2;      else -      free(*clstr2); +      xfree(*clstr2);      return;    } @@ -4668,8 +4668,8 @@ static void syn_combine_list(short **clstr1, short **clstr2, int list_op)    /*     * Finally, put the new list in place.     */ -  free(*clstr1); -  free(*clstr2); +  xfree(*clstr1); +  xfree(*clstr2);    *clstr1 = clstr;  } @@ -4688,7 +4688,7 @@ static int syn_scl_name2id(char_u *name)        break;      }    } -  free(name_u); +  xfree(name_u);    return i < 0 ? 0 : i + SYNID_CLUSTER;  } @@ -4699,7 +4699,7 @@ static int syn_scl_namen2id(char_u *linep, int len)  {    char_u *name = vim_strnsave(linep, len);    int id = syn_scl_name2id(name); -  free(name); +  xfree(name);    return id;  } @@ -4721,7 +4721,7 @@ static int syn_check_cluster(char_u *pp, int len)    if (id == 0)                          /* doesn't exist yet */      id = syn_add_cluster(name);    else -    free(name); +    xfree(name);    return id;  } @@ -4743,7 +4743,7 @@ static int syn_add_cluster(char_u *name)    int len = curwin->w_s->b_syn_clusters.ga_len;    if (len >= MAX_CLUSTER_ID) {      EMSG((char_u *)_("E848: Too many syntax clusters")); -    free(name); +    xfree(name);      return 0;    } @@ -4945,7 +4945,7 @@ static void syn_cmd_sync(exarg_T *eap, int syncing)    while (!ends_excmd(*arg_start)) {      arg_end = skiptowhite(arg_start);      next_arg = skipwhite(arg_end); -    free(key); +    xfree(key);      key = vim_strnsave_up(arg_start, (int)(arg_end - arg_start));      if (STRCMP(key, "CCOMMENT") == 0) {        if (!eap->skip) @@ -5013,7 +5013,7 @@ static void syn_cmd_sync(exarg_T *eap, int syncing)          syn_clear_time(&curwin->w_s->b_syn_linecont_time);          if (curwin->w_s->b_syn_linecont_prog == NULL) { -          free(curwin->w_s->b_syn_linecont_pat); +          xfree(curwin->w_s->b_syn_linecont_pat);            curwin->w_s->b_syn_linecont_pat = NULL;            finished = TRUE;            break; @@ -5035,7 +5035,7 @@ static void syn_cmd_sync(exarg_T *eap, int syncing)      }      arg_start = next_arg;    } -  free(key); +  xfree(key);    if (illegal)      EMSG2(_("E404: Illegal arguments: %s"), arg_start);    else if (!finished) { @@ -5109,13 +5109,13 @@ get_id_list (          if (TOUPPER_ASC(**arg) != 'C') {            EMSG2(_("E407: %s not allowed here"), name + 1);            failed = TRUE; -          free(name); +          xfree(name);            break;          }          if (count != 0) {            EMSG2(_("E408: %s must be first in contains list"), name + 1);            failed = TRUE; -          free(name); +          xfree(name);            break;          }          if (name[1] == 'A') @@ -5142,7 +5142,7 @@ get_id_list (            regmatch.regprog = vim_regcomp(name, RE_MAGIC);            if (regmatch.regprog == NULL) {              failed = TRUE; -            free(name); +            xfree(name);              break;            } @@ -5156,7 +5156,7 @@ get_id_list (                   * "contains=a.*b,axb".                   * Go back to first round */                  if (count >= total_count) { -                  free(retval); +                  xfree(retval);                    round = 1;                  } else                    retval[count] = i + 1; @@ -5168,7 +5168,7 @@ get_id_list (            vim_regfree(regmatch.regprog);          }        } -      free(name); +      xfree(name);        if (id == 0) {          EMSG2(_("E409: Unknown group name: %s"), p);          failed = TRUE; @@ -5178,7 +5178,7 @@ get_id_list (          if (round == 2) {            /* Got more items than expected, go back to first round */            if (count >= total_count) { -            free(retval); +            xfree(retval);              round = 1;            } else              retval[count] = id; @@ -5201,14 +5201,14 @@ get_id_list (    *arg = p;    if (failed || retval == NULL) { -    free(retval); +    xfree(retval);      return FAIL;    }    if (*list == NULL)      *list = retval;    else -    free(retval);           /* list already found, don't overwrite it */ +    xfree(retval);           /* list already found, don't overwrite it */    return OK;  } @@ -5387,7 +5387,7 @@ void ex_syntax(exarg_T *eap)        break;      }    } -  free(subcmd_name); +  xfree(subcmd_name);    if (eap->skip)      --emsg_skip;  } @@ -5427,7 +5427,7 @@ void ex_ownsyntax(exarg_T *eap)      do_unlet((char_u *)"b:current_syntax", TRUE);    else {      set_internal_string_var((char_u *)"b:current_syntax", old_value); -    free(old_value); +    xfree(old_value);    }  } @@ -5862,7 +5862,7 @@ init_highlight (      // p invalid, so copy it.      char_u *copy_p = vim_strsave(p);      bool okay = load_colors(copy_p); -    free(copy_p); +    xfree(copy_p);      if (okay) {          return;      } @@ -5943,7 +5943,7 @@ int load_colors(char_u *name)    buf = xmalloc(STRLEN(name) + 12);    sprintf((char *)buf, "colors/%s.vim", name);    retval = source_runtime(buf, FALSE); -  free(buf); +  xfree(buf);    apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);    recursive = FALSE; @@ -6145,7 +6145,7 @@ do_highlight (         */        while (*linep && !vim_iswhite(*linep) && *linep != '=')          ++linep; -      free(key); +      xfree(key);        key = vim_strnsave_up(key_start, (int)(linep - key_start));        linep = skipwhite(linep); @@ -6189,7 +6189,7 @@ do_highlight (          error = TRUE;          break;        } -      free(arg); +      xfree(arg);        arg = vim_strnsave(arg_start, (int)(linep - arg_start));        if (*linep == '\'') @@ -6394,7 +6394,7 @@ do_highlight (            if (!init)              HL_TABLE()[idx].sg_set |= SG_GUI; -          free(HL_TABLE()[idx].sg_rgb_fg_name); +          xfree(HL_TABLE()[idx].sg_rgb_fg_name);            if (STRCMP(arg, "NONE")) {              HL_TABLE()[idx].sg_rgb_fg_name = (uint8_t *)xstrdup((char *)arg);              HL_TABLE()[idx].sg_rgb_fg = name_to_color(arg); @@ -6412,7 +6412,7 @@ do_highlight (            if (!init)              HL_TABLE()[idx].sg_set |= SG_GUI; -          free(HL_TABLE()[idx].sg_rgb_bg_name); +          xfree(HL_TABLE()[idx].sg_rgb_bg_name);            if (STRCMP(arg, "NONE") != 0) {              HL_TABLE()[idx].sg_rgb_bg_name = (uint8_t *)xstrdup((char *)arg);              HL_TABLE()[idx].sg_rgb_bg = name_to_color(arg); @@ -6462,8 +6462,8 @@ do_highlight (      HL_TABLE()[idx].sg_scriptID = current_SID;      redraw_all_later(NOT_VALID);    } -  free(key); -  free(arg); +  xfree(key); +  xfree(arg);    /* Only call highlight_changed() once, after sourcing a syntax file */    need_highlight_changed = TRUE; @@ -6474,8 +6474,8 @@ void free_highlight(void)  {    for (int i = 0; i < highlight_ga.ga_len; ++i) {      highlight_clear(i); -    free(HL_TABLE()[i].sg_name); -    free(HL_TABLE()[i].sg_name_u); +    xfree(HL_TABLE()[i].sg_name); +    xfree(HL_TABLE()[i].sg_name_u);    }    ga_clear(&highlight_ga);  } @@ -6522,9 +6522,9 @@ static void highlight_clear(int idx)    HL_TABLE()[idx].sg_gui = 0;    HL_TABLE()[idx].sg_rgb_fg = -1;    HL_TABLE()[idx].sg_rgb_bg = -1; -  free(HL_TABLE()[idx].sg_rgb_fg_name); +  xfree(HL_TABLE()[idx].sg_rgb_fg_name);    HL_TABLE()[idx].sg_rgb_fg_name = NULL; -  free(HL_TABLE()[idx].sg_rgb_bg_name); +  xfree(HL_TABLE()[idx].sg_rgb_bg_name);    HL_TABLE()[idx].sg_rgb_bg_name = NULL;    /* Clear the script ID only when there is no link, since that is not     * cleared. */ @@ -6959,7 +6959,7 @@ int syn_namen2id(char_u *linep, int len)  {    char_u *name = vim_strnsave(linep, len);    int id = syn_name2id(name); -  free(name); +  xfree(name);    return id;  } @@ -6981,7 +6981,7 @@ int syn_check_group(char_u *pp, int len)    if (id == 0)                          /* doesn't exist yet */      id = syn_add_group(name);    else -    free(name); +    xfree(name);    return id;  } @@ -6998,7 +6998,7 @@ static int syn_add_group(char_u *name)    for (p = name; *p != NUL; ++p) {      if (!vim_isprintc(*p)) {        EMSG(_("E669: Unprintable character in group name")); -      free(name); +      xfree(name);        return 0;      } else if (!ASCII_ISALNUM(*p) && *p != '_')   {        /* This is an error, but since there previously was no check only @@ -7019,7 +7019,7 @@ static int syn_add_group(char_u *name)    if (highlight_ga.ga_len >= MAX_HL_ID) {      EMSG(_("E849: Too many highlight and syntax groups")); -    free(name); +    xfree(name);      return 0;    } @@ -7039,8 +7039,8 @@ static int syn_add_group(char_u *name)  static void syn_unadd_group(void)  {    --highlight_ga.ga_len; -  free(HL_TABLE()[highlight_ga.ga_len].sg_name); -  free(HL_TABLE()[highlight_ga.ga_len].sg_name_u); +  xfree(HL_TABLE()[highlight_ga.ga_len].sg_name); +  xfree(HL_TABLE()[highlight_ga.ga_len].sg_name_u);  }  /* diff --git a/src/nvim/tag.c b/src/nvim/tag.c index 1f6b42d9cf..75b0698bd3 100644 --- a/src/nvim/tag.c +++ b/src/nvim/tag.c @@ -246,7 +246,7 @@ do_tag (            cur_match = ptag_entry.cur_match;            cur_fnum = ptag_entry.cur_fnum;          } else { -          free(ptag_entry.tagname); +          xfree(ptag_entry.tagname);            ptag_entry.tagname = vim_strsave(tag);          }        } else { @@ -255,12 +255,12 @@ do_tag (           * stack entries above it.           */          while (tagstackidx < tagstacklen) -          free(tagstack[--tagstacklen].tagname); +          xfree(tagstack[--tagstacklen].tagname);          /* if the tagstack is full: remove oldest entry */          if (++tagstacklen > TAGSTACKSIZE) {            tagstacklen = TAGSTACKSIZE; -          free(tagstack[0].tagname); +          xfree(tagstack[0].tagname);            for (i = 1; i < tagstacklen; ++i)              tagstack[i - 1] = tagstack[i];            --tagstackidx; @@ -450,7 +450,7 @@ do_tag (          || (cur_match >= num_matches && max_num_matches != MAXCOL)          || other_name) {        if (other_name) { -        free(tagmatchname); +        xfree(tagmatchname);          tagmatchname = vim_strsave(name);        } @@ -569,7 +569,7 @@ do_tag (             * it and put "..." in the middle */            p = tag_full_fname(&tagp);            msg_puts_long_attr(p, hl_attr(HLF_D)); -          free(p); +          xfree(p);            if (msg_col > 0)              msg_putchar('\n'); @@ -709,7 +709,7 @@ do_tag (            /* Save the tag file name */            p = tag_full_fname(&tagp);            STRLCPY(fname, p, MAXPATHL + 1); -          free(p); +          xfree(p);            /*             * Get the line number or the search pattern used to locate @@ -804,8 +804,8 @@ do_tag (          set_errorlist(curwin, list, ' ', IObuff);          list_free(list, TRUE); -        free(fname); -        free(cmd); +        xfree(fname); +        xfree(cmd);          cur_match = 0;                  /* Jump to the first tag */        } @@ -941,7 +941,7 @@ end_do_tag:   */  void tag_freematch(void)  { -  free(tagmatchname); +  xfree(tagmatchname);    tagmatchname = NULL;  } @@ -983,7 +983,7 @@ void do_tags(exarg_T *eap)        msg_outtrans(IObuff);        msg_outtrans_attr(name, tagstack[i].fmark.fnum == curbuf->b_fnum            ? hl_attr(HLF_D) : 0); -      free(name); +      xfree(name);      }      ui_flush();                    /* show one line at a time */    } @@ -1411,12 +1411,12 @@ line_read_in:              /* Copy or swap lbuf and conv_line. */              len = (int)STRLEN(conv_line) + 1;              if (len > lbuf_size) { -              free(lbuf); +              xfree(lbuf);                lbuf = conv_line;                lbuf_size = len;              } else {                STRCPY(lbuf, conv_line); -              free(conv_line); +              xfree(conv_line);              }            }          } @@ -1873,7 +1873,7 @@ parse_line:                  [ga_match[mtt].ga_len++] = mfp;                  ++match_count;                } else -                free(mfp); +                xfree(mfp);              }            }          } @@ -1932,9 +1932,9 @@ parse_line:    }  findtag_end: -  free(lbuf); +  xfree(lbuf);    vim_regfree(orgpat.regmatch.regprog); -  free(tag_fname); +  xfree(tag_fname);    /*     * Move the matches from the ga_match[] arrays into one list of @@ -1952,7 +1952,7 @@ findtag_end:      for (int i = 0; i < ga_match[mtt].ga_len; ++i) {        mfp = ((struct match_found **)(ga_match[mtt].ga_data))[i];        if (matches == NULL) -        free(mfp); +        xfree(mfp);        else {          /* To avoid allocating memory again we turn the struct           * match_found into a string.  For help the priority was not @@ -1969,7 +1969,7 @@ findtag_end:    *num_matches = match_count;    curbuf->b_help = help_save; -  free(saved_pat); +  xfree(saved_pat);    return retval;  } @@ -1993,7 +1993,7 @@ void free_tag_stuff(void)    tag_freematch();    if (ptag_entry.tagname) { -    free(ptag_entry.tagname); +    xfree(ptag_entry.tagname);      ptag_entry.tagname = NULL;    }  } @@ -2102,7 +2102,7 @@ get_tagfname (    }    STRCPY(buf, fname); -  free(fname); +  xfree(fname);    return OK;  } @@ -2111,7 +2111,7 @@ get_tagfname (   */  void tagname_free(tagname_T *tnp)  { -  free(tnp->tn_tags); +  xfree(tnp->tn_tags);    vim_findfile_cleanup(tnp->tn_search_ctx);    tnp->tn_search_ctx = NULL;    ga_clear_strings(&tag_fnames); @@ -2362,7 +2362,7 @@ jumpto_tag (        && !has_autocmd(EVENT_BUFREADCMD, fname, NULL)        ) {      retval = NOTAGFILE; -    free(nofile_fname); +    xfree(nofile_fname);      nofile_fname = vim_strsave(fname);      goto erret;    } @@ -2565,9 +2565,9 @@ erret:    g_do_tagpreview = 0;   /* For next time */    if (tagp.fname_end != NULL)      *tagp.fname_end = csave; -  free(pbuf); -  free(tofree_fname); -  free(full_fname); +  xfree(pbuf); +  xfree(tofree_fname); +  xfree(full_fname);    return retval;  } @@ -2611,7 +2611,7 @@ static char_u *expand_tag_fname(char_u *fname, char_u *tag_fname, int expand)    } else      retval = vim_strsave(fname); -  free(expanded_fname); +  xfree(expanded_fname);    return retval;  } @@ -2635,7 +2635,7 @@ static int test_for_current(char_u *fname, char_u *fname_end, char_u *tag_fname,      }      fullname = expand_tag_fname(fname, tag_fname, TRUE);      retval = (path_full_compare(fullname, buf_ffname, TRUE) & kEqualFiles); -    free(fullname); +    xfree(fullname);      *fname_end = c;    } @@ -2761,7 +2761,7 @@ add_tag_field (    }    buf[len] = NUL;    retval = dict_add_nr_str(dict, field_name, 0L, buf); -  free(buf); +  xfree(buf);    return retval;  } @@ -2804,7 +2804,7 @@ int get_tags(list_T *list, char_u *pat)            || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)          ret = FAIL; -      free(full_fname); +      xfree(full_fname);        if (tp.command_end != NULL) {          for (p = tp.command_end + 3; @@ -2844,9 +2844,9 @@ int get_tags(list_T *list, char_u *pat)          }        } -      free(matches[i]); +      xfree(matches[i]);      } -    free(matches); +    xfree(matches);    }    return ret;  } diff --git a/src/nvim/tempfile.c b/src/nvim/tempfile.c index 0750be0ab9..1b51b226db 100644 --- a/src/nvim/tempfile.c +++ b/src/nvim/tempfile.c @@ -77,7 +77,7 @@ void vim_deltempdir(void)      path_tail(NameBuff)[-1] = NUL;      os_rmdir((char *)NameBuff); -    free(vim_tempdir); +    xfree(vim_tempdir);      vim_tempdir = NULL;    }  } @@ -109,7 +109,7 @@ static bool vim_settempdir(char_u *tempdir)    vim_FullName(tempdir, buf, MAXPATHL, false);    add_pathsep(buf);    vim_tempdir = vim_strsave(buf); -  free(buf); +  xfree(buf);    return true;  } diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index ea0cc88e58..8ee47b2642 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -243,7 +243,7 @@ Terminal *terminal_open(TerminalOptions opts)      char *name = get_config_string(rv, var);      if (name) {        color_val = name_to_color((uint8_t *)name); -      free(name); +      xfree(name);        if (color_val != -1) {          rv->colors[i] = color_val; @@ -424,11 +424,11 @@ void terminal_destroy(Terminal *term)    term->buf = NULL;    pmap_del(ptr_t)(invalidated_terminals, term);    for (size_t i = 0 ; i < term->sb_current; i++) { -    free(term->sb_buffer[i]); +    xfree(term->sb_buffer[i]);    } -  free(term->sb_buffer); +  xfree(term->sb_buffer);    vterm_free(term->vt); -  free(term); +  xfree(term);  }  void terminal_send(Terminal *term, char *data, size_t size) @@ -603,7 +603,7 @@ static int term_sb_push(int cols, const VTermScreenCell *cells, void *data)        // Recycle old row if it's the right size        sbrow = term->sb_buffer[term->sb_current - 1];      } else { -      free(term->sb_buffer[term->sb_current - 1]); +      xfree(term->sb_buffer[term->sb_current - 1]);      }      memmove(term->sb_buffer + 1, term->sb_buffer, @@ -664,7 +664,7 @@ static int term_sb_pop(int cols, VTermScreenCell *cells, void *data)      cells[col].chars[0] = 0;      cells[col].width = 1;    } -  free(sbrow); +  xfree(sbrow);    pmap_put(ptr_t)(invalidated_terminals, term, NULL);    return 1; diff --git a/src/nvim/tui/term_input.inl b/src/nvim/tui/term_input.inl index c1ccc863de..ccc47080b8 100644 --- a/src/nvim/tui/term_input.inl +++ b/src/nvim/tui/term_input.inl @@ -296,5 +296,5 @@ static void term_input_destroy(TermInput *input)    uv_close((uv_handle_t *)&input->timer_handle, NULL);    termkey_destroy(input->tk);    event_poll(0);  // Run once to remove references to input/timer handles -  free(input); +  xfree(input);  } diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 6d23c2cf74..763a7c0e6d 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -190,12 +190,12 @@ static void tui_stop(UI *ui)    if (uv_loop_close(data->write_loop)) {      abort();    } -  free(data->write_loop); +  xfree(data->write_loop);    unibi_destroy(data->ut);    destroy_screen(data); -  free(data); +  xfree(data);    ui_detach(ui); -  free(ui); +  xfree(ui);  }  static void try_resize(Event ev) @@ -851,8 +851,8 @@ static void destroy_screen(TUIData *data)  {    if (data->screen) {      for (int i = 0; i < data->old_height; i++) { -      free(data->screen[i]); +      xfree(data->screen[i]);      } -    free(data->screen); +    xfree(data->screen);    }  } diff --git a/src/nvim/undo.c b/src/nvim/undo.c index 4a721a0884..1377282088 100644 --- a/src/nvim/undo.c +++ b/src/nvim/undo.c @@ -686,11 +686,11 @@ char_u *u_get_undo_file_name(char_u *buf_ffname, int reading)          (!reading || os_file_exists(undo_file_name))) {        break;      } -    free(undo_file_name); +    xfree(undo_file_name);      undo_file_name = NULL;    } -  free(munged_name); +  xfree(munged_name);    return undo_file_name;  } @@ -710,7 +710,7 @@ static void u_free_uhp(u_header_T *uhp)      u_freeentry(uep, uep->ue_size);      uep = nuep;    } -  free(uhp); +  xfree(uhp);  }  /// Writes the header. @@ -823,7 +823,7 @@ static u_header_T *unserialize_uhp(bufinfo_T *bi, char_u *file_name)    uhp->uh_seq = undo_read_4c(bi);    if (uhp->uh_seq <= 0) {      corruption_error("uh_seq", file_name); -    free(uhp); +    xfree(uhp);      return NULL;    }    unserialize_pos(bi, &uhp->uh_cursor); @@ -1204,7 +1204,7 @@ write_error:  theend:    if (file_name != name) -    free(file_name); +    xfree(file_name);  }  /// Loads the undo tree from an undo file. @@ -1470,7 +1470,7 @@ void u_read_undo(char_u *name, char_u *hash, char_u *orig_name)    curbuf->b_u_save_nr_cur = last_save_nr;    curbuf->b_u_synced = true; -  free(uhp_table); +  xfree(uhp_table);  #ifdef U_DEBUG    for (int i = 0; i < num_head; i++) { @@ -1478,7 +1478,7 @@ void u_read_undo(char_u *name, char_u *hash, char_u *orig_name)        EMSGN("uhp_table entry %" PRId64 " not used, leaking memory", i);      }    } -  free(uhp_table_used); +  xfree(uhp_table_used);    u_check(TRUE);  #endif @@ -1488,13 +1488,13 @@ void u_read_undo(char_u *name, char_u *hash, char_u *orig_name)    goto theend;  error: -  free(line_ptr); +  xfree(line_ptr);    if (uhp_table != NULL) {      for (long i = 0; i < num_read_uhps; i++)        if (uhp_table[i] != NULL) {          u_free_uhp(uhp_table[i]);        } -    free(uhp_table); +    xfree(uhp_table);    }  theend: @@ -1502,7 +1502,7 @@ theend:      fclose(fp);    }    if (file_name != name) { -    free(file_name); +    xfree(file_name);    }  } @@ -1579,7 +1579,7 @@ static uint8_t *undo_read_string(bufinfo_T *bi, size_t len)  {    uint8_t *ptr = xmallocz(len);    if (len > 0 && !undo_read(bi, ptr, len)) { -    free(ptr); +    xfree(ptr);      return NULL;    }    return ptr; @@ -2107,9 +2107,9 @@ static void u_undoredo(int undo)            ml_replace((linenr_T)1, uep->ue_array[i], TRUE);          else            ml_append(lnum, uep->ue_array[i], (colnr_T)0, FALSE); -        free(uep->ue_array[i]); +        xfree(uep->ue_array[i]);        } -      free((char_u *)uep->ue_array); +      xfree((char_u *)uep->ue_array);      }      /* adjust marks */ @@ -2668,7 +2668,7 @@ u_freeentries (  #ifdef U_DEBUG    uhp->uh_magic = 0;  #endif -  free((char_u *)uhp); +  xfree((char_u *)uhp);    --buf->b_u_numhead;  } @@ -2678,12 +2678,12 @@ u_freeentries (  static void u_freeentry(u_entry_T *uep, long n)  {    while (n > 0) -    free(uep->ue_array[--n]); -  free((char_u *)uep->ue_array); +    xfree(uep->ue_array[--n]); +  xfree((char_u *)uep->ue_array);  #ifdef U_DEBUG    uep->ue_magic = 0;  #endif -  free((char_u *)uep); +  xfree((char_u *)uep);  }  /* @@ -2723,7 +2723,7 @@ void u_saveline(linenr_T lnum)  void u_clearline(void)  {    if (curbuf->b_u_line_ptr != NULL) { -    free(curbuf->b_u_line_ptr); +    xfree(curbuf->b_u_line_ptr);      curbuf->b_u_line_ptr = NULL;      curbuf->b_u_line_lnum = 0;    } @@ -2756,7 +2756,7 @@ void u_undoline(void)    oldp = u_save_line(curbuf->b_u_line_lnum);    ml_replace(curbuf->b_u_line_lnum, curbuf->b_u_line_ptr, TRUE);    changed_bytes(curbuf->b_u_line_lnum, 0); -  free(curbuf->b_u_line_ptr); +  xfree(curbuf->b_u_line_ptr);    curbuf->b_u_line_ptr = oldp;    t = curbuf->b_u_line_colnr; @@ -2777,7 +2777,7 @@ void u_blockfree(buf_T *buf)      u_freeheader(buf, buf->b_u_oldhead, NULL);      assert(buf->b_u_oldhead != previous_oldhead);    } -  free(buf->b_u_line_ptr); +  xfree(buf->b_u_line_ptr);  }  /* diff --git a/src/nvim/window.c b/src/nvim/window.c index 9c56cc5b82..caa7ecc041 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -401,7 +401,7 @@ wingotofile:            beginline(BL_SOL | BL_FIX);          }        } -      free(ptr); +      xfree(ptr);      }      break; @@ -2065,7 +2065,7 @@ win_free_mem (    /* Remove the window and its frame from the tree of frames. */    frp = win->w_frame;    wp = winframe_remove(win, dirp, tp); -  free(frp); +  xfree(frp);    win_free(win, tp);    /* When deleting the current window of another tab page select a new @@ -2209,7 +2209,7 @@ winframe_remove (      if (frp2->fr_win != NULL)        frp2->fr_win->w_frame = frp2->fr_parent;      frp = frp2->fr_parent; -    free(frp2); +    xfree(frp2);      frp2 = frp->fr_parent;      if (frp2 != NULL && frp2->fr_layout == frp->fr_layout) { @@ -2230,7 +2230,7 @@ winframe_remove (            break;          }        } -      free(frp); +      xfree(frp);      }    } @@ -2914,7 +2914,7 @@ void free_tabpage(tabpage_T *tp) -  free(tp); +  xfree(tp);  }  /* @@ -2934,7 +2934,7 @@ int win_new_tabpage(int after)    /* Remember the current windows in this Tab page. */    if (leave_tabpage(curbuf, TRUE) == FAIL) { -    free(newtp); +    xfree(newtp);      return FAIL;    }    curtab = newtp; @@ -3528,7 +3528,7 @@ static void win_enter_ext(win_T *wp, bool undo_sync, int curwin_invalid, int tri      /* Window doesn't have a local directory and we are not in the global       * directory: Change to the global directory. */      ignored = os_chdir((char *)globaldir); -    free(globaldir); +    xfree(globaldir);      globaldir = NULL;      shorten_fnames(TRUE);    } @@ -3702,9 +3702,9 @@ win_free (    win_free_lsize(wp);    for (i = 0; i < wp->w_tagstacklen; ++i) -    free(wp->w_tagstack[i].tagname); +    xfree(wp->w_tagstack[i].tagname); -  free(wp->w_localdir); +  xfree(wp->w_localdir);    /* Remove the window from the b_wininfo lists, it may happen that the     * freed memory is re-used for another window. */ @@ -3721,7 +3721,7 @@ win_free (    qf_free_all(wp); -  free(wp->w_p_cc_cols); +  xfree(wp->w_p_cc_cols);    if (wp != aucmd_win)      win_remove(wp, tp); @@ -3729,7 +3729,7 @@ win_free (      wp->w_next = au_pending_free_win;      au_pending_free_win = wp;    } else { -    free(wp); +    xfree(wp);    }    unblock_autocmds(); @@ -3839,7 +3839,7 @@ void win_free_lsize(win_T *wp)  {    // TODO: why would wp be NULL here?    if (wp != NULL) { -    free(wp->w_lines); +    xfree(wp->w_lines);      wp->w_lines = NULL;    }  } @@ -5136,7 +5136,7 @@ static void clear_snapshot_rec(frame_T *fr)    if (fr != NULL) {      clear_snapshot_rec(fr->fr_next);      clear_snapshot_rec(fr->fr_child); -    free(fr); +    xfree(fr);    }  } @@ -5472,7 +5472,7 @@ int match_add(win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T *pos    return id;  fail: -  free(m); +  xfree(m);    return -1;  } @@ -5507,7 +5507,7 @@ int match_delete(win_T *wp, int id, int perr)    else      prev->next = cur->next;    vim_regfree(cur->match.regprog); -  free(cur->pattern); +  xfree(cur->pattern);    if (cur->pos.toplnum != 0) {      if (wp->w_buffer->b_mod_set) {        if (wp->w_buffer->b_mod_top > cur->pos.toplnum) { @@ -5524,7 +5524,7 @@ int match_delete(win_T *wp, int id, int perr)      }      rtype = VALID;    } -  free(cur); +  xfree(cur);    redraw_later(rtype);    return 0;  } @@ -5539,8 +5539,8 @@ void clear_matches(win_T *wp)    while (wp->w_match_head != NULL) {      m = wp->w_match_head->next;      vim_regfree(wp->w_match_head->match.regprog); -    free(wp->w_match_head->pattern); -    free(wp->w_match_head); +    xfree(wp->w_match_head->pattern); +    xfree(wp->w_match_head);      wp->w_match_head = m;    }    redraw_later(SOME_VALID);  | 
