daily update
[deliverable/binutils-gdb.git] / bfd / corefile.c
index adc5b4ac88ee859bc66b3195773ea974a88070b3..602de911a2c5c17d65bfb4b8b889d75e261e8f74 100644 (file)
@@ -1,5 +1,5 @@
 /* Core file generic interface routines for BFD.
-   Copyright 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2002, 2003
+   Copyright 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2002, 2003, 2005
    Free Software Foundation, Inc.
    Written by Cygnus Support.
 
@@ -107,3 +107,59 @@ core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
   return BFD_SEND (core_bfd, _core_file_matches_executable_p,
                   (core_bfd, exec_bfd));
 }
+
+/*
+FUNCTION
+        generic_core_file_matches_executable_p
+
+SYNOPSIS
+        bfd_boolean generic_core_file_matches_executable_p
+          (bfd *core_bfd, bfd *exec_bfd);
+
+DESCRIPTION
+        Return TRUE if the core file attached to @var{core_bfd}
+        was generated by a run of the executable file attached
+        to @var{exec_bfd}.  The match is based on executable
+        basenames only.
+
+        Note: When not able to determine the core file failing
+        command or the executable name, we still return TRUE even
+        though we're not sure that core file and executable match.
+        This is to avoid generating a false warning in situations
+        where we really don't know whether they match or not.
+*/
+
+bfd_boolean
+generic_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd)
+{
+  char *exec;
+  char *core;
+  char *last_slash;
+
+  if (exec_bfd == NULL || core_bfd == NULL)
+    return TRUE;
+
+  /* The cast below is to avoid a compiler warning due to the assignment
+     of the const char * returned by bfd_core_file_failing_command to a
+     non-const char *.  In this case, the assignement does not lead to
+     breaking the const, as we're only reading the string.  */
+     
+  core = (char *) bfd_core_file_failing_command (core_bfd);
+  if (core == NULL)
+    return TRUE;
+
+  exec = bfd_get_filename (exec_bfd);
+  if (exec == NULL)
+    return TRUE;
+
+  last_slash = strrchr (core, '/');
+  if (last_slash != NULL)
+    core = last_slash + 1;
+
+  last_slash = strrchr (exec, '/');
+  if (last_slash != NULL)
+    exec = last_slash + 1;
+  
+  return strcmp (exec, core) == 0;
+}
+
This page took 0.024742 seconds and 4 git commands to generate.