// 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.

#include "rmad/utils/crossystem_utils_impl.h"

#include <string>

#include <vboot/crossystem.h>

namespace rmad {

bool CrosSystemUtilsImpl::SetInt(const std::string& key, int value) {
  return ::VbSetSystemPropertyInt(key.c_str(), value) == 0;
}

bool CrosSystemUtilsImpl::GetInt(const std::string& key, int* value) const {
  int result = ::VbGetSystemPropertyInt(key.c_str());
  if (result == -1) {
    return false;
  }
  *value = result;
  return true;
}

bool CrosSystemUtilsImpl::SetString(const std::string& key,
                                    const std::string& value) {
  return ::VbSetSystemPropertyString(key.c_str(), value.c_str()) == 0;
}

bool CrosSystemUtilsImpl::GetString(const std::string& key,
                                    std::string* value) const {
  char buf[VB_MAX_STRING_PROPERTY];
  if (::VbGetSystemPropertyString(key.c_str(), buf, sizeof(buf)) == nullptr) {
    return false;
  }
  *value = std::string(buf);
  return true;
}

}  // namespace rmad
