Module Name: src Committed By: christos Date: Sun Dec 17 17:49:04 UTC 2017
Modified Files: src/external/gpl3/gdb/dist/gdb/tui: tui-data.c tui-wingeneral.c tui-winsource.c Log Message: Don't core dump when the window is too small XXX: feed upstream To generate a diff of this commit: cvs rdiff -u -r1.1.1.7 -r1.2 src/external/gpl3/gdb/dist/gdb/tui/tui-data.c \ src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c \ src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl3/gdb/dist/gdb/tui/tui-data.c diff -u src/external/gpl3/gdb/dist/gdb/tui/tui-data.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/tui/tui-data.c:1.2 --- src/external/gpl3/gdb/dist/gdb/tui/tui-data.c:1.1.1.7 Tue Nov 28 13:18:30 2017 +++ src/external/gpl3/gdb/dist/gdb/tui/tui-data.c Sun Dec 17 12:49:04 2017 @@ -576,6 +576,9 @@ tui_alloc_content (int num_elements, enu struct tui_win_element *element_block_ptr; int i; + if (num_elements <= 0) + return NULL; + content = XNEWVEC (struct tui_win_element *, num_elements); /* Index: src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c diff -u src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c:1.2 --- src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c:1.1.1.7 Tue Nov 28 13:18:30 2017 +++ src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c Sun Dec 17 12:49:04 2017 @@ -247,32 +247,35 @@ tui_make_all_invisible (void) make_all_visible (0); } +static void +tui_refresh_wi(struct tui_gen_win_info *wi) +{ + if (wi == NULL || wi->handle == NULL || !wi->is_visible) + return; + + touchwin (wi->handle); + tui_refresh_win (wi); +} + /* Function to refresh all the windows currently displayed. */ void tui_refresh_all (struct tui_win_info **list) { int type; - struct tui_gen_win_info *locator = tui_locator_win_info_ptr (); for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++) { - if (list[type] && list[type]->generic.is_visible) + if (!list[type] || !list[type]->generic.is_visible) + continue; + if (type == SRC_WIN || type == DISASSEM_WIN) { - if (type == SRC_WIN || type == DISASSEM_WIN) - { - touchwin (list[type]->detail.source_info.execution_info->handle); - tui_refresh_win (list[type]->detail.source_info.execution_info); - } - touchwin (list[type]->generic.handle); - tui_refresh_win (&list[type]->generic); + tui_refresh_wi (list[type]->detail.source_info.execution_info); } + tui_refresh_wi (&list[type]->generic); } - if (locator->is_visible) - { - touchwin (locator->handle); - tui_refresh_win (locator); - } + + tui_refresh_wi (tui_locator_win_info_ptr ()); } Index: src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c diff -u src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c:1.2 --- src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c:1.1.1.7 Tue Nov 28 13:18:30 2017 +++ src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c Sun Dec 17 12:49:04 2017 @@ -559,6 +559,9 @@ tui_show_exec_info_content (struct tui_w = win_info->detail.source_info.execution_info; int cur_line; + if (exec_info->handle == NULL) + return; + werase (exec_info->handle); tui_refresh_win (exec_info); for (cur_line = 1; (cur_line <= exec_info->content_size); cur_line++) @@ -578,6 +581,9 @@ tui_erase_exec_info_content (struct tui_ struct tui_gen_win_info *exec_info = win_info->detail.source_info.execution_info; + if (exec_info->handle == NULL) + return; + werase (exec_info->handle); tui_refresh_win (exec_info); }