diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2022-04-17 09:20:46 +0200 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2022-04-17 09:20:46 +0200 |
commit | 0af960dbde56d5d950997250acd4e53eb16223a5 (patch) | |
tree | ba6c1231d951c2b2f893f206febc47e0fe145498 /src | |
parent | 07b54a9932d7a59879f881167544e891cd82e4f5 (diff) | |
download | weechat-0af960dbde56d5d950997250acd4e53eb16223a5.zip |
core: use dynamic string functions to build bar window content
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/gui-bar-window.c | 117 |
1 files changed, 41 insertions, 76 deletions
diff --git a/src/gui/gui-bar-window.c b/src/gui/gui-bar-window.c index 499cc8593..f87ee210b 100644 --- a/src/gui/gui-bar-window.c +++ b/src/gui/gui-bar-window.c @@ -680,14 +680,14 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, { enum t_gui_bar_filling filling; const char *ptr_content; - char *content, *content2, str_reinit_color[32]; + char **content, *content2, str_reinit_color[32]; char str_reinit_color_space[32], str_reinit_color_space_start_line[32]; char str_start_item[32]; char *item_value, *item_value2, ****split_items, **linear_items; - int index_content, content_length, i, j, k, sub, index; + int i, j, k, sub, index; int at_least_one_item, first_sub_item; - int length_reinit_color_space, length_start_item, length; - int max_length, max_length_screen; + int length_reinit_color, length_reinit_color_space, length_start_item; + int length, max_length, max_length_screen; int total_items, columns, lines; if (!bar_window @@ -700,6 +700,7 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, snprintf (str_reinit_color, sizeof (str_reinit_color), "%c", GUI_COLOR_RESET_CHAR); + length_reinit_color = strlen (str_reinit_color); snprintf (str_reinit_color_space, sizeof (str_reinit_color_space), "%c ", @@ -721,10 +722,7 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, GUI_COLOR_BAR_START_ITEM); length_start_item = strlen (str_start_item); - content_length = 1; - content = malloc (content_length); - if (content) - content[0] = '\0'; + content = string_dyn_alloc (256); filling = gui_bar_get_filling (bar_window->bar); at_least_one_item = 0; switch (filling) @@ -756,37 +754,38 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, } } else - item_value = NULL; - - content_length += ((filling == GUI_BAR_FILLING_HORIZONTAL) ? length_start_item : 0) + - length_reinit_color_space + - strlen ((item_value) ? item_value : ptr_content); - content2 = realloc (content, content_length); - if (!content2) { - if (content) - free (content); - return NULL; + item_value = NULL; } - content = content2; if (at_least_one_item && first_sub_item) { /* first sub item: insert space after last item */ if (filling == GUI_BAR_FILLING_HORIZONTAL) - strcat (content, str_reinit_color_space); + { + string_dyn_concat (content, + str_reinit_color_space, + length_reinit_color_space); + } else - strcat (content, "\n"); + { + string_dyn_concat (content, "\n", -1); + } } else { - strcat (content, str_reinit_color); + string_dyn_concat (content, str_reinit_color, + length_reinit_color); } if (filling == GUI_BAR_FILLING_HORIZONTAL) - strcat (content, str_start_item); - strcat (content, - (item_value) ? item_value : ptr_content); + { + string_dyn_concat (content, str_start_item, + length_start_item); + } + string_dyn_concat ( + content, + (item_value) ? item_value : ptr_content, + -1); first_sub_item = 0; - if (item_value) free (item_value); at_least_one_item = 1; @@ -795,33 +794,14 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, { if (filling == GUI_BAR_FILLING_HORIZONTAL) { - content_length += length_start_item; - content2 = realloc (content, content_length); - if (!content2) - { - if (content) - free (content); - return NULL; - } - content = content2; - strcat (content, str_start_item); + string_dyn_concat (content, str_start_item, + length_start_item); } } } } if (filling == GUI_BAR_FILLING_HORIZONTAL) - { - content_length += length_start_item; - content2 = realloc (content, content_length); - if (!content2) - { - if (content) - free (content); - return NULL; - } - content = content2; - strcat (content, str_start_item); - } + string_dyn_concat (content, str_start_item, length_start_item); break; case GUI_BAR_FILLING_COLUMNS_HORIZONTAL: /* items in columns, with horizontal filling */ case GUI_BAR_FILLING_COLUMNS_VERTICAL: /* items in columns, with vertical filling */ @@ -914,21 +894,6 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, } /* build content with lines and columns */ - content_length = 1 + (lines * - ((columns * - (max_length + max_length_screen + length_reinit_color_space)) + 1)); - content2 = realloc (content, content_length); - if (!content2) - { - if (content) - free (content); - free (split_items); - free (linear_items); - return NULL; - } - content = content2; - content[0] = '\0'; - index_content = 0; for (i = 0; i < lines; i++) { for (j = 0; j < columns; j++) @@ -942,30 +907,27 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, { for (k = 0; k < max_length_screen; k++) { - content[index_content++] = ' '; + string_dyn_concat (content, " ", -1); } } else { - strcpy (content + index_content, linear_items[index]); - index_content += strlen (linear_items[index]); + string_dyn_concat (content, linear_items[index], -1); length = max_length_screen - gui_chat_strlen_screen (linear_items[index]); for (k = 0; k < length; k++) { - content[index_content++] = ' '; + string_dyn_concat (content, " ", -1); } } if (j < columns - 1) { - strcpy (content + index_content, - str_reinit_color_space); - index_content += length_reinit_color_space; + string_dyn_concat (content, str_reinit_color_space, + length_reinit_color_space); } } - content[index_content++] = '\n'; + string_dyn_concat (content, "\n", -1); } - content[index_content] = '\0'; free (linear_items); } @@ -988,13 +950,16 @@ gui_bar_window_content_get_with_filling (struct t_gui_bar_window *bar_window, break; } - if (content_length == 1) + if (!*content[0]) { - free (content); - content = NULL; + string_dyn_free (content, 1); + return NULL; } - return content; + content2 = *content; + string_dyn_free (content, 0); + + return content2; } /* |