diff options
Diffstat (limited to 'gdb/source.c')
-rw-r--r-- | gdb/source.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/gdb/source.c b/gdb/source.c index 5fa55e2c160..dae1801c136 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1129,7 +1129,7 @@ symtab_to_filename_for_display (struct symtab *symtab) to be open on descriptor DESC. All set S->nlines to the number of such lines. */ -void +static void find_source_lines (struct symtab *s, int desc) { struct stat st; @@ -1196,28 +1196,30 @@ find_source_lines (struct symtab *s, int desc) -/* Get full pathname and line number positions for a symtab. - Set *FULLNAME to actual name of the file as found by `openp', - or to 0 if the file is not found. */ +/* See source.h. */ -static void -get_filename_and_charpos (struct symtab *s) +scoped_fd +open_source_file_with_line_charpos (struct symtab *s) { - scoped_fd desc = open_source_file (s); - if (desc.get () < 0) - return; - if (s->line_charpos == 0) - find_source_lines (s, desc.get ()); + scoped_fd fd (open_source_file (s)); + if (fd.get () < 0) + return fd; + + if (s->line_charpos == nullptr) + find_source_lines (s, fd.get ()); + return fd; } + + /* See source.h. */ int identify_source_line (struct symtab *s, int line, int mid_statement, CORE_ADDR pc) { - if (s->line_charpos == 0) - get_filename_and_charpos (s); + if (s->line_charpos == nullptr) + open_source_file_with_line_charpos (s); if (s->fullname == 0) return 0; if (line > s->nlines) @@ -1545,13 +1547,10 @@ search_command_helper (const char *regex, int from_tty, bool forward) if (current_source_symtab == 0) select_source_symtab (0); - scoped_fd desc = open_source_file (current_source_symtab); + scoped_fd desc (open_source_file_with_line_charpos (current_source_symtab)); if (desc.get () < 0) perror_with_name (symtab_to_filename_for_display (current_source_symtab)); - if (current_source_symtab->line_charpos == 0) - find_source_lines (current_source_symtab, desc.get ()); - int line = (forward ? last_line_listed + 1 : last_line_listed - 1); |