blob: 90b48bda1e9c098d7343cf6dfe7585d0b28624c9 [file] [log] [blame]
// Copyright 2019 The Fuchsia 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 "peridot/lib/util/pseudo_dir_utils.h"
#include <src/lib/fxl/strings/split_string.h>
namespace modular {
std::unique_ptr<vfs::PseudoDir> MakeFilePathWithContents(
const std::string& file_path, const std::string& file_contents) {
auto file_path_split = fxl::SplitStringCopy(
file_path, "/", fxl::kTrimWhitespace, fxl::kSplitWantNonEmpty);
// This is the root-level directory containing |file_path|.
auto config_dir = std::make_unique<vfs::PseudoDir>();
auto* last_subdir = config_dir.get();
// 1. Make each directory in |file_path_split|, except for the last one
// which is the file name.
for (size_t i = 0; i < file_path_split.size() - 1; i++) {
auto subdir = std::make_unique<vfs::PseudoDir>();
auto* subdir_raw = subdir.get();
last_subdir->AddEntry(file_path_split[i], std::move(subdir));
last_subdir = subdir_raw;
}
// 2. The last component of |file_path_split| is the file -- have it hang off
// of the last directory.
last_subdir->AddEntry(file_path_split.back(),
std::make_unique<vfs::PseudoFile>(
[file_contents](std::vector<uint8_t>* out) {
std::copy(file_contents.begin(),
file_contents.end(),
std::back_inserter(*out));
return ZX_OK;
},
vfs::PseudoFile::WriteHandler() /* not used */,
file_contents.size()));
return config_dir;
}
}; // namespace modular