# HG changeset patch # User Bram Moolenaar # Date 1678212004 -3600 # Node ID 97255d9096544579d1308038217b65aa567f5961 # Parent 241396c61b3633d2026f10c08aba285b01ae9526 patch 9.0.1391: "clear" macros are not always used Commit: https://github.com/vim/vim/commit/960dcbd098c761dd623bec9492d5391ff6e8dceb Author: Yegappan Lakshmanan Date: Tue Mar 7 17:45:11 2023 +0000 patch 9.0.1391: "clear" macros are not always used Problem: "clear" macros are not always used. Solution: Use ALLOC_ONE, VIM_CLEAR, CLEAR_POINTER and CLEAR_FIELD in more places. (Yegappan Lakshmanan, closes #12104) diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -2375,8 +2375,7 @@ free_buf_options( clear_string_option(&buf->b_p_isk); #ifdef FEAT_VARTABS clear_string_option(&buf->b_p_vsts); - vim_free(buf->b_p_vsts_nopaste); - buf->b_p_vsts_nopaste = NULL; + VIM_CLEAR(buf->b_p_vsts_nopaste); VIM_CLEAR(buf->b_p_vsts_array); clear_string_option(&buf->b_p_vts); VIM_CLEAR(buf->b_p_vts_array); diff --git a/src/channel.c b/src/channel.c --- a/src/channel.c +++ b/src/channel.c @@ -109,7 +109,7 @@ fd_write(sock_T fd, char *buf, size_t le size = (DWORD)todo; // If the pipe overflows while the job does not read the data, // WriteFile() will block forever. This abandons the write. - memset(&ov, 0, sizeof(ov)); + CLEAR_FIELD(ov); nwrite = 0; if (!WriteFile(h, buf + done, size, &nwrite, &ov)) { diff --git a/src/debugger.c b/src/debugger.c --- a/src/debugger.c +++ b/src/debugger.c @@ -97,14 +97,12 @@ do_debug(char_u *cmd) if (debug_oldval != NULL) { smsg(_("Oldval = \"%s\""), debug_oldval); - vim_free(debug_oldval); - debug_oldval = NULL; + VIM_CLEAR(debug_oldval); } if (debug_newval != NULL) { smsg(_("Newval = \"%s\""), debug_newval); - vim_free(debug_newval); - debug_newval = NULL; + VIM_CLEAR(debug_newval); } sname = estack_sfile(ESTACK_NONE); if (sname != NULL) diff --git a/src/diff.c b/src/diff.c --- a/src/diff.c +++ b/src/diff.c @@ -726,10 +726,7 @@ diff_redraw( clear_diffin(diffin_T *din) { if (din->din_fname == NULL) - { - vim_free(din->din_mmfile.ptr); - din->din_mmfile.ptr = NULL; - } + VIM_CLEAR(din->din_mmfile.ptr); else mch_remove(din->din_fname); } diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -4354,7 +4354,7 @@ f_expandcmd(typval_T *argvars, typval_T rettv->v_type = VAR_STRING; cmdstr = vim_strsave(tv_get_string(&argvars[0])); - memset(&eap, 0, sizeof(eap)); + CLEAR_FIELD(eap); eap.cmd = cmdstr; eap.arg = cmdstr; eap.argt |= EX_NOSPC; diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -4382,7 +4382,7 @@ buf_reload(buf_T *buf, int orig_mode, in // file, not reset the syntax highlighting, clear marks, diff status, etc. // Force the fileformat and encoding to be the same. if (reload_options) - memset(&ea, 0, sizeof(ea)); + CLEAR_FIELD(ea); else prepped = prep_exarg(&ea, buf); diff --git a/src/gui_photon.c b/src/gui_photon.c --- a/src/gui_photon.c +++ b/src/gui_photon.c @@ -1400,7 +1400,7 @@ gui_mch_browse( char_u *open_text = NULL; flags = 0; - memset(&file, 0, sizeof(file)); + CLEAR_FIELD(file); default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1); if (default_path != NULL) @@ -1578,8 +1578,8 @@ gui_mch_dialog( PtModalCtrl_t modal_ctrl; PtDialogInfo_t di; - memset(&di, 0, sizeof(di)); - memset(&modal_ctrl, 0, sizeof(modal_ctrl)); + CLEAR_FIELD(di); + CLEAR_FIELD(modal_ctrl); n = 0; PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0); @@ -1707,7 +1707,7 @@ gui_mch_iconify(void) { PhWindowEvent_t event; - memset(&event, 0, sizeof (event)); + CLEAR_FIELD(event); event.event_f = Ph_WM_HIDE; event.event_state = Ph_WM_EVSTATE_HIDE; event.rid = PtWidgetRid(gui.vimWindow); @@ -1723,7 +1723,7 @@ gui_mch_set_foreground(void) { PhWindowEvent_t event; - memset(&event, 0, sizeof (event)); + CLEAR_FIELD(event); event.event_f = Ph_WM_TOFRONT; event.event_state = Ph_WM_EVSTATE_FFRONT; event.rid = PtWidgetRid(gui.vimWindow); diff --git a/src/gui_w32.c b/src/gui_w32.c --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -8387,7 +8387,7 @@ make_tooltip(BalloonEval *beval, char *t TOOLINFOW *pti; RECT rect; - pti = alloc(sizeof(TOOLINFOW)); + pti = ALLOC_ONE(TOOLINFOW); if (pti == NULL) return; @@ -8655,7 +8655,7 @@ netbeans_draw_multisign_indicator(int ro // TODO: at the moment, this is just a copy of test_gui_mouse_event. // But, we could instead generate actual Win32 mouse event messages, -// ie. to make it consistent wih test_gui_w32_sendevent_keyboard. +// ie. to make it consistent with test_gui_w32_sendevent_keyboard. static int test_gui_w32_sendevent_mouse(dict_T *args) { diff --git a/src/hardcopy.c b/src/hardcopy.c --- a/src/hardcopy.c +++ b/src/hardcopy.c @@ -2721,14 +2721,10 @@ mch_print_begin(prt_settings_T *psetting struct prt_ps_resource_S *res_cmap; int retval = FALSE; - res_prolog = (struct prt_ps_resource_S *) - alloc(sizeof(struct prt_ps_resource_S)); - res_encoding = (struct prt_ps_resource_S *) - alloc(sizeof(struct prt_ps_resource_S)); - res_cidfont = (struct prt_ps_resource_S *) - alloc(sizeof(struct prt_ps_resource_S)); - res_cmap = (struct prt_ps_resource_S *) - alloc(sizeof(struct prt_ps_resource_S)); + res_prolog = ALLOC_ONE(struct prt_ps_resource_S); + res_encoding = ALLOC_ONE(struct prt_ps_resource_S); + res_cidfont = ALLOC_ONE(struct prt_ps_resource_S); + res_cmap = ALLOC_ONE(struct prt_ps_resource_S); if (res_prolog == NULL || res_encoding == NULL || res_cidfont == NULL || res_cmap == NULL) goto theend; diff --git a/src/indent.c b/src/indent.c --- a/src/indent.c +++ b/src/indent.c @@ -74,8 +74,7 @@ tabstop_set(char_u *var, int **array) if (n <= 0 || n > TABSTOP_MAX) { semsg(_(e_invalid_argument_str), cp); - vim_free(*array); - *array = NULL; + VIM_CLEAR(*array); return FAIL; } (*array)[t++] = n; diff --git a/src/list.c b/src/list.c --- a/src/list.c +++ b/src/list.c @@ -1687,7 +1687,7 @@ init_static_list(staticList10_T *sl) list_T *l = &sl->sl_list; int i; - memset(sl, 0, sizeof(staticList10_T)); + CLEAR_POINTER(sl); l->lv_first = &sl->sl_items[0]; l->lv_u.mat.lv_last = &sl->sl_items[9]; l->lv_refcount = DO_NOT_FREE_CNT; diff --git a/src/mbyte.c b/src/mbyte.c --- a/src/mbyte.c +++ b/src/mbyte.c @@ -5634,8 +5634,7 @@ f_setcellwidths(typval_T *argvars, typva if (l->lv_len == 0) { // Clearing the table. - vim_free(cw_table); - cw_table = NULL; + VIM_CLEAR(cw_table); cw_table_size = 0; return; } diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -7147,7 +7147,7 @@ buf_copy_options(buf_T *buf, int flags) { buf->b_p_isk = save_p_isk; #ifdef FEAT_VARTABS - if (p_vts && p_vts != empty_option && !buf->b_p_vts_array) + if (p_vts && *p_vts != NUL && !buf->b_p_vts_array) (void)tabstop_set(p_vts, &buf->b_p_vts_array); else buf->b_p_vts_array = NULL; @@ -7163,7 +7163,7 @@ buf_copy_options(buf_T *buf, int flags) #ifdef FEAT_VARTABS buf->b_p_vts = vim_strsave(p_vts); COPY_OPT_SCTX(buf, BV_VTS); - if (p_vts && p_vts != empty_option && !buf->b_p_vts_array) + if (p_vts && *p_vts != NUL && !buf->b_p_vts_array) (void)tabstop_set(p_vts, &buf->b_p_vts_array); else buf->b_p_vts_array = NULL; diff --git a/src/optionstr.c b/src/optionstr.c --- a/src/optionstr.c +++ b/src/optionstr.c @@ -2714,13 +2714,7 @@ did_set_varsofttabstop(optset_T *args) char_u *cp; if (!((*varp)[0]) || ((*varp)[0] == '0' && !((*varp)[1]))) - { - if (curbuf->b_p_vsts_array) - { - vim_free(curbuf->b_p_vsts_array); - curbuf->b_p_vsts_array = 0; - } - } + VIM_CLEAR(curbuf->b_p_vsts_array); else { for (cp = *varp; *cp; ++cp) @@ -2755,13 +2749,7 @@ did_set_vartabstop(optset_T *args) char_u *cp; if (!((*varp)[0]) || ((*varp)[0] == '0' && !((*varp)[1]))) - { - if (curbuf->b_p_vts_array) - { - vim_free(curbuf->b_p_vts_array); - curbuf->b_p_vts_array = NULL; - } - } + VIM_CLEAR(curbuf->b_p_vts_array); else { for (cp = *varp; *cp; ++cp) diff --git a/src/os_qnx.c b/src/os_qnx.c --- a/src/os_qnx.c +++ b/src/os_qnx.c @@ -24,7 +24,7 @@ void qnx_init(void) #if defined(FEAT_GUI_PHOTON) PhChannelParms_t parms; - memset(&parms, 0, sizeof(parms)); + CLEAR_FIELD(parms); parms.flags = Ph_DYNAMIC_BUFFER; is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE; @@ -124,7 +124,7 @@ clip_mch_set_selection(Clipboard_T *cbd) if (text_clip && vim_clip) { - memset(clip_header, 0, sizeof(clip_header)); + CLEAR_FIELD(clip_header); STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8); clip_header[0].length = sizeof(vim_clip); diff --git a/src/os_win32.c b/src/os_win32.c --- a/src/os_win32.c +++ b/src/os_win32.c @@ -3764,8 +3764,7 @@ mch_dirname( if (STRLEN(p) >= (size_t)len) { // long path name is too long, fall back to short one - vim_free(p); - p = NULL; + VIM_CLEAR(p); } } if (p == NULL) @@ -8073,8 +8072,7 @@ copy_extattr(char_u *from, char_u *to) if (pNtQueryEaFile(h, &iosb, ea, eainfo.EaSize, FALSE, NULL, 0, NULL, TRUE) != STATUS_SUCCESS) { - vim_free(ea); - ea = NULL; + VIM_CLEAR(ea); } } } diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -3568,8 +3568,7 @@ popup_update_mask(win_T *wp, int width, if (wp->w_popup_mask == NULL || width == 0 || height == 0) { - vim_free(wp->w_popup_mask_cells); - wp->w_popup_mask_cells = NULL; + VIM_CLEAR(wp->w_popup_mask_cells); return; } if (wp->w_popup_mask_cells != NULL diff --git a/src/quickfix.c b/src/quickfix.c --- a/src/quickfix.c +++ b/src/quickfix.c @@ -6213,7 +6213,7 @@ vgr_process_args( { char_u *p; - vim_memset(args, 0, sizeof(*args)); + CLEAR_POINTER(args); args->regmatch.regprog = NULL; args->qf_title = vim_strsave(qf_cmdtitle(*eap->cmdlinep)); diff --git a/src/search.c b/src/search.c --- a/src/search.c +++ b/src/search.c @@ -3202,7 +3202,7 @@ update_search_stat( proftime_T start; #endif - vim_memset(stat, 0, sizeof(searchstat_T)); + CLEAR_POINTER(stat); if (dirc == 0 && !recompute && !EMPTY_POS(lastpos)) { diff --git a/src/syntax.c b/src/syntax.c --- a/src/syntax.c +++ b/src/syntax.c @@ -6287,7 +6287,7 @@ ex_ownsyntax(exarg_T *eap) if (curwin->w_s == &curwin->w_buffer->b_s) { curwin->w_s = ALLOC_ONE(synblock_T); - memset(curwin->w_s, 0, sizeof(synblock_T)); + CLEAR_POINTER(curwin->w_s); hash_init(&curwin->w_s->b_keywtab); hash_init(&curwin->w_s->b_keywtab_ic); #ifdef FEAT_SPELL diff --git a/src/textprop.c b/src/textprop.c --- a/src/textprop.c +++ b/src/textprop.c @@ -1718,8 +1718,7 @@ f_prop_remove(typval_T *argvars, typval_ if (ii < gap->ga_len) { char_u **p = ((char_u **)gap->ga_data) + ii; - vim_free(*p); - *p = NULL; + VIM_CLEAR(*p); did_remove_text = TRUE; } } diff --git a/src/userfunc.c b/src/userfunc.c --- a/src/userfunc.c +++ b/src/userfunc.c @@ -5155,15 +5155,13 @@ define_function( fudi.fd_di = dictitem_alloc(fudi.fd_newkey); if (fudi.fd_di == NULL) { - vim_free(fp); - fp = NULL; + VIM_CLEAR(fp); goto erret; } if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL) { vim_free(fudi.fd_di); - vim_free(fp); - fp = NULL; + VIM_CLEAR(fp); goto erret; } } @@ -5292,10 +5290,7 @@ errret_2: clear_type_list(&fp->uf_type_list); } if (free_fp) - { - vim_free(fp); - fp = NULL; - } + VIM_CLEAR(fp); ret_free: ga_clear_strings(&argtypes); vim_free(fudi.fd_newkey); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1391, +/**/ 1390, /**/ 1389,