# HG changeset patch # User Jaroslav Hajek # Date 1266478817 -3600 # Node ID db540cb0e95984605f29d81952fcbaa8d558fabe # Parent 0c42b6b7da248ae750e125b1eba8e3fc8ad59d33 improve shadowed function checking diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-02-18 Jaroslav Hajek + + * load-path.cc (in_path_list): New helper function. + (add_to_fcn_map): Use it here. + 2010-02-18 Søren Hauberg * DLD-FUNCTIONS/__magick_read__.cc (__magick_finfo__): diff --git a/src/load-path.cc b/src/load-path.cc --- a/src/load-path.cc +++ b/src/load-path.cc @@ -1617,6 +1617,24 @@ #endif } +// True if a path is contained in a path list separated by path_sep_char +static bool +in_path_list (const std::string& path_list, const std::string& path) +{ + size_t ps = path.size (), pls = path_list.size (), pos = path_list.find (path); + char psc = dir_path::path_sep_char (); + while (pos != std::string::npos) + { + if ((pos == 0 || path_list[pos-1] == psc) + && (pos + ps == pls || path_list[pos + ps] == psc)) + return true; + else + pos = path_list.find (path, pos + 1); + } + + return false; +} + void load_path::add_to_fcn_map (const dir_info& di, bool at_end) const { @@ -1674,6 +1692,7 @@ { file_info& old = file_info_list.front (); if (sys_path.find (old.dir_name) != std::string::npos) + if (in_path_list (sys_path, old.dir_name)) { std::string fcn_path = file_ops::concat (dir_name, fname); warning_with_id ("Octave:shadowed-function",