mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 21:33:09 +00:00
redirection.rs: don't leak FFI type into Rust code
This commit is contained in:
parent
807d1578c3
commit
16ea4380c5
2 changed files with 17 additions and 16 deletions
|
@ -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()))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue