feat(libarchive): support adding any reader
parent
00a0a62ab0
commit
443a03c8f6
|
@ -31,11 +31,7 @@ impl FileWriter {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn append_path<P: AsRef<Path>>(
|
||||
&mut self,
|
||||
entry: &mut WriteEntry,
|
||||
path: P,
|
||||
) -> crate::Result<()> {
|
||||
pub fn append_data<R: Read>(&mut self, entry: &mut WriteEntry, r: &mut R) -> crate::Result<()> {
|
||||
unsafe {
|
||||
match ffi::archive_write_header(self.handle_mut(), entry.entry_mut()) {
|
||||
ffi::ARCHIVE_OK => (),
|
||||
|
@ -43,11 +39,10 @@ impl FileWriter {
|
|||
}
|
||||
}
|
||||
|
||||
let mut f = fs::File::open(path)?;
|
||||
let mut buf = [0; 8192];
|
||||
|
||||
loop {
|
||||
match f.read(&mut buf) {
|
||||
match r.read(&mut buf) {
|
||||
Ok(0) => return Ok(()),
|
||||
Ok(written) => unsafe {
|
||||
match ffi::archive_write_data(
|
||||
|
@ -68,6 +63,15 @@ impl FileWriter {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn append_path<P: AsRef<Path>>(
|
||||
&mut self,
|
||||
entry: &mut WriteEntry,
|
||||
path: P,
|
||||
) -> crate::Result<()> {
|
||||
let mut f = fs::File::open(path)?;
|
||||
self.append_data(entry, &mut f)
|
||||
}
|
||||
|
||||
pub fn close(&mut self) -> crate::Result<()> {
|
||||
unsafe {
|
||||
match ffi::archive_write_close(self.handle_mut()) {
|
||||
|
|
Loading…
Reference in New Issue