wip update to next servicepoint version

This commit is contained in:
Vinzenz Schroeter 2025-04-11 21:40:49 +02:00
commit 57d9e90b0f
13 changed files with 242 additions and 235 deletions

View file

@ -2,7 +2,7 @@
//!
//! prefix `sp_packet_`
use std::ptr::{null_mut, NonNull};
use std::ptr::{NonNull};
use crate::SPCommand;
@ -29,11 +29,12 @@ pub struct SPPacket(pub(crate) servicepoint::Packet);
#[no_mangle]
pub unsafe extern "C" fn sp_packet_from_command(
command: *mut SPCommand,
) -> NonNull<SPPacket> {
) -> *mut SPPacket {
assert!(!command.is_null());
let command = *Box::from_raw(command);
let result = Box::new(SPPacket(command.0.into()));
NonNull::from(Box::leak(result))
let command = unsafe {*Box::from_raw(command)};
if let Ok(packet) = command.0.try_into() {
Box::leak(Box::new(SPPacket(packet)))
} else { std::ptr::null_mut() }
}
/// Tries to load a [SPPacket] from the passed array with the specified length.
@ -58,9 +59,9 @@ pub unsafe extern "C" fn sp_packet_try_load(
length: usize,
) -> *mut SPPacket {
assert!(!data.is_null());
let data = std::slice::from_raw_parts(data, length);
let data = unsafe {std::slice::from_raw_parts(data, length)};
match servicepoint::Packet::try_from(data) {
Err(_) => null_mut(),
Err(_) => std::ptr::null_mut(),
Ok(packet) => Box::into_raw(Box::new(SPPacket(packet))),
}
}
@ -104,7 +105,7 @@ pub unsafe extern "C" fn sp_packet_from_parts(
let payload = if payload.is_null() {
vec![]
} else {
let payload = std::slice::from_raw_parts(payload, payload_len);
let payload = unsafe {std::slice::from_raw_parts(payload, payload_len) };
Vec::from(payload)
};
@ -143,7 +144,7 @@ pub unsafe extern "C" fn sp_packet_clone(
packet: *const SPPacket,
) -> NonNull<SPPacket> {
assert!(!packet.is_null());
let result = Box::new(SPPacket((*packet).0.clone()));
let result = Box::new(SPPacket(unsafe {(*packet).0.clone()}));
NonNull::from(Box::leak(result))
}
@ -162,5 +163,5 @@ pub unsafe extern "C" fn sp_packet_clone(
#[no_mangle]
pub unsafe extern "C" fn sp_packet_free(packet: *mut SPPacket) {
assert!(!packet.is_null());
_ = Box::from_raw(packet)
_ = unsafe {Box::from_raw(packet)}
}