/* automatically generated by rust-bindgen */
#![allow(clippy::all)]

pub type __rlim64_t = u64;
pub type __u8 = u8;
pub type __u16 = u16;
pub type __u32 = u32;

pub type __uid_t = ::std::os::raw::c_uint;
pub type __gid_t = ::std::os::raw::c_uint;
pub type __pid_t = ::std::os::raw::c_int;
pub type rlim_t = __rlim64_t;
pub type gid_t = __gid_t;
pub type uid_t = __uid_t;
pub type pid_t = __pid_t;
#[repr(C)]
pub struct sock_filter {
    pub code: __u16,
    pub jt: __u8,
    pub jf: __u8,
    pub k: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct sock_fprog {
    pub len: ::std::os::raw::c_ushort,
    pub filter: *mut sock_filter,
}
pub const MINIJAIL_ERR_NO_ACCESS: _bindgen_ty_1 = _bindgen_ty_1::MINIJAIL_ERR_NO_ACCESS;
pub const MINIJAIL_ERR_NO_COMMAND: _bindgen_ty_1 = _bindgen_ty_1::MINIJAIL_ERR_NO_COMMAND;
pub const MINIJAIL_ERR_SIG_BASE: _bindgen_ty_1 = _bindgen_ty_1::MINIJAIL_ERR_SIG_BASE;
pub const MINIJAIL_ERR_PRELOAD: _bindgen_ty_1 = _bindgen_ty_1::MINIJAIL_ERR_PRELOAD;
pub const MINIJAIL_ERR_JAIL: _bindgen_ty_1 = _bindgen_ty_1::MINIJAIL_ERR_JAIL;
pub const MINIJAIL_ERR_INIT: _bindgen_ty_1 = _bindgen_ty_1::MINIJAIL_ERR_INIT;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum _bindgen_ty_1 {
    MINIJAIL_ERR_NO_ACCESS = 126,
    MINIJAIL_ERR_NO_COMMAND = 127,
    MINIJAIL_ERR_SIG_BASE = 128,
    MINIJAIL_ERR_PRELOAD = 252,
    MINIJAIL_ERR_JAIL = 253,
    MINIJAIL_ERR_INIT = 254,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct minijail {
    _unused: [u8; 0],
}
pub type minijail_hook_t = ::std::option::Option<
    unsafe extern "C" fn(context: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
>;
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum minijail_hook_event_t {
    MINIJAIL_HOOK_EVENT_PRE_DROP_CAPS = 0,
    MINIJAIL_HOOK_EVENT_PRE_EXECVE = 1,
    MINIJAIL_HOOK_EVENT_PRE_CHROOT = 2,
    MINIJAIL_HOOK_EVENT_MAX = 3,
}
extern "C" {
    pub fn minijail_new() -> *mut minijail;
}
extern "C" {
    pub fn minijail_change_uid(j: *mut minijail, uid: uid_t);
}
extern "C" {
    pub fn minijail_change_gid(j: *mut minijail, gid: gid_t);
}
extern "C" {
    pub fn minijail_set_supplementary_gids(j: *mut minijail, size: usize, list: *const gid_t);
}
extern "C" {
    pub fn minijail_keep_supplementary_gids(j: *mut minijail);
}
extern "C" {
    pub fn minijail_change_user(
        j: *mut minijail,
        user: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_change_group(
        j: *mut minijail,
        group: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_use_seccomp(j: *mut minijail);
}
extern "C" {
    pub fn minijail_no_new_privs(j: *mut minijail);
}
extern "C" {
    pub fn minijail_use_seccomp_filter(j: *mut minijail);
}
extern "C" {
    pub fn minijail_set_seccomp_filter_tsync(j: *mut minijail);
}
extern "C" {
    pub fn minijail_set_seccomp_filters(j: *mut minijail, filter: *const sock_fprog);
}
extern "C" {
    pub fn minijail_parse_seccomp_filters(j: *mut minijail, path: *const ::std::os::raw::c_char);
}
extern "C" {
    pub fn minijail_parse_seccomp_filters_from_fd(j: *mut minijail, fd: ::std::os::raw::c_int);
}
extern "C" {
    pub fn minijail_log_seccomp_filter_failures(j: *mut minijail);
}
extern "C" {
    pub fn minijail_use_caps(j: *mut minijail, capmask: u64);
}
extern "C" {
    pub fn minijail_capbset_drop(j: *mut minijail, capmask: u64);
}
extern "C" {
    pub fn minijail_set_ambient_caps(j: *mut minijail);
}
extern "C" {
    pub fn minijail_reset_signal_mask(j: *mut minijail);
}
extern "C" {
    pub fn minijail_reset_signal_handlers(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_vfs(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_enter_vfs(j: *mut minijail, ns_path: *const ::std::os::raw::c_char);
}
extern "C" {
    pub fn minijail_new_session_keyring(j: *mut minijail);
}
extern "C" {
    pub fn minijail_skip_setting_securebits(j: *mut minijail, securebits_skip_mask: u64);
}
extern "C" {
    pub fn minijail_skip_remount_private(j: *mut minijail);
}
extern "C" {
    pub fn minijail_remount_mode(j: *mut minijail, mode: ::std::os::raw::c_ulong);
}
extern "C" {
    pub fn minijail_namespace_ipc(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_uts(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_set_hostname(
        j: *mut minijail,
        name: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_namespace_net(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_enter_net(j: *mut minijail, ns_path: *const ::std::os::raw::c_char);
}
extern "C" {
    pub fn minijail_namespace_cgroups(j: *mut minijail);
}
extern "C" {
    pub fn minijail_close_open_fds(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_pids(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_pids_rw_proc(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_user(j: *mut minijail);
}
extern "C" {
    pub fn minijail_namespace_user_disable_setgroups(j: *mut minijail);
}
extern "C" {
    pub fn minijail_uidmap(
        j: *mut minijail,
        uidmap: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_gidmap(
        j: *mut minijail,
        gidmap: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_remount_proc_readonly(j: *mut minijail);
}
extern "C" {
    pub fn minijail_run_as_init(j: *mut minijail);
}
extern "C" {
    pub fn minijail_write_pid_file(
        j: *mut minijail,
        path: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_inherit_usergroups(j: *mut minijail);
}
extern "C" {
    pub fn minijail_use_alt_syscall(
        j: *mut minijail,
        table: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_rlimit(
        j: *mut minijail,
        type_: ::std::os::raw::c_int,
        cur: rlim_t,
        max: rlim_t,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_add_to_cgroup(
        j: *mut minijail,
        path: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_forward_signals(j: *mut minijail) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_create_session(j: *mut minijail) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_enter_chroot(
        j: *mut minijail,
        dir: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_enter_pivot_root(
        j: *mut minijail,
        dir: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_get_original_path(
        j: *mut minijail,
        chroot_path: *const ::std::os::raw::c_char,
    ) -> *mut ::std::os::raw::c_char;
}
extern "C" {
    pub fn minijail_mount_tmp(j: *mut minijail);
}
extern "C" {
    pub fn minijail_mount_tmp_size(j: *mut minijail, size: usize);
}
extern "C" {
    pub fn minijail_mount_dev(j: *mut minijail);
}
extern "C" {
    pub fn minijail_mount_with_data(
        j: *mut minijail,
        src: *const ::std::os::raw::c_char,
        dest: *const ::std::os::raw::c_char,
        type_: *const ::std::os::raw::c_char,
        flags: ::std::os::raw::c_ulong,
        data: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_mount(
        j: *mut minijail,
        src: *const ::std::os::raw::c_char,
        dest: *const ::std::os::raw::c_char,
        type_: *const ::std::os::raw::c_char,
        flags: ::std::os::raw::c_ulong,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_bind(
        j: *mut minijail,
        src: *const ::std::os::raw::c_char,
        dest: *const ::std::os::raw::c_char,
        writeable: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_add_hook(
        j: *mut minijail,
        hook: minijail_hook_t,
        payload: *mut ::std::os::raw::c_void,
        event: minijail_hook_event_t,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_preserve_fd(
        j: *mut minijail,
        parent_fd: ::std::os::raw::c_int,
        child_fd: ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_set_preload_path(
        j: *mut minijail,
        preload_path: *const ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_enter(j: *const minijail);
}
extern "C" {
    pub fn minijail_run(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_run_no_preload(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_run_pid(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
        pchild_pid: *mut pid_t,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_run_pipe(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
        pstdin_fd: *mut ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_run_pid_pipes(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
        pchild_pid: *mut pid_t,
        pstdin_fd: *mut ::std::os::raw::c_int,
        pstdout_fd: *mut ::std::os::raw::c_int,
        pstderr_fd: *mut ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_run_pid_pipes_no_preload(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
        pchild_pid: *mut pid_t,
        pstdin_fd: *mut ::std::os::raw::c_int,
        pstdout_fd: *mut ::std::os::raw::c_int,
        pstderr_fd: *mut ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_run_env_pid_pipes_no_preload(
        j: *mut minijail,
        filename: *const ::std::os::raw::c_char,
        argv: *const *mut ::std::os::raw::c_char,
        envp: *const *mut ::std::os::raw::c_char,
        pchild_pid: *mut pid_t,
        pstdin_fd: *mut ::std::os::raw::c_int,
        pstdout_fd: *mut ::std::os::raw::c_int,
        pstderr_fd: *mut ::std::os::raw::c_int,
    ) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_fork(j: *mut minijail) -> pid_t;
}
extern "C" {
    pub fn minijail_kill(j: *mut minijail) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_wait(j: *mut minijail) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn minijail_destroy(j: *mut minijail);
}
extern "C" {
    pub fn minijail_log_to_fd(fd: ::std::os::raw::c_int, min_priority: ::std::os::raw::c_int);
}
