cleanup: also improve code resuse and parameter checks for restore

This commit is contained in:
Dietmar Maurer 2020-07-08 08:05:44 +02:00
parent cc18a7d7f5
commit 31ea3e4872

View File

@ -252,18 +252,19 @@ pub extern "C" fn proxmox_backup_connect(
handle: *mut ProxmoxBackupHandle, handle: *mut ProxmoxBackupHandle,
error: *mut *mut c_char, error: *mut *mut c_char,
) -> c_int { ) -> c_int {
let task = backup_handle_to_task(handle);
let mut result: c_int = -1; let mut result: c_int = -1;
let mut got_result_condition = GotResultCondition::new(); let mut got_result_condition = GotResultCondition::new();
let callback_info = got_result_condition.callback_info(&mut result, error); let callback_info = got_result_condition.callback_info(&mut result, error);
task.runtime().spawn(async move { proxmox_backup_connect_async(
let result = task.connect().await; handle,
callback_info.send_result(result); callback_info.callback,
}); callback_info.callback_data,
callback_info.result,
callback_info.error,
);
got_result_condition.wait(); got_result_condition.wait();
@ -716,18 +717,19 @@ pub extern "C" fn proxmox_restore_connect(
handle: *mut ProxmoxRestoreHandle, handle: *mut ProxmoxRestoreHandle,
error: *mut *mut c_char, error: *mut *mut c_char,
) -> c_int { ) -> c_int {
let restore_task = restore_handle_to_task(handle);
let mut result: c_int = -1; let mut result: c_int = -1;
let mut got_result_condition = GotResultCondition::new(); let mut got_result_condition = GotResultCondition::new();
let callback_info = got_result_condition.callback_info(&mut result, error); let callback_info = got_result_condition.callback_info(&mut result, error);
restore_task.runtime().spawn(async move { proxmox_restore_connect_async(
let result = restore_task.connect().await; handle,
callback_info.send_result(result); callback_info.callback,
}); callback_info.callback_data,
callback_info.result,
callback_info.error,
);
got_result_condition.wait(); got_result_condition.wait();
@ -818,21 +820,17 @@ pub extern "C" fn proxmox_restore_open_image(
archive_name: *const c_char, archive_name: *const c_char,
error: * mut * mut c_char, error: * mut * mut c_char,
) -> c_int { ) -> c_int {
let restore_task = restore_handle_to_task(handle);
let mut result: c_int = -1; let mut result: c_int = -1;
let mut got_result_condition = GotResultCondition::new(); let mut got_result_condition = GotResultCondition::new();
let callback_info = got_result_condition.callback_info(&mut result, error); let callback_info = got_result_condition.callback_info(&mut result, error);
let archive_name = unsafe { tools::utf8_c_string_lossy_non_null(archive_name) }; proxmox_restore_open_image_async(
handle, archive_name,
restore_task.runtime().spawn(async move { callback_info.callback,
let result = match restore_task.open_image(archive_name).await { callback_info.callback_data,
Ok(res) => Ok(res as i32), callback_info.result,
Err(err) => Err(err) callback_info.error,
}; );
callback_info.send_result(result);
});
got_result_condition.wait(); got_result_condition.wait();
@ -852,6 +850,8 @@ pub extern "C" fn proxmox_restore_open_image_async(
) { ) {
let restore_task = restore_handle_to_task(handle); let restore_task = restore_handle_to_task(handle);
let callback_info = CallbackPointers { callback, callback_data, error, result }; let callback_info = CallbackPointers { callback, callback_data, error, result };
param_not_null!(archive_name, callback_info);
let archive_name = unsafe { tools::utf8_c_string_lossy_non_null(archive_name) }; let archive_name = unsafe { tools::utf8_c_string_lossy_non_null(archive_name) };
restore_task.runtime().spawn(async move { restore_task.runtime().spawn(async move {
@ -898,19 +898,19 @@ pub extern "C" fn proxmox_restore_read_image_at(
size: u64, size: u64,
error: * mut * mut c_char, error: * mut * mut c_char,
) -> c_int { ) -> c_int {
let restore_task = restore_handle_to_task(handle);
let mut result: c_int = -1; let mut result: c_int = -1;
let mut got_result_condition = GotResultCondition::new(); let mut got_result_condition = GotResultCondition::new();
let callback_info = got_result_condition.callback_info(&mut result, error); let callback_info = got_result_condition.callback_info(&mut result, error);
let data = DataPointer(data);
restore_task.runtime().spawn(async move { proxmox_restore_read_image_at_async(
let result = restore_task.read_image_at(aid, data, offset, size).await; handle, aid, data, offset, size,
callback_info.send_result(result); callback_info.callback,
}); callback_info.callback_data,
callback_info.result,
callback_info.error,
);
got_result_condition.wait(); got_result_condition.wait();
@ -944,6 +944,8 @@ pub extern "C" fn proxmox_restore_read_image_at_async(
let restore_task = restore_handle_to_task(handle); let restore_task = restore_handle_to_task(handle);
let callback_info = CallbackPointers { callback, callback_data, error, result }; let callback_info = CallbackPointers { callback, callback_data, error, result };
param_not_null!(data, callback_info);
let data = DataPointer(data); let data = DataPointer(data);
restore_task.runtime().spawn(async move { restore_task.runtime().spawn(async move {