diff options
Diffstat (limited to 'src/ffi/luau/luacode.rs')
-rw-r--r-- | src/ffi/luau/luacode.rs | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/ffi/luau/luacode.rs b/src/ffi/luau/luacode.rs index 3f24b65..571db4c 100644 --- a/src/ffi/luau/luacode.rs +++ b/src/ffi/luau/luacode.rs @@ -1,6 +1,7 @@ //! Contains definitions from `luacode.h`. -use std::os::raw::{c_char, c_int}; +use std::os::raw::{c_char, c_int, c_void}; +use std::slice; #[repr(C)] pub struct lua_CompileOptions { @@ -13,10 +14,26 @@ pub struct lua_CompileOptions { } extern "C" { - pub fn luau_compile( + #[link_name = "luau_compile"] + pub fn luau_compile_( source: *const c_char, size: usize, options: *mut lua_CompileOptions, outsize: *mut usize, ) -> *mut c_char; + + fn free(p: *mut c_void); +} + +pub unsafe fn luau_compile(source: &[u8], mut options: lua_CompileOptions) -> Vec<u8> { + let mut outsize = 0; + let data_ptr = luau_compile_( + source.as_ptr() as *const c_char, + source.len(), + &mut options, + &mut outsize, + ); + let data = slice::from_raw_parts(data_ptr as *mut u8, outsize).to_vec(); + free(data_ptr as *mut c_void); + data } |