blob: fce1420d92296b21bdaef48c8c0c164b5bcf750b [file] [log] [blame]
// Copyright 2021 The Chromium OS 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 LIBCROSSYSTEM_CROSSYSTEM_H_
#define LIBCROSSYSTEM_CROSSYSTEM_H_
#include <cstddef>
#include <optional>
#include <string>
#include <brillo/brillo_export.h>
namespace crossystem {
// C++ interface to access crossystem system properties.
class BRILLO_EXPORT Crossystem {
public:
virtual ~Crossystem() = default;
// Reads a system property integer.
//
// @param name The name of the target system property.
// @return The property value, or |std::nullopt| if error.
virtual std::optional<int> VbGetSystemPropertyInt(
const std::string& name) const = 0;
// Sets a system property integer.
//
// @param name The name of the target system property.
// @param value The integer value to set.
// @return |true| if it succeeds; |false| if it fails.
virtual bool VbSetSystemPropertyInt(const std::string& name, int value) = 0;
// Reads a system property string.
//
// @param name The name of the target system property.
// @return The property value, or |std::nullopt| if error.
virtual std::optional<std::string> VbGetSystemPropertyString(
const std::string& name) const = 0;
// Sets a system property string.
//
// @param name The name of the target system property.
// @param value The string value to set.
// @return |true| if it succeeds; |false| if it fails.
virtual bool VbSetSystemPropertyString(const std::string& name,
const std::string& value) = 0;
};
// The sole implementation that invokes the corresponding functions provided
// in vboot/crossystem.h .
class BRILLO_EXPORT CrossystemImpl : public Crossystem {
public:
std::optional<int> VbGetSystemPropertyInt(
const std::string& name) const override;
bool VbSetSystemPropertyInt(const std::string& name, int value) override;
std::optional<std::string> VbGetSystemPropertyString(
const std::string& name) const override;
bool VbSetSystemPropertyString(const std::string& name,
const std::string& value) override;
};
} // namespace crossystem
#endif // LIBCROSSYSTEM_CROSSYSTEM_H_