| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <string_view> |
| #include <map> |
| |
| #include <fbl/vector.h> |
| #include <lib/zx/vmo.h> |
| |
| namespace devmgr { |
| |
| // Handle boot arguments contained within a VMO. |
| class BootArgs { |
| public: |
| // Create BootArgs from a |vmo| with a given |size|. |
| static zx_status_t Create(zx::vmo vmo, size_t size, BootArgs* out); |
| |
| BootArgs() = default; |
| ~BootArgs(); |
| |
| BootArgs(const BootArgs&) = delete; |
| BootArgs(BootArgs&&) = delete; |
| BootArgs& operator=(const BootArgs&) = delete; |
| BootArgs& operator=(BootArgs&&) = delete; |
| |
| // Get the value of boot argument |name|. |
| const char* Get(std::string_view name) const; |
| // Get the boolean value of boot argument |name|. If it does not exist, |
| // return |default_value|. |
| bool GetBool(std::string_view name, bool default_value) const; |
| // Collect all boot arguments with |prefix| and add them to |out|. |
| void Collect(std::string_view prefix, fbl::Vector<const char*>* out) const; |
| |
| private: |
| uintptr_t addr_ = 0; |
| size_t size_ = 0; |
| // TODO(TC-383): This should be std::unordered_map. |
| using ArgsMap = std::map<std::string_view, const char*>; |
| ArgsMap args_; |
| }; |
| |
| } // namespace devmgr |