diff --git a/source/durandal/ffi.rs b/source/durandal/ffi.rs index 5d61932..7140912 100644 --- a/source/durandal/ffi.rs +++ b/source/durandal/ffi.rs @@ -6,7 +6,7 @@ pub use std::{ffi::*, os::raw::*, ptr::{null, null_mut}}; /// Creates a C string from a literal. #[macro_export] macro_rules! c_str { - ($s:expr) => {concat!($s, "\0").as_ptr() as *const c_char}; + ($s:expr) => {concat!($s, "\0").as_ptr() as $crate::durandal::ffi::NT}; } impl CStringVec @@ -14,7 +14,7 @@ impl CStringVec /// Creates a new empty CStringVec. pub fn new() -> Self { - Self::default() + Self{sv: Vec::new(), cv: vec![null()]} } /// Creates a new `CStringVec` from an iterator. @@ -33,29 +33,32 @@ impl CStringVec /// Pushes a new `CString`. pub fn push(&mut self, st: CString) { - self.cv.push(st.as_c_str().as_ptr()); + self.cv.insert(self.cv.len() - 1, st.as_c_str().as_ptr()); self.sv.push(st); } /// Returns the FFI pointer. - pub fn as_ptr(&self) -> *const *const c_char + pub fn as_ptr(&self) -> *const NT { self.cv.as_ptr() } /// Returns the FFI pointer mutably. - pub fn as_mut_ptr(&mut self) -> *mut *const c_char + pub fn as_mut_ptr(&mut self) -> *mut NT { self.cv.as_mut_ptr() } } -/// An owned FFI-compatible string vector. -#[derive(Default)] +/// An owned null-terminated string vector. +#[derive(Debug)] pub struct CStringVec { sv: Vec, - cv: Vec<*const c_char>, + cv: Vec, } +/// A null-terminated byte string pointer. +pub type NT = *const c_char; + // EOF