use crate::insn::Insn;
use core::ptr::NonNull;
extern "C" {
pub fn cs_version(major: *mut libc::c_int, minor: *mut libc::c_int) -> libc::c_int;
pub fn cs_support(query: libc::c_int) -> bool;
pub fn cs_open(arch: Arch, mode: Mode, csh: *mut Handle) -> Error;
pub fn cs_close(handle: *mut Handle) -> Error;
pub fn cs_option(handle: Handle, type_: OptType, value: libc::size_t) -> Error;
pub fn cs_malloc<'s>(handle: Handle) -> *mut crate::insn::Insn<'s>;
pub fn cs_free(insn: *mut Insn, count: libc::size_t);
pub fn cs_errno(handle: Handle) -> Error;
pub fn cs_reg_name(handle: Handle, reg_id: libc::c_uint) -> *const libc::c_char;
pub fn cs_insn_name(handle: Handle, insn_id: libc::c_uint) -> *const libc::c_char;
pub fn cs_group_name(handle: Handle, group_id: libc::c_uint) -> *const libc::c_char;
pub fn cs_regs_access(
handle: Handle,
insn: *const Insn,
regs_read: *mut crate::Reg,
regs_read_count: *mut u8,
regs_write: *mut crate::Reg,
regs_write_count: *mut u8,
) -> Error;
pub fn cs_disasm(
handle: Handle,
code: *const u8,
code_size: libc::size_t,
address: u64,
count: libc::size_t,
insn: *mut *mut crate::insn::Insn,
) -> libc::size_t;
pub fn cs_disasm_iter(
handle: Handle,
code: *mut *const u8,
size: *mut libc::size_t,
address: *mut u64,
insn: *mut crate::insn::Insn,
) -> bool;
}
#[cfg(test)]
extern "C" {
fn ep_helper__get_value(name: *const libc::c_char, len: libc::size_t) -> libc::size_t;
}
#[cfg(test)]
pub fn get_test_val(name: &str) -> usize {
unsafe {
ep_helper__get_value(
name.as_ptr() as *const libc::c_char,
name.len() as libc::size_t,
) as usize
}
}
pub type SkipdataCallback = extern "C" fn(
code: *mut u8,
code_size: *mut libc::size_t,
offset: libc::size_t,
user_data: *mut libc::c_void,
) -> libc::size_t;
#[repr(C)]
pub struct OptSkipdataSetup {
pub mnemonic: Option<NonNull<libc::c_char>>,
pub callback: Option<SkipdataCallback>,
pub userdata: *mut libc::c_void,
}
#[repr(C)]
pub struct OptMnemonic {
pub id: libc::c_int,
pub mnemonic: *const libc::c_char,
}
#[repr(C)]
pub enum OptType {
#[allow(dead_code)]
Invalid = 0,
Syntax,
Detail,
Mode,
#[allow(dead_code)]
Mem,
Skipdata,
SkipdataSetup,
Mnemonic,
Unsigned,
}
pub const OPT_VALUE_OFF: libc::size_t = 0;
pub const OPT_VALUE_ON: libc::size_t = 3;
pub const OPT_VALUE_SYNTAX_DEFAULT: libc::size_t = 0;
pub const OPT_VALUE_SYNTAX_INTEL: libc::size_t = 1;
pub const OPT_VALUE_SYNTAX_ATT: libc::size_t = 2;
pub const OPT_VALUE_SYNTAX_NOREGNAME: libc::size_t = 3;
pub const OPT_VALUE_SYNTAX_MASM: libc::size_t = 4;
#[repr(transparent)]
pub struct Arch(pub libc::c_int);
#[repr(transparent)]
pub struct Mode(pub libc::c_int);
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct Handle(pub libc::size_t);
#[repr(transparent)]
pub struct Error(pub libc::c_int);