1
2
3
4use std::os::raw::{c_char, c_void};
5
6#[link(name="alpm")]
7extern {
8 fn vsnprintf(s: *mut c_char, num: usize,fmt: *mut c_char, args: VaList) -> i32;
9}
10
11#[repr(C)]
12#[derive(Debug,Copy,Clone)]
13pub struct VaListInner {
14 gp_offset: u32,
15 fp_offset: u32,
16 overflow_arg_area: *const c_void,
17 reg_save_area: *const c_void,
18}
19
20#[derive(Debug,Copy,Clone)]
21#[repr(C)]
22pub struct VaList{
23 innter: *mut VaListInner,
24}
25
26
27pub unsafe fn vsn_printf(fmt: *mut c_char, args: VaList) -> String{
28 let mut buf = vec![0;255];
29 vsnprintf(buf.as_mut_ptr(), buf.len(), fmt, args) as usize;
30 cstr!(buf.as_mut_ptr() as *mut c_char).to_string()
31}