* ld-cris/expdyn1.d, ld-cris/expdyn5.d, ld-cris/expdyn6.d,
[deliverable/binutils-gdb.git] / gdb / source.c
index 6a91c6c688767c91143dfca587fa0358d8644a01..b1e9c387473f3b047379dc71b89515cc644fb091 100644 (file)
@@ -325,12 +325,12 @@ forget_cached_source_info (void)
        {
          if (s->line_charpos != NULL)
            {
-             xmfree (objfile->md, s->line_charpos);
+             xfree (s->line_charpos);
              s->line_charpos = NULL;
            }
          if (s->fullname != NULL)
            {
-             xmfree (objfile->md, s->fullname);
+             xfree (s->fullname);
              s->fullname = NULL;
            }
        }
@@ -636,12 +636,18 @@ is_regular_file (const char *name)
 /* Open a file named STRING, searching path PATH (dir names sep by some char)
    using mode MODE and protection bits PROT in the calls to open.
 
-   If TRY_CWD_FIRST, try to open ./STRING before searching PATH.
+   OPTS specifies the function behaviour in specific cases.
+
+   If OPF_TRY_CWD_FIRST, try to open ./STRING before searching PATH.
    (ie pretend the first element of PATH is ".").  This also indicates
    that a slash in STRING disables searching of the path (this is
    so that "exec-file ./foo" or "symbol-file ./foo" insures that you
    get that particular version of foo or an error message).
 
+   If OPTS has OPF_SEARCH_IN_PATH set, absolute names will also be
+   searched in path (we usually want this for source files but not for
+   executables).
+
    If FILENAME_OPENED is non-null, set it to a newly allocated string naming
    the actual file opened (this string will always start with a "/").  We
    have to take special pains to avoid doubling the "/" between the directory
@@ -654,7 +660,7 @@ is_regular_file (const char *name)
 /*  >>>> This should only allow files of certain types,
     >>>>  eg executable, non-directory */
 int
-openp (const char *path, int try_cwd_first, const char *string,
+openp (const char *path, int opts, const char *string,
        int mode, int prot,
        char **filename_opened)
 {
@@ -672,7 +678,7 @@ openp (const char *path, int try_cwd_first, const char *string,
   mode |= O_BINARY;
 #endif
 
-  if (try_cwd_first || IS_ABSOLUTE_PATH (string))
+  if ((opts & OPF_TRY_CWD_FIRST) || IS_ABSOLUTE_PATH (string))
     {
       int i;
 
@@ -690,11 +696,16 @@ openp (const char *path, int try_cwd_first, const char *string,
          fd = -1;
        }
 
-      for (i = 0; string[i]; i++)
-       if (IS_DIR_SEPARATOR (string[i]))
-         goto done;
+      if (!(opts & OPF_SEARCH_IN_PATH))
+       for (i = 0; string[i]; i++)
+         if (IS_DIR_SEPARATOR (string[i]))
+           goto done;
     }
 
+  /* /foo => foo, to avoid multiple slashes that Emacs doesn't like. */
+  while (IS_DIR_SEPARATOR(string[0]))
+    string++;
+
   /* ./foo => foo */
   while (string[0] == '.' && IS_DIR_SEPARATOR (string[1]))
     string += 2;
@@ -793,7 +804,8 @@ source_full_path_of (char *filename, char **full_pathname)
 {
   int fd;
 
-  fd = openp (source_path, 1, filename, O_RDONLY, 0, full_pathname);
+  fd = openp (source_path, OPF_TRY_CWD_FIRST | OPF_SEARCH_IN_PATH, filename,
+             O_RDONLY, 0, full_pathname);
   if (fd < 0)
     {
       *full_pathname = NULL;
@@ -839,7 +851,7 @@ find_and_open_source (struct objfile *objfile,
       if (result >= 0)
        return result;
       /* Didn't work -- free old one, try again. */
-      xmfree (objfile->md, *fullname);
+      xfree (*fullname);
       *fullname = NULL;
     }
 
@@ -864,13 +876,13 @@ find_and_open_source (struct objfile *objfile,
        }
     }
 
-  result = openp (path, 0, filename, OPEN_MODE, 0, fullname);
+  result = openp (path, OPF_SEARCH_IN_PATH, filename, OPEN_MODE, 0, fullname);
   if (result < 0)
     {
       /* Didn't work.  Try using just the basename. */
       p = lbasename (filename);
       if (p != filename)
-       result = openp (path, 0, p, OPEN_MODE, 0, fullname);
+       result = openp (path, OPF_SEARCH_IN_PATH, p, OPEN_MODE, 0, fullname);
     }
 
   if (result >= 0)
@@ -972,8 +984,7 @@ find_source_lines (struct symtab *s, int desc)
   long mtime = 0;
   int size;
 
-  line_charpos = (int *) xmmalloc (s->objfile->md,
-                                  lines_allocated * sizeof (int));
+  line_charpos = (int *) xmalloc (lines_allocated * sizeof (int));
   if (fstat (desc, &st) < 0)
     perror_with_name (s->filename);
 
@@ -1003,8 +1014,8 @@ find_source_lines (struct symtab *s, int desc)
              {
                lines_allocated *= 2;
                line_charpos =
-                 (int *) xmrealloc (s->objfile->md, (char *) line_charpos,
-                                    sizeof (int) * lines_allocated);
+                 (int *) xrealloc ((char *) line_charpos,
+                                   sizeof (int) * lines_allocated);
              }
            line_charpos[nlines++] = lseek (desc, 0, SEEK_CUR);
          }
@@ -1041,8 +1052,8 @@ find_source_lines (struct symtab *s, int desc)
              {
                lines_allocated *= 2;
                line_charpos =
-                 (int *) xmrealloc (s->objfile->md, (char *) line_charpos,
-                                    sizeof (int) * lines_allocated);
+                 (int *) xrealloc ((char *) line_charpos,
+                                   sizeof (int) * lines_allocated);
              }
            line_charpos[nlines++] = p - data;
          }
@@ -1052,8 +1063,7 @@ find_source_lines (struct symtab *s, int desc)
 #endif /* lseek linear.  */
   s->nlines = nlines;
   s->line_charpos =
-    (int *) xmrealloc (s->objfile->md, (char *) line_charpos,
-                      nlines * sizeof (int));
+    (int *) xrealloc ((char *) line_charpos, nlines * sizeof (int));
 
 }
 
@@ -1647,7 +1657,7 @@ The matching line number is also stored as the value of \"$_\".");
       add_com_alias ("?", "reverse-search", class_files, 0);
     }
 
-  add_show_from_set
+  deprecated_add_show_from_set
     (add_set_cmd ("listsize", class_support, var_uinteger,
                  (char *) &lines_to_list,
                  "Set number of source lines gdb will list by default.",
This page took 0.02587 seconds and 4 git commands to generate.