diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2019-06-19 00:30:27 +0000 | 
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-06-19 00:30:27 +0000 | 
| commit | 90eb2ed62d2ccaf25b325019c11050d53a390bb2 (patch) | |
| tree | 2796627390f272bf2025faffd63fe93da4c959d7 /libmodprobe/libmodprobe_ext_test.cpp | |
| parent | ad0f27fe729ccdeb077e266a65ce3f8c3da5e27e (diff) | |
| parent | 18b981ea7c5f0964941931a71fa55d880bec0c16 (diff) | |
Merge "create libmodprobe, integrate into first_stage_init"
Diffstat (limited to 'libmodprobe/libmodprobe_ext_test.cpp')
| -rw-r--r-- | libmodprobe/libmodprobe_ext_test.cpp | 61 | 
1 files changed, 61 insertions, 0 deletions
diff --git a/libmodprobe/libmodprobe_ext_test.cpp b/libmodprobe/libmodprobe_ext_test.cpp new file mode 100644 index 0000000000..0f073cb5c2 --- /dev/null +++ b/libmodprobe/libmodprobe_ext_test.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <sys/stat.h> +#include <sys/syscall.h> + +#include <string> +#include <vector> + +#include <android-base/logging.h> +#include <android-base/strings.h> +#include <android-base/unique_fd.h> +#include <gtest/gtest.h> + +#include <modprobe/modprobe.h> + +#include "libmodprobe_test.h" + +bool Modprobe::Insmod(const std::string& path_name) { +    auto deps = GetDependencies(MakeCanonical(path_name)); +    if (deps.empty()) { +        return false; +    } +    if (std::find(test_modules.begin(), test_modules.end(), deps.front()) == test_modules.end()) { +        return false; +    } +    for (auto it = modules_loaded.begin(); it != modules_loaded.end(); ++it) { +        if (android::base::StartsWith(*it, path_name)) { +            return true; +        } +    } +    std::string options; +    auto options_iter = module_options_.find(MakeCanonical(path_name)); +    if (options_iter != module_options_.end()) { +        options = " " + options_iter->second; +    } +    modules_loaded.emplace_back(path_name + options); +    return true; +} + +bool Modprobe::ModuleExists(const std::string& module_name) { +    auto deps = GetDependencies(module_name); +    if (deps.empty()) { +        // missing deps can happen in the case of an alias +        return false; +    } +    return std::find(test_modules.begin(), test_modules.end(), deps.front()) != test_modules.end(); +}  | 
