// Copyright 2018 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 "init/crossystem_impl.h"

#include <string>

#include <vboot/crossystem.h>

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

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

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

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