blob: 356775d48d61ced1e8f38f29c2ccedd1997c6185 [file] [log] [blame]
// Copyright 2020 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 "src/storage/lib/utils/topological_path.h"
#include <fuchsia/device/llcpp/fidl.h>
#include <lib/fdio/cpp/caller.h>
#include <fbl/unique_fd.h>
namespace storage {
zx::status<std::string> GetTopologicalPath(
fidl::UnownedClientEnd<llcpp::fuchsia::device::Controller> channel) {
auto result = llcpp::fuchsia::device::Controller::Call::GetTopologicalPath(channel);
if (!result.ok())
return zx::error(result.status());
if (result->result.is_err())
return zx::error(result->result.err());
return zx::ok(
std::string(result->result.response().path.data(), result->result.response().path.size()));
}
zx::status<std::string> GetTopologicalPath(const std::string& path) {
fbl::unique_fd fd(open(path.c_str(), O_RDWR));
if (!fd)
return zx::error(ZX_ERR_NOT_FOUND);
fdio_cpp::FdioCaller caller(std::move(fd));
return GetTopologicalPath(caller.channel());
}
} // namespace storage