redirection.rs: don't leak FFI type into Rust code

This commit is contained in:
Johannes Altmanninger 2023-04-09 13:38:18 +02:00
parent 807d1578c3
commit 16ea4380c5
2 changed files with 17 additions and 16 deletions

View file

@ -40,12 +40,12 @@ mod redirection_ffi {
target: wcharz_t,
) -> Box<RedirectionSpec>;
type RedirectionSpecList;
fn new_redirection_spec_list() -> Box<RedirectionSpecList>;
fn size(self: &RedirectionSpecList) -> usize;
fn at(self: &RedirectionSpecList, offset: usize) -> *const RedirectionSpec;
fn push_back(self: &mut RedirectionSpecList, spec: Box<RedirectionSpec>);
fn clone(self: &RedirectionSpecList) -> Box<RedirectionSpecList>;
type RedirectionSpecListFfi;
fn new_redirection_spec_list() -> Box<RedirectionSpecListFfi>;
fn size(self: &RedirectionSpecListFfi) -> usize;
fn at(self: &RedirectionSpecListFfi, offset: usize) -> *const RedirectionSpec;
fn push_back(self: &mut RedirectionSpecListFfi, spec: Box<RedirectionSpec>);
fn clone(self: &RedirectionSpecListFfi) -> Box<RedirectionSpecListFfi>;
}
/// A type that represents the action dup2(src, target).
@ -150,14 +150,15 @@ fn new_redirection_spec(fd: i32, mode: RedirectionMode, target: wcharz_t) -> Box
})
}
/// TODO This should be type alias once we drop the FFI.
pub struct RedirectionSpecList(Vec<RedirectionSpec>);
pub type RedirectionSpecList = Vec<RedirectionSpec>;
fn new_redirection_spec_list() -> Box<RedirectionSpecList> {
Box::new(RedirectionSpecList(Vec::new()))
struct RedirectionSpecListFfi(RedirectionSpecList);
fn new_redirection_spec_list() -> Box<RedirectionSpecListFfi> {
Box::new(RedirectionSpecListFfi(Vec::new()))
}
impl RedirectionSpecList {
impl RedirectionSpecListFfi {
fn size(&self) -> usize {
self.0.len()
}
@ -165,11 +166,11 @@ impl RedirectionSpecList {
&self.0[offset]
}
#[allow(clippy::boxed_local)]
fn push_back(self: &mut RedirectionSpecList, spec: Box<RedirectionSpec>) {
fn push_back(&mut self, spec: Box<RedirectionSpec>) {
self.0.push(*spec)
}
fn clone(self: &RedirectionSpecList) -> Box<RedirectionSpecList> {
Box::new(RedirectionSpecList(self.0.clone()))
fn clone(&self) -> Box<RedirectionSpecListFfi> {
Box::new(RedirectionSpecListFfi(self.0.clone()))
}
}

View file

@ -19,13 +19,13 @@ enum class RedirectionMode {
struct Dup2Action;
class Dup2List;
struct RedirectionSpec;
struct RedirectionSpecList;
struct RedirectionSpecListFfi;
#endif
using redirection_mode_t = RedirectionMode;
using redirection_spec_t = RedirectionSpec;
using redirection_spec_list_t = RedirectionSpecList;
using redirection_spec_list_t = RedirectionSpecListFfi;
using dup2_action_t = Dup2Action;
using dup2_list_t = Dup2List;