// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CRAZY_LINKER_SEARCH_PATH_LIST_H
#define CRAZY_LINKER_SEARCH_PATH_LIST_H

#include <string.h>

#include "crazy_linker_util.h"  // for String

namespace crazy {

// A simple class to model a list of search paths, and perform
// file system probing with it.
class SearchPathList {
 public:
  SearchPathList() : list_(), env_list_(), full_path_() {}

  // Reset the list, i.e. make it empty.
  void Reset();

  // Reset the list from an environment variable value.
  void ResetFromEnv(const char* var_name);

  // Add one or more paths to the list.
  // |path_list| contains a list of paths separated by columns.
  // |path_list_end| points after the list's last character.
  void AddPaths(const char* path_list, const char* path_list_end);

  // Convenience function that takes a 0-terminated string.
  void AddPaths(const char* path_list) {
    AddPaths(path_list, path_list + ::strlen(path_list));
  }

  // Try to find a file named |file_name| by probing the file system
  // with every item in the list as a suffix. On success, returns the
  // full path string, or NULL on failure.
  const char* FindFile(const char* file_name);

 private:
  String list_;
  String env_list_;
  String full_path_;
};

}  // namespace crazy

#endif  // CRAZY_LINKER_SEARCH_PATH_LIST_H