blob: 12567440327d1b0c8b52d8e57682fe5c55a88469 [file] [edit]
// 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.
use {
fidl_fuchsia_tel_devmgr::IsolatedDevmgrMarker,
fuchsia_component::client::connect_to_service,
fuchsia_zircon as zx,
std::{fs::File, path::Path},
};
/// Opens a path
pub fn open_in_isolated_devmgr(path: &str, flags: u32) -> Result<File, zx::Status> {
let isolated_devmgr =
connect_to_service::<IsolatedDevmgrMarker>().expect("connecting to isolated devmgr.");
let (node_proxy, server_end) =
fidl::endpoints::create_endpoints().expect("creating channel for devfs node");
println!("isolated_devmgr opening file...");
isolated_devmgr
.open(flags, 0, path, server_end)
.expect("opening devfs node in isolated devmgr");
println!("done");
fdio::create_fd(node_proxy.into_channel().into())
}
/// Opens a path as a directory
pub fn open_dir_in_isolated_devmgr<P: AsRef<Path>>(path: P) -> Result<File, zx::Status> {
let flags = fidl_fuchsia_io::OPEN_FLAG_DIRECTORY | fidl_fuchsia_io::OPEN_RIGHT_READABLE;
open_in_isolated_devmgr(path.as_ref().to_str().unwrap(), flags)
}
/// Opens a path as a file
pub fn open_file_in_isolated_devmgr<P: AsRef<Path>>(path: P) -> Result<File, zx::Status> {
let flags = fidl_fuchsia_io::OPEN_RIGHT_READABLE | fidl_fuchsia_io::OPEN_RIGHT_WRITABLE;
open_in_isolated_devmgr(path.as_ref().to_str().unwrap(), flags)
}