// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2018 IBM Corp.

#include "vpnor/test/tmpd.hpp"

namespace openpower
{
namespace virtual_pnor
{
namespace test
{

namespace fs = std::filesystem;

size_t VpnorRoot::write(const std::string& name, const void* data, size_t len)
{
    // write() is for test environment setup - always write to ro section
    fs::path path = root / "ro" / name;

    if (!fs::exists(path))
        /* It's not in the ToC */
        throw std::invalid_argument(name);

    std::ofstream(path).write((const char*)data, len);

    return len;
}

size_t VpnorRoot::patch(const std::string& name, const void* data, size_t len)
{
    if (!fs::exists(root / "ro" / name))
        /* It's not in the ToC */
        throw std::invalid_argument(name);

    std::ofstream(root / "patch" / name).write((const char*)data, len);

    return len;
}

} // namespace test
} // namespace virtual_pnor
} // namespace openpower
