This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[OB PATCH] Correctly notice empty sysroots in solib_find_1


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(-)

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);
     }
-- 
1.7.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]