forked from lix-project/lix
Get rid of CBox
This commit is contained in:
parent
5a6d6da7ae
commit
ca87707c90
|
@ -1,20 +1,21 @@
|
|||
use super::{
|
||||
error,
|
||||
foreign::{self, CBox},
|
||||
foreign::{self},
|
||||
store::path,
|
||||
store::StorePath,
|
||||
util,
|
||||
};
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn unpack_tarfile(
|
||||
pub unsafe extern "C" fn unpack_tarfile(
|
||||
source: foreign::Source,
|
||||
dest_dir: &str,
|
||||
) -> CBox<Result<(), error::CppException>> {
|
||||
CBox::new(
|
||||
out: *mut Result<(), error::CppException>,
|
||||
) {
|
||||
out.write(
|
||||
util::tarfile::unpack_tarfile(source, std::path::Path::new(dest_dir))
|
||||
.map_err(|err| err.into()),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
|
|
|
@ -12,22 +12,3 @@ impl std::io::Read for Source {
|
|||
Ok(n)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CBox<T> {
|
||||
pub ptr: *mut libc::c_void,
|
||||
phantom: std::marker::PhantomData<T>,
|
||||
}
|
||||
|
||||
impl<T> CBox<T> {
|
||||
pub fn new(t: T) -> Self {
|
||||
unsafe {
|
||||
let size = std::mem::size_of::<T>();
|
||||
let ptr = libc::malloc(size);
|
||||
*(ptr as *mut T) = t; // FIXME: probably UB
|
||||
Self {
|
||||
ptr,
|
||||
phantom: std::marker::PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -180,24 +180,4 @@ struct Result
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct CBox
|
||||
{
|
||||
T * ptr;
|
||||
|
||||
T * operator ->()
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
|
||||
CBox(T * ptr) : ptr(ptr) { }
|
||||
CBox(const CBox &) = delete;
|
||||
CBox(CBox &&) = delete;
|
||||
|
||||
~CBox()
|
||||
{
|
||||
free(ptr);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
extern "C" {
|
||||
rust::Result<std::tuple<>> *
|
||||
unpack_tarfile(rust::Source source, rust::StringSlice dest_dir);
|
||||
unpack_tarfile(rust::Source source, rust::StringSlice dest_dir, rust::Result<std::tuple<>> & out);
|
||||
}
|
||||
|
||||
namespace nix {
|
||||
|
@ -11,7 +11,9 @@ namespace nix {
|
|||
void unpackTarfile(Source & source, const Path & destDir)
|
||||
{
|
||||
rust::Source source2(source);
|
||||
rust::CBox(unpack_tarfile(source2, destDir))->unwrap();
|
||||
rust::Result<std::tuple<>> res;
|
||||
unpack_tarfile(source2, destDir, res);
|
||||
res.unwrap();
|
||||
}
|
||||
|
||||
void unpackTarfile(const Path & tarFile, const Path & destDir,
|
||||
|
|
Loading…
Reference in a new issue