Mercurial > hg > octave-nkf
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 {