| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LIBBRILLO_BRILLO_KERNEL_CONFIG_UTILS_H_ | |
| #define LIBBRILLO_BRILLO_KERNEL_CONFIG_UTILS_H_ | |
| #include <optional> | |
| #include <string> | |
| #include <base/files/file_path.h> | |
| #include <brillo/brillo_export.h> | |
| namespace brillo { | |
| // Fetch the config of the current kernel. Returns the contents of | |
| // `/proc/cmdline` file if successful, nullopt otherwise. | |
| BRILLO_EXPORT std::optional<std::string> GetCurrentKernelConfig(); | |
| // Conveniently invoke the external dump_kernel_config library. | |
| BRILLO_EXPORT std::optional<std::string> DumpKernelConfig( | |
| const base::FilePath& kernel_dev); | |
| // ExtractKernelNamedArg(DumpKernelConfig(..), "root") -> /dev/dm-0. | |
| // This understands quoted values. dm -> "a b c, foo=far" (strips quotes). | |
| // Returns nullopt if no key found, otherwise returns value. | |
| // Does not support escaped quotes that might be present in values | |
| // (e.g.: foo="bar\" bar2"). | |
| BRILLO_EXPORT std::optional<std::string> ExtractKernelArgValue( | |
| const std::string& kernel_config, | |
| const std::string& key, | |
| const bool strip_quotes = true); | |
| // Take a kernel style argument list and modify a single argument value. | |
| // Quotes will be added to the value if value contains any whitespace. No | |
| // escaping will be added for existing characters (ex: values with quotes would | |
| // break setting). Note that this only supports modification of exiting keys, | |
| // and not addition of new key/value pairs. | |
| BRILLO_EXPORT bool SetKernelArg(const std::string& key, | |
| const std::string& value, | |
| std::string& kernel_config); | |
| // Check if a specified flag exists in kernel config. When key value pairs are | |
| // encountered, the presence of a key matching flag is considered valid. Return | |
| // true if flag is found in `kernel_config`, false otherwise. | |
| BRILLO_EXPORT bool FlagExists(const std::string& kernel_config, | |
| const std::string& flag); | |
| } // namespace brillo | |
| #endif // LIBBRILLO_BRILLO_KERNEL_CONFIG_UTILS_H_ |