#![allow(non_camel_case_types, clippy::missing_safety_doc, unsafe_code)]
use std::ffi::c_char;
use std::os::raw::{c_int, c_uint};
#[repr(C)]
pub struct zval {
_data: [u8; 16],
}
impl zval {
pub fn new_undef() -> Self {
let mut z = Self { _data: [0; 16] };
unsafe { folk_zval_undef(&mut z) };
z
}
}
#[repr(C)]
pub struct folk_request_context {
pub request_method: *const c_char,
pub request_uri: *const c_char,
pub query_string: *const c_char,
pub content_type: *const c_char,
pub content_length: usize,
pub path_translated: *const c_char,
pub post_data: *const c_char,
pub post_data_len: usize,
pub post_data_read: usize,
pub cookie_data: *const c_char,
pub header_names: *const *const c_char,
pub header_values: *const *const c_char,
pub header_count: usize,
pub server_name: *const c_char,
pub server_port: c_int,
pub protocol: *const c_char,
}
unsafe extern "C" {
pub fn php_embed_init(argc: c_int, argv: *mut *mut c_char) -> c_int;
pub fn php_embed_shutdown();
}
unsafe extern "C" {
pub fn folk_sapi_init() -> c_int;
pub fn folk_sapi_init_with_ini(ini_overrides: *const c_char) -> c_int;
pub fn folk_sapi_shutdown();
pub fn folk_request_context_set(ctx: *mut folk_request_context);
pub fn folk_request_context_clear();
}
unsafe extern "C" {
pub fn folk_response_status_code() -> c_int;
pub fn folk_response_header_count() -> usize;
pub fn folk_response_header_get(index: usize, out_len: *mut usize) -> *const c_char;
pub fn folk_response_clear();
pub fn folk_response_free();
}
unsafe extern "C" {
pub fn folk_eval_string_safe(code: *const c_char, retval: *mut zval) -> c_int;
pub fn folk_execute_script_safe(filename: *const c_char) -> c_int;
pub fn folk_call_function_safe(
func_name: *const c_char,
retval: *mut zval,
param_count: c_uint,
params: *mut zval,
) -> c_int;
pub fn folk_request_startup_safe() -> c_int;
pub fn folk_request_shutdown_safe() -> c_int;
pub fn folk_get_output(out_len: *mut usize) -> *const c_char;
pub fn folk_clear_output();
pub fn folk_free_output();
pub fn folk_zval_get_string(val: *mut zval, out_len: *mut usize) -> *const c_char;
pub fn folk_zval_get_long(val: *mut zval) -> i64;
pub fn folk_zval_type(val: *mut zval) -> c_int;
pub fn folk_zval_dtor(val: *mut zval);
pub fn folk_zval_undef(val: *mut zval);
pub fn folk_zval_set_string(val: *mut zval, str: *const c_char, len: usize);
pub fn folk_install_output_handler();
}
unsafe extern "C" {
pub fn folk_signals_save();
pub fn folk_signals_restore();
pub fn folk_sigsegv_handler_install();
pub fn folk_eval_string_protected(code: *const c_char, retval: *mut zval) -> c_int;
pub fn folk_call_function_protected(
func_name: *const c_char,
retval: *mut zval,
param_count: c_uint,
params: *mut zval,
) -> c_int;
}
unsafe extern "C" {
pub fn folk_call_with_binary(
func_name: *const c_char,
method_name: *const c_char,
method_name_len: usize,
params: *const c_char,
params_len: usize,
response_buf: *mut *mut c_char,
response_len: *mut usize,
) -> c_int;
pub fn folk_free_buffer(buf: *mut c_char);
pub fn folk_array_init(arr: *mut zval);
pub fn folk_array_add_string(
arr: *mut zval,
key: *const c_char,
key_len: usize,
val: *const c_char,
val_len: usize,
);
pub fn folk_array_add_long(arr: *mut zval, key: *const c_char, key_len: usize, val: i64);
pub fn folk_array_add_array(
arr: *mut zval,
key: *const c_char,
key_len: usize,
sub_arr: *mut zval,
);
pub fn folk_array_append_string(arr: *mut zval, val: *const c_char, val_len: usize);
pub fn folk_call_with_array(
func_name: *const c_char,
request_arr: *mut zval,
retval: *mut zval,
) -> c_int;
pub fn folk_array_get_string(
arr: *mut zval,
key: *const c_char,
key_len: usize,
out_len: *mut usize,
) -> *const c_char;
pub fn folk_array_get_long(arr: *mut zval, key: *const c_char, key_len: usize) -> i64;
pub fn folk_array_count(arr: *mut zval) -> usize;
pub fn folk_array_index_string(
arr: *mut zval,
index: usize,
out_len: *mut usize,
) -> *const c_char;
}
unsafe extern "C" {
pub fn folk_thread_init() -> *mut std::ffi::c_void;
pub fn folk_thread_set_ctx(ctx: *mut std::ffi::c_void);
pub fn folk_thread_shutdown(ctx: *mut std::ffi::c_void);
pub fn folk_is_zts() -> c_int;
}
pub const IS_UNDEF: c_int = 0;
pub const IS_NULL: c_int = 1;
pub const IS_FALSE: c_int = 2;
pub const IS_TRUE: c_int = 3;
pub const IS_LONG: c_int = 4;
pub const IS_DOUBLE: c_int = 5;
pub const IS_STRING: c_int = 6;
pub const IS_ARRAY: c_int = 7;
pub const IS_OBJECT: c_int = 8;