difftreelog
feat upgrade bindings to new importbin result
in: master
2 files changed
bindings/jsonnet/src/import.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/import.rs
+++ b/bindings/jsonnet/src/import.rs
@@ -1,6 +1,7 @@
//! Import resolution manipulation utilities
use std::{
+ alloc::Layout,
any::Any,
cell::RefCell,
collections::HashMap,
@@ -25,8 +26,9 @@
base: *const c_char,
rel: *const c_char,
found_here: *mut *const c_char,
- success: &mut c_int,
-) -> *mut c_char;
+ buf: *mut *mut c_char,
+ buflen: *mut usize,
+) -> c_int;
/// Resolves imports using callback
#[derive(Trace)]
@@ -53,22 +55,31 @@
let base = unsafe { crate::unparse_path(&base) };
let rel = CString::new(path).unwrap();
let found_here: *mut c_char = null_mut();
- let mut success: i32 = 0;
- let result_ptr = unsafe {
+
+ let mut buf = null_mut();
+ let mut buf_len = 0;
+ let success = unsafe {
(self.cb)(
self.ctx,
base.as_ptr(),
rel.as_ptr(),
&mut (found_here as *const _),
- &mut success,
+ &mut buf,
+ &mut buf_len,
)
};
- let result_raw = unsafe { CStr::from_ptr(result_ptr) };
- let result_str = result_raw.to_str().unwrap();
+ let buf_slice: &[u8] = unsafe { std::slice::from_raw_parts(buf.cast(), buf_len) };
+ unsafe {
+ std::alloc::dealloc(
+ buf.cast(),
+ Layout::from_size_align(buf_len, 1).expect("layout is valid"),
+ );
+ };
+ let buf_intern = buf_slice.to_vec();
+
assert!(success == 0 || success == 1);
if success == 0 {
- unsafe { CString::from_raw(result_ptr) };
- let result = result_str.to_owned();
+ let result = String::from_utf8(buf_intern).expect("error should be valid string");
throw!(ImportCallbackError(result));
}
@@ -82,8 +93,7 @@
let mut out = self.out.borrow_mut();
if !out.contains_key(&found_here_buf) {
- out.insert(found_here_buf.clone(), result_str.into());
- unsafe { CString::from_raw(result_ptr) };
+ out.insert(found_here_buf.clone(), buf_intern);
}
Ok(found_here_buf)
bindings/jsonnet/src/lib.rsdiffbeforeafterboth40/// then there is a mismatch between header and compiled library.40/// then there is a mismatch between header and compiled library.41#[no_mangle]41#[no_mangle]42pub extern "C" fn jsonnet_version() -> &'static [u8; 8] {42pub extern "C" fn jsonnet_version() -> &'static [u8; 8] {43 b"v0.16.0\0"43 b"v0.19.1\0"44}44}454546unsafe fn parse_path(input: &CStr) -> Cow<Path> {46unsafe fn parse_path(input: &CStr) -> Cow<Path> {