[OB] Correctly notice empty sysroots in solib_find_1

Message ID 1435228354-9667-1-git-send-email-gbenson@redhat.com
State New, archived
Headers

Commit Message

Gary Benson June 25, 2015, 10:32 a.m. UTC
  Hi all,

Some parts of solib_find_1 should only operate if the sysroot
is nonempty after processing, but the logic that checked this
happened before trailing slashes were stripped so empty but
non-NULL sysroots were possible.  This commit moves the logic
so it correctly notices all empty sysroots.

Pushed as obvious.

Cheers,
Gary

--
gdb/ChangeLog:

	* solib.c (solib_find_1): Set local variable sysroot to NULL if
	it is the empty string after trailing slashes have been stripped.
---
 gdb/ChangeLog |    5 +++++
 gdb/solib.c   |   18 +++++++++---------
 2 files changed, 14 insertions(+), 9 deletions(-)
  

Patch

diff --git a/gdb/solib.c b/gdb/solib.c
index ed1bc25..eb933c0 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -158,6 +158,7 @@  solib_find_1 (char *in_pathname, int *fd, int is_solib)
   const char *fskind = effective_target_file_system_kind ();
   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
   char *sysroot = gdb_sysroot;
+  int prefix_len, orig_prefix_len;
 
   /* If the absolute prefix starts with "target:" but the filesystem
      accessed by the target_fileio_* methods is the local filesystem
@@ -168,17 +169,16 @@  solib_find_1 (char *in_pathname, int *fd, int is_solib)
   if (is_target_filename (sysroot) && target_filesystem_is_local ())
     sysroot += strlen (TARGET_SYSROOT_PREFIX);
 
-  if (*sysroot == '\0')
-    sysroot = NULL;
-  else
-    {
-      int prefix_len = strlen (sysroot);
+  /* Strip any trailing slashes from the absolute prefix.  */
+  prefix_len = orig_prefix_len = strlen (sysroot);
 
-      /* Remove trailing slashes from absolute prefix.  */
-      while (prefix_len > 0
-	     && IS_DIR_SEPARATOR (sysroot[prefix_len - 1]))
-	prefix_len--;
+  while (prefix_len > 0 && IS_DIR_SEPARATOR (sysroot[prefix_len - 1]))
+    prefix_len--;
 
+  if (prefix_len == 0)
+    sysroot = NULL;
+  else if (prefix_len != orig_prefix_len)
+    {
       sysroot = savestring (sysroot, prefix_len);
       make_cleanup (xfree, sysroot);
     }