From be3a4b6ca81c4e9dd3faa81dc01f53468ceed3ad Mon Sep 17 00:00:00 2001 From: Felipe Oliveira Carvalho Date: Mon, 9 Jun 2014 00:02:50 -0300 Subject: ga_growsize should be >= 1 I know it could be 0 sometimes. Running the tests with `assert(gap->ga_growsize > 0)` in ga_grow() crashes nvim while running the tests. - Add a setter for ga_growsize that checks whether the value passed is >=1 (log in case it's not) - log when ga_grow() tries to use a ga_growsize that's not >=1 - use GA_EMPTY_INIT_VALUE is many places --- src/nvim/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/nvim/menu.c') diff --git a/src/nvim/menu.c b/src/nvim/menu.c index 4d75bc1475..ad6bcc82da 100644 --- a/src/nvim/menu.c +++ b/src/nvim/menu.c @@ -1434,7 +1434,7 @@ typedef struct { char_u *to; /* translated name */ } menutrans_T; -static garray_T menutrans_ga = {0, 0, 0, 0, NULL}; +static garray_T menutrans_ga = GA_EMPTY_INIT_VALUE; /* * ":menutrans". -- cgit From 5ed74cfb7c67f79441343ec90548f333dad1729b Mon Sep 17 00:00:00 2001 From: Felipe Oliveira Carvalho Date: Wed, 11 Jun 2014 03:01:46 -0300 Subject: Introduce ga_append_via_ptr() and GA_APPEND_VIA_PTR() Similar to GA_APPEND(). Replaces this pattern: ga_grow(&ga, 1); item_type *p = ((item_type *)ga.ga_data) + ga.ga_len; p->field1 = v1; p->field2 = v2; ga.ga_len++; --- src/nvim/menu.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'src/nvim/menu.c') diff --git a/src/nvim/menu.c b/src/nvim/menu.c index ad6bcc82da..ab5c1569dc 100644 --- a/src/nvim/menu.c +++ b/src/nvim/menu.c @@ -1444,7 +1444,6 @@ static garray_T menutrans_ga = GA_EMPTY_INIT_VALUE; void ex_menutranslate(exarg_T *eap) { char_u *arg = eap->arg; - menutrans_T *tp; char_u *from, *from_noamp, *to; if (menutrans_ga.ga_itemsize == 0) @@ -1454,7 +1453,7 @@ void ex_menutranslate(exarg_T *eap) * ":menutrans clear": clear all translations. */ if (STRNCMP(arg, "clear", 5) == 0 && ends_excmd(*skipwhite(arg + 5))) { - tp = (menutrans_T *)menutrans_ga.ga_data; + menutrans_T *tp = (menutrans_T *)menutrans_ga.ga_data; for (int i = 0; i < menutrans_ga.ga_len; ++i) { free(tp[i].from); free(tp[i].from_noamp); @@ -1473,8 +1472,6 @@ void ex_menutranslate(exarg_T *eap) if (arg == to) EMSG(_(e_invarg)); else { - ga_grow(&menutrans_ga, 1); - tp = (menutrans_T *)menutrans_ga.ga_data; from = vim_strsave(from); from_noamp = menu_text(from, NULL, NULL); to = vim_strnsave(to, (int)(arg - to)); @@ -1483,10 +1480,10 @@ void ex_menutranslate(exarg_T *eap) menu_translate_tab_and_shift(to); menu_unescape_name(from); menu_unescape_name(to); - tp[menutrans_ga.ga_len].from = from; - tp[menutrans_ga.ga_len].from_noamp = from_noamp; - tp[menutrans_ga.ga_len].to = to; - ++menutrans_ga.ga_len; + menutrans_T* tp = GA_APPEND_VIA_PTR(menutrans_T, &menutrans_ga); + tp->from = from; + tp->from_noamp = from_noamp; + tp->to = to; } else { free(from); free(from_noamp); -- cgit