]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/source.c
gdb: New function to open source file and compute line charpos data
[thirdparty/binutils-gdb.git] / gdb / source.c
index 5fa55e2c16023fb4cc6fcba4511f9e660ff621c4..dae1801c1369c6950b115d0914efaed08ffb1004 100644 (file)
@@ -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)
 
 \f
 
-/* 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;
 }
 
+\f
+
 /* 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);