folk_runtime_embed/
ffi.rs1#![allow(non_camel_case_types, clippy::missing_safety_doc, unsafe_code)]
7
8use std::ffi::c_char;
9use std::os::raw::{c_int, c_uint};
10
11#[repr(C)]
14pub struct zval {
15 _data: [u8; 16],
17}
18
19impl zval {
20 pub fn new_undef() -> Self {
22 let mut z = Self { _data: [0; 16] };
23 unsafe { folk_zval_undef(&mut z) };
24 z
25 }
26}
27
28#[repr(C)]
31pub struct folk_request_context {
32 pub request_method: *const c_char,
33 pub request_uri: *const c_char,
34 pub query_string: *const c_char,
35 pub content_type: *const c_char,
36 pub content_length: usize,
37 pub path_translated: *const c_char,
38
39 pub post_data: *const c_char,
40 pub post_data_len: usize,
41 pub post_data_read: usize,
42
43 pub cookie_data: *const c_char,
44
45 pub header_names: *const *const c_char,
46 pub header_values: *const *const c_char,
47 pub header_count: usize,
48
49 pub server_name: *const c_char,
50 pub server_port: c_int,
51 pub protocol: *const c_char,
52}
53
54unsafe extern "C" {
57 pub fn php_embed_init(argc: c_int, argv: *mut *mut c_char) -> c_int;
58 pub fn php_embed_shutdown();
59}
60
61unsafe extern "C" {
64 pub fn folk_sapi_init() -> c_int;
66
67 pub fn folk_sapi_init_with_ini(ini_overrides: *const c_char) -> c_int;
69
70 pub fn folk_sapi_shutdown();
72
73 pub fn folk_request_context_set(ctx: *mut folk_request_context);
75
76 pub fn folk_request_context_clear();
78}
79
80unsafe extern "C" {
83 pub fn folk_response_status_code() -> c_int;
85
86 pub fn folk_response_header_count() -> usize;
88
89 pub fn folk_response_header_get(index: usize, out_len: *mut usize) -> *const c_char;
91
92 pub fn folk_response_clear();
94
95 pub fn folk_response_free();
97}
98
99unsafe extern "C" {
102 pub fn folk_eval_string_safe(code: *const c_char, retval: *mut zval) -> c_int;
103 pub fn folk_execute_script_safe(filename: *const c_char) -> c_int;
104
105 pub fn folk_call_function_safe(
106 func_name: *const c_char,
107 retval: *mut zval,
108 param_count: c_uint,
109 params: *mut zval,
110 ) -> c_int;
111
112 pub fn folk_request_startup_safe() -> c_int;
113 pub fn folk_request_shutdown_safe() -> c_int;
114
115 pub fn folk_get_output(out_len: *mut usize) -> *const c_char;
116 pub fn folk_clear_output();
117 pub fn folk_free_output();
118
119 pub fn folk_zval_get_string(val: *mut zval, out_len: *mut usize) -> *const c_char;
120 pub fn folk_zval_get_long(val: *mut zval) -> i64;
121 pub fn folk_zval_type(val: *mut zval) -> c_int;
122 pub fn folk_zval_dtor(val: *mut zval);
123 pub fn folk_zval_undef(val: *mut zval);
124 pub fn folk_zval_set_string(val: *mut zval, str: *const c_char, len: usize);
125
126 pub fn folk_install_output_handler();
129}
130
131unsafe extern "C" {
134 pub fn folk_signals_save();
136
137 pub fn folk_signals_restore();
139
140 pub fn folk_sigsegv_handler_install();
142
143 pub fn folk_eval_string_protected(code: *const c_char, retval: *mut zval) -> c_int;
145
146 pub fn folk_call_function_protected(
148 func_name: *const c_char,
149 retval: *mut zval,
150 param_count: c_uint,
151 params: *mut zval,
152 ) -> c_int;
153}
154
155unsafe extern "C" {
158 pub fn folk_call_with_binary(
160 func_name: *const c_char,
161 method_name: *const c_char,
162 method_name_len: usize,
163 params: *const c_char,
164 params_len: usize,
165 response_buf: *mut *mut c_char,
166 response_len: *mut usize,
167 ) -> c_int;
168
169 pub fn folk_free_buffer(buf: *mut c_char);
171
172 pub fn folk_array_init(arr: *mut zval);
174
175 pub fn folk_array_add_string(
177 arr: *mut zval,
178 key: *const c_char,
179 key_len: usize,
180 val: *const c_char,
181 val_len: usize,
182 );
183
184 pub fn folk_array_add_long(arr: *mut zval, key: *const c_char, key_len: usize, val: i64);
186
187 pub fn folk_array_add_array(
189 arr: *mut zval,
190 key: *const c_char,
191 key_len: usize,
192 sub_arr: *mut zval,
193 );
194
195 pub fn folk_array_append_string(arr: *mut zval, val: *const c_char, val_len: usize);
197
198 pub fn folk_call_with_array(
200 func_name: *const c_char,
201 request_arr: *mut zval,
202 retval: *mut zval,
203 ) -> c_int;
204
205 pub fn folk_array_get_string(
207 arr: *mut zval,
208 key: *const c_char,
209 key_len: usize,
210 out_len: *mut usize,
211 ) -> *const c_char;
212
213 pub fn folk_array_get_long(arr: *mut zval, key: *const c_char, key_len: usize) -> i64;
215
216 pub fn folk_array_count(arr: *mut zval) -> usize;
218
219 pub fn folk_array_index_string(
221 arr: *mut zval,
222 index: usize,
223 out_len: *mut usize,
224 ) -> *const c_char;
225}
226
227unsafe extern "C" {
230 pub fn folk_thread_init() -> *mut std::ffi::c_void;
232
233 pub fn folk_thread_set_ctx(ctx: *mut std::ffi::c_void);
235
236 pub fn folk_thread_shutdown(ctx: *mut std::ffi::c_void);
238
239 pub fn folk_is_zts() -> c_int;
241}
242
243pub const IS_UNDEF: c_int = 0;
246pub const IS_NULL: c_int = 1;
247pub const IS_FALSE: c_int = 2;
248pub const IS_TRUE: c_int = 3;
249pub const IS_LONG: c_int = 4;
250pub const IS_DOUBLE: c_int = 5;
251pub const IS_STRING: c_int = 6;
252pub const IS_ARRAY: c_int = 7;
253pub const IS_OBJECT: c_int = 8;