diff --git a/proxmox-protocol/Cargo.toml b/proxmox-protocol/Cargo.toml index 1d8361e0..8ae08a86 100644 --- a/proxmox-protocol/Cargo.toml +++ b/proxmox-protocol/Cargo.toml @@ -14,4 +14,5 @@ crate-type = ['lib', 'cdylib'] chrono = "0.4" endian_trait = "0.6" failure = "0.1" +libc = "0.2" openssl = "0.10" diff --git a/proxmox-protocol/src/c_chunker.rs b/proxmox-protocol/src/c_chunker.rs index ba7835d0..c24730eb 100644 --- a/proxmox-protocol/src/c_chunker.rs +++ b/proxmox-protocol/src/c_chunker.rs @@ -2,11 +2,13 @@ use std::os::raw::c_void; +use libc::size_t; + use crate::Chunker; /// Creates a new chunker instance. #[no_mangle] -pub extern "C" fn proxmox_chunker_new(chunk_size_avg: u64) -> *mut Chunker { +pub extern "C" fn proxmox_chunker_new(chunk_size_avg: size_t) -> *mut Chunker { Box::leak(Box::new(Chunker::new(chunk_size_avg as usize))) } @@ -26,18 +28,20 @@ pub extern "C" fn proxmox_chunker_done(me: *mut Chunker) { pub extern "C" fn proxmox_chunker_scan( me: *mut Chunker, data: *const c_void, - size: u64, -) -> u64 { + size: size_t, +) -> size_t { let me = unsafe { &mut *me }; - me.scan(unsafe { - std::slice::from_raw_parts(data as *const u8, size as usize) - }) as u64 + me.scan(unsafe { std::slice::from_raw_parts(data as *const u8, size as usize) }) as size_t } /// Compute a chunk digest. This is mostly a convenience method to avoid having to lookup the right /// digest method for your language of choice. #[no_mangle] -pub extern "C" fn proxmox_chunk_digest(data: *const c_void, size: u64, out_digest: *mut [u8; 32]) { +pub extern "C" fn proxmox_chunk_digest( + data: *const c_void, + size: size_t, + out_digest: *mut [u8; 32], +) { let digest = crate::FixedChunk::from_data(unsafe { std::slice::from_raw_parts(data as *const u8, size as usize) }); diff --git a/proxmox-protocol/src/c_client.rs b/proxmox-protocol/src/c_client.rs index a8d936ae..a3144bb9 100644 --- a/proxmox-protocol/src/c_client.rs +++ b/proxmox-protocol/src/c_client.rs @@ -4,9 +4,10 @@ use std::ffi::{CStr, CString}; use std::io; -use std::os::raw::{c_char, c_int, c_ulong, c_void}; +use std::os::raw::{c_char, c_int, c_void}; use failure::{bail, format_err, Error}; +use libc::size_t; /// Read callback. The first parameter is the `opaque` parameter passed to `proxmox_backup_new`, /// the rest are the usual read function parameters. This should return the number of bytes @@ -328,7 +329,7 @@ pub extern "C" fn proxmox_backup_create( backup_id: *const c_char, time_epoch: i64, file_name: *const c_char, - chunk_size: c_ulong, + chunk_size: size_t, file_size: i64, is_new: bool, ) -> c_int { @@ -391,7 +392,7 @@ pub extern "C" fn proxmox_backup_dynamic_data( pub extern "C" fn proxmox_backup_fixed_data( me: *mut CClient, stream: c_int, - index: c_ulong, + index: size_t, digest: *const [u8; 32], ) -> c_int { let me = unsafe { &mut *me }; diff --git a/proxmox-protocol/src/lib.rs b/proxmox-protocol/src/lib.rs index acfa8a86..2e571d4a 100644 --- a/proxmox-protocol/src/lib.rs +++ b/proxmox-protocol/src/lib.rs @@ -16,5 +16,5 @@ pub use client::*; mod types; pub use types::*; -pub mod c_client; pub mod c_chunker; +pub mod c_client;