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