#![allow(non_camel_case_types)]
use std::option::Option;
use std::os::raw::{c_char, c_int, c_long, c_uint, c_void};
pub type dfsan_label = u8;
pub type dfsan_origin = u32;
pub type dfsan_write_callback_t =
Option<unsafe extern "C" fn(fd: c_int, buf: *const c_void, count: usize)>;
pub type dfsan_conditional_callback_t =
Option<unsafe extern "C" fn(label: dfsan_label, origin: dfsan_origin)>;
pub type dfsan_reaches_function_callback_t = Option<
unsafe extern "C" fn(
label: dfsan_label,
origin: dfsan_origin,
file: *const c_char,
line: c_uint,
function: *const c_char,
),
>;
extern "C" {
pub fn dfsan_union(l1: dfsan_label, l2: dfsan_label) -> dfsan_label;
pub fn dfsan_set_label(label: dfsan_label, addr: *mut c_void, size: usize);
pub fn dfsan_add_label(label: dfsan_label, addr: *mut c_void, size: usize);
pub fn dfsan_get_label(data: c_long) -> dfsan_label;
pub fn dfsan_get_origin(data: c_long) -> dfsan_origin;
pub fn dfsan_read_label(addr: *const c_void, size: usize) -> dfsan_label;
pub fn dfsan_read_origin_of_first_taint(addr: *const c_void, size: usize) -> dfsan_origin;
pub fn dfsan_has_label(label: dfsan_label, elem: dfsan_label) -> c_int;
pub fn dfsan_flush();
pub fn dfsan_set_write_callback(labeled_write_callback: dfsan_write_callback_t);
pub fn dfsan_set_conditional_callback(callback: dfsan_conditional_callback_t);
pub fn dfsan_get_labels_in_signal_conditional() -> dfsan_label;
pub fn dfsan_set_reaches_function_callback(callback: dfsan_reaches_function_callback_t);
pub fn dfsan_get_labels_in_signal_reaches_function() -> dfsan_label;
pub fn dfsan_weak_hook_memcmp(
caller_pc: *mut c_void,
s1: *const c_void,
s2: *const c_void,
n: usize,
s1_label: dfsan_label,
s2_label: dfsan_label,
n_label: dfsan_label,
);
pub fn dfsan_weak_hook_strncmp(
caller_pc: *mut c_void,
s1: *const c_char,
s2: *const c_char,
n: usize,
s1_label: dfsan_label,
s2_label: dfsan_label,
n_label: dfsan_label,
);
pub fn dfsan_print_origin_trace(addr: *const c_void, description: *const c_char);
pub fn dfsan_print_origin_id_trace(origin: dfsan_origin);
pub fn dfsan_sprint_origin_trace(
addr: *const c_void,
description: *const c_char,
out_buf: *mut c_char,
out_buf_size: usize,
) -> usize;
pub fn dfsan_sprint_origin_id_trace(
origin: dfsan_origin,
out_buf: *mut c_char,
out_buf_size: usize,
) -> usize;
pub fn dfsan_sprint_stack_trace(out_buf: *mut c_char, out_buf_size: usize) -> usize;
pub fn dfsan_get_init_origin(addr: *const c_void) -> dfsan_origin;
pub fn dfsan_get_track_origins() -> c_int;
}