X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gold%2Fdirsearch.cc;h=e8c9b1203c8e80809d587ad99af85434c75379d7;hb=4d91c2a4677b90802c8d369190927921bf8ee97d;hp=1ae2055dc467d776e0775c58917c284112666c85;hpb=ae3a6d4fa3cfdf9daa38946945b2a6aa0c0e9fa8;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/dirsearch.cc b/gold/dirsearch.cc index 1ae2055dc4..e8c9b1203c 100644 --- a/gold/dirsearch.cc +++ b/gold/dirsearch.cc @@ -1,6 +1,6 @@ // dirsearch.cc -- directory searching for gold -// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2006-2020 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "debug.h" @@ -101,7 +102,7 @@ class Dir_caches : lock_(), caches_() { } - ~Dir_caches(); + ~Dir_caches() ATTRIBUTE_UNUSED; // Add a cache for a directory. void add(const char*); @@ -277,4 +278,28 @@ Dirsearch::find(const std::vector& names, return std::string(); } +// Search for a file in a directory list. This is a low-level function and +// therefore can be used before options and parameters are set. + +std::string +Dirsearch::find_file_in_dir_list(const std::string& name, + const General_options::Dir_list& directories, + const std::string& extra_search_dir) +{ + struct stat buf; + std::string extra_name = extra_search_dir + '/' + name; + + if (stat(extra_name.c_str(), &buf) == 0) + return extra_name; + for (General_options::Dir_list::const_iterator dir = directories.begin(); + dir != directories.end(); + ++dir) + { + std::string full_name = dir->name() + '/' + name; + if (stat(full_name.c_str(), &buf) == 0) + return full_name; + } + return name; +} + } // End namespace gold.