- gold_assert(this->input_argument_->extra_search_path() != NULL);
-
- // First, check extra_search_path.
- name = this->input_argument_->extra_search_path();
- if (!IS_DIR_SEPARATOR (name[name.length() - 1]))
- name += '/';
- name += this->input_argument_->name();
- struct stat dummy_stat;
- if (*pindex > 0 || ::stat(name.c_str(), &dummy_stat) < 0)
- {
- // extra_search_path failed, so check the normal search-path.
- int index = *pindex;
- if (index > 0)
- --index;
- name = dirpath.find(this->input_argument_->name(), "",
- &this->is_in_sysroot_, &index);
- if (name.empty())
- {
- gold_error(_("cannot find %s"),
- this->input_argument_->name());
- return false;
- }
- *pindex = index + 1;
- }
- this->found_name_ = this->input_argument_->name();
+ gold_assert(input_argument->extra_search_path() != NULL);
+
+ if (try_extra_search_path(pindex, input_argument, input_argument->name(),
+ found_name, namep))
+ return true;
+
+ // extra_search_path failed, so check the normal search-path.
+ int index = *pindex;
+ if (index > 0)
+ --index;
+ name = dirpath.find(std::vector<std::string>(1, input_argument->name()),
+ is_in_sysroot, &index, found_name);
+ if (name.empty())
+ {
+ gold_error(_("cannot find %s"),
+ input_argument->name());
+ return false;
+ }
+ *namep = name;
+ *pindex = index + 1;
+ return true;