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