1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CRAZY_LINKER_SEARCH_PATH_LIST_H 6 #define CRAZY_LINKER_SEARCH_PATH_LIST_H 7 8 #include <string.h> 9 10 #include "crazy_linker_util.h" // for String 11 12 namespace crazy { 13 14 // A simple class to model a list of search paths, and perform 15 // file system probing with it. 16 class SearchPathList { 17 public: SearchPathList()18 SearchPathList() : list_(), env_list_(), full_path_() {} 19 20 // Reset the list, i.e. make it empty. 21 void Reset(); 22 23 // Reset the list from an environment variable value. 24 void ResetFromEnv(const char* var_name); 25 26 // Add one or more paths to the list. 27 // |path_list| contains a list of paths separated by columns. 28 // |path_list_end| points after the list's last character. 29 void AddPaths(const char* path_list, const char* path_list_end); 30 31 // Convenience function that takes a 0-terminated string. AddPaths(const char * path_list)32 void AddPaths(const char* path_list) { 33 AddPaths(path_list, path_list + ::strlen(path_list)); 34 } 35 36 // Try to find a file named |file_name| by probing the file system 37 // with every item in the list as a suffix. On success, returns the 38 // full path string, or NULL on failure. 39 const char* FindFile(const char* file_name); 40 41 private: 42 String list_; 43 String env_list_; 44 String full_path_; 45 }; 46 47 } // namespace crazy 48 49 #endif // CRAZY_LINKER_SEARCH_PATH_LIST_H