// Copyright 2018 The Chromium 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 "chrome_elf/third_party_dlls/status_codes.h"

#include <assert.h>

namespace third_party_dlls {

const wchar_t kStatusCodesRegValue[] = L"StatusCodes";

void AddStatusCodeToBuffer(ThirdPartyStatus code,
                           std::vector<uint8_t>* buffer) {
  assert(buffer);

  // If the existing buffer of status codes is corrupt, overwrite it.
  if (buffer->size() % sizeof(ThirdPartyStatus) != 0) {
    buffer->clear();
  }

  size_t original_size_bytes = buffer->size();
  // Add space for an additional status code.
  buffer->resize(original_size_bytes + sizeof(ThirdPartyStatus));
  // Append the status code in an endian-agnostic way.
  ThirdPartyStatus* temp_array =
      reinterpret_cast<ThirdPartyStatus*>(&(*buffer)[0]);
  temp_array[original_size_bytes / sizeof(ThirdPartyStatus)] = code;
}

void ConvertBufferToStatusCodes(const std::vector<uint8_t>& buffer,
                                std::vector<ThirdPartyStatus>* codes) {
  assert(codes);

  codes->clear();
  if (buffer.size() && (buffer.size() % sizeof(ThirdPartyStatus) == 0)) {
    codes->resize(buffer.size() / sizeof(ThirdPartyStatus));
    ::memcpy(&(*codes)[0], &buffer[0], buffer.size());
  }
}

}  // namespace third_party_dlls
