mirror of
https://github.com/Drop-OSS/drop.git
synced 2026-07-27 10:14:40 +10:00
match result code before extracting an error
This commit is contained in:
@@ -107,7 +107,7 @@ impl FileReader {
|
||||
let c_file = CString::new(file.as_ref().to_string_lossy().as_bytes()).unwrap();
|
||||
unsafe {
|
||||
match ffi::archive_read_open_filename(builder.handle(), c_file.as_ptr(), BLOCK_SIZE) {
|
||||
0 => {
|
||||
ffi::ARCHIVE_OK => {
|
||||
builder.consume();
|
||||
Ok(Self::new(builder.handle()))
|
||||
}
|
||||
@@ -155,7 +155,7 @@ impl StreamReader {
|
||||
None,
|
||||
Some(stream_read_callback),
|
||||
None) {
|
||||
0 => {
|
||||
ffi::ARCHIVE_OK => {
|
||||
let reader = StreamReader {
|
||||
handle: builder.handle(),
|
||||
entry: ReaderEntry::default(),
|
||||
@@ -200,84 +200,63 @@ impl Builder {
|
||||
}
|
||||
|
||||
pub fn support_compression(&mut self, compression: ReadCompression) -> ArchiveResult<()> {
|
||||
match compression {
|
||||
let result = match compression {
|
||||
ReadCompression::All => unsafe {
|
||||
ffi::archive_read_support_compression_all(self.handle);
|
||||
ffi::archive_read_support_compression_all(self.handle)
|
||||
},
|
||||
ReadCompression::Bzip2 => unsafe {
|
||||
ffi::archive_read_support_compression_bzip2(self.handle);
|
||||
ffi::archive_read_support_compression_bzip2(self.handle)
|
||||
},
|
||||
ReadCompression::Compress => unsafe {
|
||||
ffi::archive_read_support_compression_compress(self.handle);
|
||||
ffi::archive_read_support_compression_compress(self.handle)
|
||||
},
|
||||
ReadCompression::Gzip => unsafe {
|
||||
ffi::archive_read_support_compression_gzip(self.handle);
|
||||
ffi::archive_read_support_compression_gzip(self.handle)
|
||||
},
|
||||
ReadCompression::Lzip => unsafe {
|
||||
ffi::archive_read_support_compression_lzip(self.handle);
|
||||
ffi::archive_read_support_compression_lzip(self.handle)
|
||||
},
|
||||
ReadCompression::Lzma => unsafe {
|
||||
ffi::archive_read_support_compression_lzma(self.handle);
|
||||
ffi::archive_read_support_compression_lzma(self.handle)
|
||||
},
|
||||
ReadCompression::None => unsafe {
|
||||
ffi::archive_read_support_compression_none(self.handle);
|
||||
ffi::archive_read_support_compression_none(self.handle)
|
||||
},
|
||||
ReadCompression::Program(prog) => {
|
||||
let c_prog = CString::new(prog).unwrap();
|
||||
unsafe {
|
||||
ffi::archive_read_support_compression_program(self.handle, c_prog.as_ptr());
|
||||
ffi::archive_read_support_compression_program(self.handle, c_prog.as_ptr())
|
||||
}
|
||||
}
|
||||
ReadCompression::Rpm => unsafe {
|
||||
ffi::archive_read_support_compression_rpm(self.handle);
|
||||
},
|
||||
ReadCompression::Uu => unsafe {
|
||||
ffi::archive_read_support_compression_uu(self.handle);
|
||||
},
|
||||
ReadCompression::Xz => unsafe {
|
||||
ffi::archive_read_support_compression_xz(self.handle);
|
||||
ffi::archive_read_support_compression_rpm(self.handle)
|
||||
},
|
||||
ReadCompression::Uu => unsafe { ffi::archive_read_support_compression_uu(self.handle) },
|
||||
ReadCompression::Xz => unsafe { ffi::archive_read_support_compression_xz(self.handle) },
|
||||
};
|
||||
match result {
|
||||
ffi::ARCHIVE_OK => Ok(()),
|
||||
_ => ArchiveResult::from(self as &Handle),
|
||||
}
|
||||
ArchiveResult::from(self as &Handle)
|
||||
}
|
||||
|
||||
pub fn support_filter(&mut self, filter: ReadFilter) -> ArchiveResult<()> {
|
||||
match filter {
|
||||
ReadFilter::All => unsafe {
|
||||
ffi::archive_read_support_filter_all(self.handle);
|
||||
},
|
||||
ReadFilter::Bzip2 => unsafe {
|
||||
ffi::archive_read_support_filter_bzip2(self.handle);
|
||||
},
|
||||
let result = match filter {
|
||||
ReadFilter::All => unsafe { ffi::archive_read_support_filter_all(self.handle) },
|
||||
ReadFilter::Bzip2 => unsafe { ffi::archive_read_support_filter_bzip2(self.handle) },
|
||||
ReadFilter::Compress => unsafe {
|
||||
ffi::archive_read_support_filter_compress(self.handle);
|
||||
},
|
||||
ReadFilter::Grzip => unsafe {
|
||||
ffi::archive_read_support_filter_grzip(self.handle);
|
||||
},
|
||||
ReadFilter::Gzip => unsafe {
|
||||
ffi::archive_read_support_filter_gzip(self.handle);
|
||||
},
|
||||
ReadFilter::Lrzip => unsafe {
|
||||
ffi::archive_read_support_filter_lrzip(self.handle);
|
||||
},
|
||||
ReadFilter::Lzip => unsafe {
|
||||
ffi::archive_read_support_filter_lzip(self.handle);
|
||||
},
|
||||
ReadFilter::Lzma => unsafe {
|
||||
ffi::archive_read_support_filter_lzma(self.handle);
|
||||
},
|
||||
ReadFilter::Lzop => unsafe {
|
||||
ffi::archive_read_support_filter_lzop(self.handle);
|
||||
},
|
||||
ReadFilter::None => unsafe {
|
||||
ffi::archive_read_support_filter_none(self.handle);
|
||||
ffi::archive_read_support_filter_compress(self.handle)
|
||||
},
|
||||
ReadFilter::Grzip => unsafe { ffi::archive_read_support_filter_grzip(self.handle) },
|
||||
ReadFilter::Gzip => unsafe { ffi::archive_read_support_filter_gzip(self.handle) },
|
||||
ReadFilter::Lrzip => unsafe { ffi::archive_read_support_filter_lrzip(self.handle) },
|
||||
ReadFilter::Lzip => unsafe { ffi::archive_read_support_filter_lzip(self.handle) },
|
||||
ReadFilter::Lzma => unsafe { ffi::archive_read_support_filter_lzma(self.handle) },
|
||||
ReadFilter::Lzop => unsafe { ffi::archive_read_support_filter_lzop(self.handle) },
|
||||
ReadFilter::None => unsafe { ffi::archive_read_support_filter_none(self.handle) },
|
||||
ReadFilter::Program(prog) => {
|
||||
let c_prog = CString::new(prog).unwrap();
|
||||
unsafe {
|
||||
ffi::archive_read_support_filter_program(self.handle, c_prog.as_ptr());
|
||||
}
|
||||
unsafe { ffi::archive_read_support_filter_program(self.handle, c_prog.as_ptr()) }
|
||||
}
|
||||
ReadFilter::ProgramSignature(prog, cb, size) => {
|
||||
let c_prog = CString::new(prog).unwrap();
|
||||
@@ -285,71 +264,43 @@ impl Builder {
|
||||
ffi::archive_read_support_filter_program_signature(self.handle,
|
||||
c_prog.as_ptr(),
|
||||
mem::transmute(cb),
|
||||
size);
|
||||
size)
|
||||
}
|
||||
}
|
||||
ReadFilter::Rpm => unsafe {
|
||||
ffi::archive_read_support_filter_rpm(self.handle);
|
||||
},
|
||||
ReadFilter::Uu => unsafe {
|
||||
ffi::archive_read_support_filter_uu(self.handle);
|
||||
},
|
||||
ReadFilter::Xz => unsafe {
|
||||
ffi::archive_read_support_filter_xz(self.handle);
|
||||
},
|
||||
ReadFilter::Rpm => unsafe { ffi::archive_read_support_filter_rpm(self.handle) },
|
||||
ReadFilter::Uu => unsafe { ffi::archive_read_support_filter_uu(self.handle) },
|
||||
ReadFilter::Xz => unsafe { ffi::archive_read_support_filter_xz(self.handle) },
|
||||
};
|
||||
match result {
|
||||
ffi::ARCHIVE_OK => Ok(()),
|
||||
_ => ArchiveResult::from(self as &Handle),
|
||||
}
|
||||
ArchiveResult::from(self as &Handle)
|
||||
}
|
||||
|
||||
pub fn support_format(&self, format: ReadFormat) -> ArchiveResult<()> {
|
||||
match format {
|
||||
ReadFormat::SevenZip => unsafe {
|
||||
ffi::archive_read_support_format_7zip(self.handle());
|
||||
},
|
||||
ReadFormat::All => unsafe {
|
||||
ffi::archive_read_support_format_all(self.handle());
|
||||
},
|
||||
ReadFormat::Ar => unsafe {
|
||||
ffi::archive_read_support_format_ar(self.handle());
|
||||
},
|
||||
ReadFormat::Cab => unsafe {
|
||||
ffi::archive_read_support_format_cab(self.handle());
|
||||
},
|
||||
ReadFormat::Cpio => unsafe {
|
||||
ffi::archive_read_support_format_cpio(self.handle());
|
||||
},
|
||||
ReadFormat::Empty => unsafe {
|
||||
ffi::archive_read_support_format_empty(self.handle());
|
||||
},
|
||||
ReadFormat::Gnutar => unsafe {
|
||||
ffi::archive_read_support_format_gnutar(self.handle());
|
||||
},
|
||||
let result = match format {
|
||||
ReadFormat::SevenZip => unsafe { ffi::archive_read_support_format_7zip(self.handle()) },
|
||||
ReadFormat::All => unsafe { ffi::archive_read_support_format_all(self.handle()) },
|
||||
ReadFormat::Ar => unsafe { ffi::archive_read_support_format_ar(self.handle()) },
|
||||
ReadFormat::Cab => unsafe { ffi::archive_read_support_format_cab(self.handle()) },
|
||||
ReadFormat::Cpio => unsafe { ffi::archive_read_support_format_cpio(self.handle()) },
|
||||
ReadFormat::Empty => unsafe { ffi::archive_read_support_format_empty(self.handle()) },
|
||||
ReadFormat::Gnutar => unsafe { ffi::archive_read_support_format_gnutar(self.handle()) },
|
||||
ReadFormat::Iso9660 => unsafe {
|
||||
ffi::archive_read_support_format_iso9660(self.handle());
|
||||
},
|
||||
ReadFormat::Lha => unsafe {
|
||||
ffi::archive_read_support_format_lha(self.handle());
|
||||
},
|
||||
ReadFormat::Mtree => unsafe {
|
||||
ffi::archive_read_support_format_mtree(self.handle());
|
||||
},
|
||||
ReadFormat::Rar => unsafe {
|
||||
ffi::archive_read_support_format_rar(self.handle());
|
||||
},
|
||||
ReadFormat::Raw => unsafe {
|
||||
ffi::archive_read_support_format_raw(self.handle());
|
||||
},
|
||||
ReadFormat::Tar => unsafe {
|
||||
ffi::archive_read_support_format_tar(self.handle());
|
||||
},
|
||||
ReadFormat::Xar => unsafe {
|
||||
ffi::archive_read_support_format_xar(self.handle());
|
||||
},
|
||||
ReadFormat::Zip => unsafe {
|
||||
ffi::archive_read_support_format_zip(self.handle());
|
||||
ffi::archive_read_support_format_iso9660(self.handle())
|
||||
},
|
||||
ReadFormat::Lha => unsafe { ffi::archive_read_support_format_lha(self.handle()) },
|
||||
ReadFormat::Mtree => unsafe { ffi::archive_read_support_format_mtree(self.handle()) },
|
||||
ReadFormat::Rar => unsafe { ffi::archive_read_support_format_rar(self.handle()) },
|
||||
ReadFormat::Raw => unsafe { ffi::archive_read_support_format_raw(self.handle()) },
|
||||
ReadFormat::Tar => unsafe { ffi::archive_read_support_format_tar(self.handle()) },
|
||||
ReadFormat::Xar => unsafe { ffi::archive_read_support_format_xar(self.handle()) },
|
||||
ReadFormat::Zip => unsafe { ffi::archive_read_support_format_zip(self.handle()) },
|
||||
};
|
||||
match result {
|
||||
ffi::ARCHIVE_OK => Ok(()),
|
||||
_ => ArchiveResult::from(self as &Handle),
|
||||
}
|
||||
ArchiveResult::from(self as &Handle)
|
||||
}
|
||||
|
||||
pub fn open_file<T: AsRef<Path>>(self, file: T) -> ArchiveResult<FileReader> {
|
||||
|
||||
Reference in New Issue
Block a user