X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftui%2Ftui-source.c;h=e6cc0dbc1a3dcf6ec08a0e5b4d7c10d9d31f8f4f;hb=9923f347c4e4b9ed710de3404444cf46b04135a0;hp=f08bd88aeffa2dcfa6615e7a74cfb5dcf2996290;hpb=017f982820d408fb49657b9b9b8f45a9616c5f21;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index f08bd88aef..e6cc0dbc1a 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -123,10 +123,13 @@ copy_source_line (const char **ptr, int line_no, int first_col, /* Function to display source in the source window. */ enum tui_status -tui_set_source_content (tui_source_window_base *win_info, - struct symtab *s, - int line_no) +tui_source_window::set_contents (struct gdbarch *arch, + struct symtab *s, + struct tui_line_or_address line_or_addr) { + gdb_assert (line_or_addr.loa == LOA_LINE); + int line_no = line_or_addr.u.line_no; + enum tui_status ret = TUI_FAILURE; if (s != NULL) @@ -134,10 +137,10 @@ tui_set_source_content (tui_source_window_base *win_info, int line_width, nlines; ret = TUI_SUCCESS; - line_width = win_info->width - 1; + line_width = width - TUI_EXECINFO_SIZE - 1; /* Take hilite (window border) into account, when calculating the number of lines. */ - nlines = (line_no + (win_info->height - 2)) - line_no; + nlines = (line_no + (height - 2)) - line_no; std::string srclines; if (!g_source_cache.get_source_lines (s, line_no, line_no + nlines, @@ -150,28 +153,25 @@ tui_set_source_content (tui_source_window_base *win_info, = tui_locator_win_info_ptr (); const char *s_filename = symtab_to_filename_for_display (s); - xfree (win_info->title); - win_info->title = xstrdup (s_filename); + title = s_filename; - xfree (win_info->fullname); - win_info->fullname = xstrdup (symtab_to_fullname (s)); + fullname = make_unique_xstrdup (symtab_to_fullname (s)); cur_line = 0; - win_info->gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); - win_info->start_line_or_addr.loa = LOA_LINE; - cur_line_no = win_info->start_line_or_addr.u.line_no = line_no; + gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); + start_line_or_addr.loa = LOA_LINE; + cur_line_no = start_line_or_addr.u.line_no = line_no; const char *iter = srclines.c_str (); - win_info->content.resize (nlines); + content.resize (nlines); while (cur_line < nlines) { struct tui_source_element *element - = &win_info->content[cur_line]; + = &content[cur_line]; std::string text; if (*iter != '\0') - text = copy_source_line (&iter, cur_line_no, - win_info->horizontal_offset, + text = copy_source_line (&iter, cur_line_no, horizontal_offset, line_width); /* Set whether element is the execution point @@ -179,13 +179,11 @@ tui_set_source_content (tui_source_window_base *win_info, element->line_or_addr.loa = LOA_LINE; element->line_or_addr.u.line_no = cur_line_no; element->is_exec_point - = (filename_cmp (locator->full_name, + = (filename_cmp (locator->full_name.c_str (), symtab_to_fullname (s)) == 0 && cur_line_no == locator->line_no); - xfree (win_info->content[cur_line].line); - win_info->content[cur_line].line - = xstrdup (text.c_str ()); + content[cur_line].line.reset (xstrdup (text.c_str ())); cur_line++; cur_line_no++; @@ -200,12 +198,12 @@ tui_set_source_content (tui_source_window_base *win_info, /* Function to display source in the source window. This function initializes the horizontal scroll to 0. */ void -tui_show_symtab_source (tui_source_window_base *win_info, - struct gdbarch *gdbarch, struct symtab *s, - struct tui_line_or_address line) +tui_source_window::show_symtab_source (struct gdbarch *gdbarch, + struct symtab *s, + struct tui_line_or_address line) { - win_info->horizontal_offset = 0; - win_info->update_source_window_as_is (gdbarch, s, line); + horizontal_offset = 0; + update_source_window_as_is (gdbarch, s, line); } @@ -215,7 +213,7 @@ bool tui_source_window::showing_source_p (const char *fullname) const { return (!content.empty () - && (filename_cmp (tui_locator_win_info_ptr ()->full_name, + && (filename_cmp (tui_locator_win_info_ptr ()->full_name.c_str (), fullname) == 0)); } @@ -277,7 +275,7 @@ tui_source_window::location_matches_p (struct bp_location *loc, int line_no) return (content[line_no].line_or_addr.loa == LOA_LINE && content[line_no].line_or_addr.u.line_no == loc->line_number && loc->symtab != NULL - && filename_cmp (fullname, + && filename_cmp (fullname.get (), symtab_to_fullname (loc->symtab)) == 0); } @@ -309,7 +307,7 @@ tui_source_window::maybe_update (struct frame_info *fi, symtab_and_line sal, start_line = 1; bool source_already_displayed = (sal.symtab != 0 - && showing_source_p (fullname)); + && showing_source_p (fullname.get ())); struct tui_line_or_address l;