sp_cmd_generic_try_from_packet return struct directly

This commit is contained in:
Vinzenz Schroeter 2025-05-18 11:20:57 +02:00
parent 389ced492c
commit c9d2479f5e
3 changed files with 24 additions and 8 deletions

View file

@ -74,10 +74,10 @@ impl SPCommand {
#[no_mangle]
pub unsafe extern "C" fn sp_cmd_generic_try_from_packet(
packet: NonNull<Packet>,
) -> *mut SPCommand {
) -> SPCommand {
let packet = *unsafe { Box::from_raw(packet.as_ptr()) };
heap_move_ok(servicepoint::TypedCommand::try_from(packet).map(|value| {
match value {
servicepoint::TypedCommand::try_from(packet)
.map(|value| match value {
TypedCommand::Clear(clear) => SPCommand {
tag: CommandTag::Clear,
data: CommandUnion {
@ -139,8 +139,11 @@ pub unsafe extern "C" fn sp_cmd_generic_try_from_packet(
bitmap_legacy: heap_move_nonnull(bitmap_legacy),
},
},
}
}))
})
.unwrap_or_else(move |_| SPCommand {
tag: CommandTag::Invalid,
data: CommandUnion { null: null_mut() },
})
}
/// Clones an [SPCommand] instance.
@ -219,6 +222,8 @@ pub unsafe extern "C" fn sp_cmd_generic_clone(command: SPCommand) -> SPCommand {
}
/// Deallocates an [SPCommand].
///
/// Commands with an invalid `tag` do not have to be freed as the `data` pointer should be null.
///
/// # Examples
///