Skip to content

Commit

Permalink
fix: capi input arguments
Browse files Browse the repository at this point in the history
Signed-off-by: peefy <[email protected]>
  • Loading branch information
Peefy committed Jul 24, 2024
1 parent 19fd8ef commit 8d9b496
Show file tree
Hide file tree
Showing 3 changed files with 194 additions and 71 deletions.
40 changes: 25 additions & 15 deletions kclvm/api/src/capi_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,13 +272,18 @@ where
let input_path = Path::new(TEST_DATA_PATH).join(input);
let input = fs::read_to_string(&input_path)
.unwrap_or_else(|_| panic!("Something went wrong reading {}", input_path.display()));
let args = unsafe {
CString::from_vec_unchecked(serde_json::from_str::<A>(&input).unwrap().encode_to_vec())
};
let args_vec = serde_json::from_str::<A>(&input).unwrap().encode_to_vec();
let args = unsafe { CString::from_vec_unchecked(args_vec.clone()) };
let call = CString::new(svc_name).unwrap();
let mut result_len: usize = 0;
let src_ptr =
kclvm_service_call_with_length(serv, call.as_ptr(), args.as_ptr(), &mut result_len);
let src_ptr = kclvm_service_call_with_length(
serv,
call.as_ptr(),
svc_name.len(),
args.as_ptr(),
args_vec.len(),
&mut result_len,
);

let mut dest_data: Vec<u8> = Vec::with_capacity(result_len);
unsafe {
Expand Down Expand Up @@ -313,19 +318,24 @@ where
{
let _test_lock = TEST_MUTEX.lock().unwrap();
let serv = kclvm_service_new(0);

let input_path = Path::new(TEST_DATA_PATH).join(input);
let input = fs::read_to_string(&input_path)
.unwrap_or_else(|_| panic!("Something went wrong reading {}", input_path.display()));
let args = unsafe {
CString::from_vec_unchecked(serde_json::from_str::<A>(&input).unwrap().encode_to_vec())
};
let call = CString::new(svc_name).unwrap();
let prev_hook = std::panic::take_hook();
// disable print panic info
std::panic::set_hook(Box::new(|_info| {}));
let result =
std::panic::catch_unwind(|| kclvm_service_call(serv, call.as_ptr(), args.as_ptr()));
let result = std::panic::catch_unwind(|| {
let input_path = Path::new(TEST_DATA_PATH).join(input);
let input = fs::read_to_string(&input_path)
.unwrap_or_else(|_| panic!("Something went wrong reading {}", input_path.display()));
let args_vec = serde_json::from_str::<A>(&input).unwrap().encode_to_vec();
let args = unsafe { CString::from_vec_unchecked(args_vec.clone()) };
let call = CString::new(svc_name).unwrap();
kclvm_service_call(
serv,
call.as_ptr(),
svc_name.len(),
args.as_ptr(),
args_vec.len(),
)
});
std::panic::set_hook(prev_hook);
match result {
Ok(result_ptr) => {
Expand Down
13 changes: 9 additions & 4 deletions kclvm/api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ pub use crate::gpyrpc::*;
use crate::service::capi::{kclvm_service_call_with_length, kclvm_service_new};
use crate::service::service_impl::KclvmServiceImpl;
use anyhow::Result;
use std::ffi::CString;
use std::ffi::c_char;

pub type API = KclvmServiceImpl;

Expand All @@ -55,10 +55,15 @@ pub fn call_with_plugin_agent<'a>(
) -> Result<Vec<u8>> {
let mut result_len: usize = 0;
let result_ptr = {
let args = unsafe { CString::from_vec_unchecked(args.to_vec()) };
let call = unsafe { CString::from_vec_unchecked(name.to_vec()) };
let serv = kclvm_service_new(plugin_agent);
kclvm_service_call_with_length(serv, call.as_ptr(), args.as_ptr(), &mut result_len)
kclvm_service_call_with_length(
serv,
name.as_ptr() as *const c_char,
name.len(),
args.as_ptr() as *const c_char,
name.len(),
&mut result_len,
)
};
let result = unsafe {
let mut dest_data: Vec<u8> = Vec::with_capacity(result_len);
Expand Down
Loading

0 comments on commit 8d9b496

Please sign in to comment.