diff src/load-path.cc @ 9806:8e345f2fe4d6

improved support for Contents.m files
author John W. Eaton <jwe@octave.org>
date Wed, 11 Nov 2009 15:11:14 -0500
parents 7922a24f78c0
children 645c478aa89d
line wrap: on
line diff
--- a/src/load-path.cc
+++ b/src/load-path.cc
@@ -1167,12 +1167,16 @@
 	   p != dir_info_list.end ();
 	   p++)
 	{
-	  std::string dname = p->dir_name;
+	  std::string dname
+	    = octave_env::make_absolute (p->dir_name, octave_env::getcwd ());
 
 	  size_t dname_len = dname.length ();
 
 	  if (dname.substr (dname_len - 1) == file_ops::dir_sep_str ())
-	    dname = dname.substr (0, dname_len - 1);
+	    {
+	      dname = dname.substr (0, dname_len - 1);
+	      dname_len--;
+	    }
 
 	  size_t dir_len = dir.length ();
 
@@ -1191,6 +1195,54 @@
   return retval;
 }
 
+string_vector
+load_path::do_find_matching_dirs (const std::string& dir) const
+{
+  std::list<std::string> retlist;
+
+  if (dir.find_first_of (file_ops::dir_sep_chars ()) != std::string::npos
+      && (octave_env::absolute_pathname (dir)
+	  || octave_env::rooted_relative_pathname (dir)))
+    {
+      file_stat fs (dir);
+
+      if (fs.exists () && fs.is_dir ())
+	retlist.push_back (dir);
+    }
+  else
+    {
+      for (const_dir_info_list_iterator p = dir_info_list.begin ();
+	   p != dir_info_list.end ();
+	   p++)
+	{
+	  std::string dname
+	    = octave_env::make_absolute (p->dir_name, octave_env::getcwd ());
+
+	  size_t dname_len = dname.length ();
+
+	  if (dname.substr (dname_len - 1) == file_ops::dir_sep_str ())
+	    {
+	      dname = dname.substr (0, dname_len - 1);
+	      dname_len--;
+	    }
+
+	  size_t dir_len = dir.length ();
+
+	  if (dname_len >= dir_len
+	      && file_ops::is_dir_sep (dname[dname_len - dir_len - 1])
+	      && dir.compare (dname.substr (dname_len - dir_len)) == 0)
+	    {
+	      file_stat fs (p->dir_name);
+
+	      if (fs.exists () && fs.is_dir ())
+		retlist.push_back (p->dir_name);
+	    }
+	}
+    }
+
+  return retlist;
+}
+
 std::string
 load_path::do_find_first_of (const string_vector& flist) const
 {