trivially implement PassByValue for usize

This commit is contained in:
Dustin J. Mitchell 2022-02-06 16:26:09 +00:00
parent dadc9473d3
commit b0f7850711
3 changed files with 18 additions and 3 deletions

15
lib/src/atomic.rs Normal file
View file

@ -0,0 +1,15 @@
//! Trait implementations for a few atomic types
use crate::traits::*;
impl PassByValue for usize {
type CType = usize;
unsafe fn from_ctype(arg: usize) -> usize {
arg
}
fn as_ctype(self) -> usize {
self
}
}

View file

@ -4,6 +4,7 @@ mod traits;
mod util;
pub mod arrays;
pub mod atomic;
pub mod replica;
pub mod result;
pub mod status;

View file

@ -248,15 +248,14 @@ pub extern "C" fn tc_string_content_with_len(
// - lifetime of tcstring outlives the lifetime of this function
// - lifetime of tcstring outlives the lifetime of the returned pointer (promised by caller)
let tcstring = unsafe { TCString::from_arg_ref(tcstring) };
debug_assert!(!len_out.is_null());
let bytes = tcstring.as_bytes();
// SAFETY:
// - len_out is not NULL (checked by assertion, promised by caller)
// - len_out is not NULL (promised by caller)
// - len_out points to valid memory (promised by caller)
// - len_out is properly aligned (C convention)
unsafe { *len_out = bytes.len() };
unsafe { bytes.len().to_arg_out(len_out) };
bytes.as_ptr() as *const libc::c_char
}