# HG changeset patch # User Christian Brabandt # Date 1518175807 -3600 # Node ID ed51483e9971400ec1b88b6b004679ddc5ce7333 # Parent 13e035335212cd219a5f2ef9db9ff6a53f955896 patch 8.0.1481: clearing a pointer takes two lines commit https://github.com/vim/vim/commit/1567558b20575e1b17c3808c6bd622b0b4810e36 Author: Bram Moolenaar Date: Fri Feb 9 12:29:56 2018 +0100 patch 8.0.1481: clearing a pointer takes two lines Problem: Clearing a pointer takes two lines. Solution: Add vim_clear() to free and clear the pointer. diff --git a/src/edit.c b/src/edit.c --- a/src/edit.c +++ b/src/edit.c @@ -2927,8 +2927,7 @@ ins_compl_del_pum(void) if (compl_match_array != NULL) { pum_undisplay(); - vim_free(compl_match_array); - compl_match_array = NULL; + vim_clear((void **)&compl_match_array); } } @@ -3430,10 +3429,8 @@ ins_compl_free(void) compl_T *match; int i; - vim_free(compl_pattern); - compl_pattern = NULL; - vim_free(compl_leader); - compl_leader = NULL; + vim_clear((void **)&compl_pattern); + vim_clear((void **)&compl_leader); if (compl_first_match == NULL) return; @@ -3465,13 +3462,10 @@ ins_compl_clear(void) compl_cont_status = 0; compl_started = FALSE; compl_matches = 0; - vim_free(compl_pattern); - compl_pattern = NULL; - vim_free(compl_leader); - compl_leader = NULL; + vim_clear((void **)&compl_pattern); + vim_clear((void **)&compl_leader); edit_submode_extra = NULL; - vim_free(compl_orig_text); - compl_orig_text = NULL; + vim_clear((void **)&compl_orig_text); compl_enter_selects = FALSE; /* clear v:completed_item */ set_vim_var_dict(VV_COMPLETED_ITEM, dict_alloc_lock(VAR_FIXED)); @@ -5574,10 +5568,8 @@ ins_complete(int c, int enable_pum) if (compl_orig_text == NULL || ins_compl_add(compl_orig_text, -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK) { - vim_free(compl_pattern); - compl_pattern = NULL; - vim_free(compl_orig_text); - compl_orig_text = NULL; + vim_clear((void **)&compl_pattern); + vim_clear((void **)&compl_orig_text); return FAIL; } @@ -7206,11 +7198,9 @@ set_last_insert(int c) void free_last_insert(void) { - vim_free(last_insert); - last_insert = NULL; + vim_clear((void **)&last_insert); # ifdef FEAT_INS_EXPAND - vim_free(compl_orig_text); - compl_orig_text = NULL; + vim_clear((void **)&compl_orig_text); # endif } #endif @@ -7838,8 +7828,7 @@ mb_replace_pop_ins(int cc) static void replace_flush(void) { - vim_free(replace_stack); - replace_stack = NULL; + vim_clear((void **)&replace_stack); replace_stack_len = 0; replace_stack_nr = 0; } diff --git a/src/misc2.c b/src/misc2.c --- a/src/misc2.c +++ b/src/misc2.c @@ -1836,6 +1836,19 @@ vim_free(void *x) } } +/* + * Like vim_free(), and also set the pointer to NULL. + */ + void +vim_clear(void **x) +{ + if (*x != NULL) + { + vim_free(*x); + *x = NULL; + } +} + #ifndef HAVE_MEMSET void * vim_memset(void *ptr, int c, size_t size) @@ -5173,8 +5186,8 @@ ff_wc_equal(char_u *s1, char_u *s2) prev2 = prev1; prev1 = c1; - i += MB_PTR2LEN(s1 + i); - j += MB_PTR2LEN(s2 + j); + i += MB_PTR2LEN(s1 + i); + j += MB_PTR2LEN(s2 + j); } return s1[i] == s2[j]; } @@ -5892,7 +5905,7 @@ pathcmp(const char *p, const char *q, in if (c2 == NUL) /* full match */ return 0; s = q; - i = j; + i = j; break; } diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro --- a/src/proto/misc2.pro +++ b/src/proto/misc2.pro @@ -46,6 +46,7 @@ void vim_strncpy(char_u *to, char_u *fro void vim_strcat(char_u *to, char_u *from, size_t tosize); int copy_option_part(char_u **option, char_u *buf, int maxlen, char *sep_chars); void vim_free(void *x); +void vim_clear(void **x); int vim_stricmp(char *s1, char *s2); int vim_strnicmp(char *s1, char *s2, size_t len); char_u *vim_strchr(char_u *string, int c); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1481, +/**/ 1480, /**/ 1479,