libmodprobe: add GetAllDependencies
Add a method to retrieve the dependencies (both hard and soft) of a module. Change-Id: Ie44ceb3e36856bb1a3e68c5d3c0d55a38deb0ef9
This commit is contained in:
parent
012cfa19b0
commit
781aa78ee2
2 changed files with 36 additions and 0 deletions
|
|
@ -30,6 +30,9 @@ class Modprobe {
|
||||||
const std::string& parameters = "");
|
const std::string& parameters = "");
|
||||||
bool Remove(const std::string& module_name);
|
bool Remove(const std::string& module_name);
|
||||||
std::vector<std::string> ListModules(const std::string& pattern);
|
std::vector<std::string> ListModules(const std::string& pattern);
|
||||||
|
bool GetAllDependencies(const std::string& module, std::vector<std::string>* pre_dependencies,
|
||||||
|
std::vector<std::string>* dependencies,
|
||||||
|
std::vector<std::string>* post_dependencies);
|
||||||
void EnableBlacklist(bool enable);
|
void EnableBlacklist(bool enable);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -376,3 +376,36 @@ std::vector<std::string> Modprobe::ListModules(const std::string& pattern) {
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Modprobe::GetAllDependencies(const std::string& module,
|
||||||
|
std::vector<std::string>* pre_dependencies,
|
||||||
|
std::vector<std::string>* dependencies,
|
||||||
|
std::vector<std::string>* post_dependencies) {
|
||||||
|
std::string canonical_name = MakeCanonical(module);
|
||||||
|
if (pre_dependencies) {
|
||||||
|
pre_dependencies->clear();
|
||||||
|
for (const auto& [it_module, it_softdep] : module_pre_softdep_) {
|
||||||
|
if (canonical_name == it_module) {
|
||||||
|
pre_dependencies->emplace_back(it_softdep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dependencies) {
|
||||||
|
dependencies->clear();
|
||||||
|
auto hard_deps = GetDependencies(canonical_name);
|
||||||
|
if (hard_deps.empty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (auto dep = hard_deps.rbegin(); dep != hard_deps.rend(); dep++) {
|
||||||
|
dependencies->emplace_back(*dep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (post_dependencies) {
|
||||||
|
for (const auto& [it_module, it_softdep] : module_post_softdep_) {
|
||||||
|
if (canonical_name == it_module) {
|
||||||
|
post_dependencies->emplace_back(it_softdep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue