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
104 pub fn folk_call_function_safe(
105 func_name: *const c_char,
106 retval: *mut zval,
107 param_count: c_uint,
108 params: *mut zval,
109 ) -> c_int;
110
111 pub fn folk_request_startup_safe() -> c_int;
112 pub fn folk_request_shutdown_safe() -> c_int;
113
114 pub fn folk_get_output(out_len: *mut usize) -> *const c_char;
115 pub fn folk_clear_output();
116 pub fn folk_free_output();
117
118 pub fn folk_zval_get_string(val: *mut zval, out_len: *mut usize) -> *const c_char;
119 pub fn folk_zval_get_long(val: *mut zval) -> i64;
120 pub fn folk_zval_type(val: *mut zval) -> c_int;
121 pub fn folk_zval_dtor(val: *mut zval);
122 pub fn folk_zval_undef(val: *mut zval);
123 pub fn folk_zval_set_string(val: *mut zval, str: *const c_char, len: usize);
124
125 pub fn folk_install_output_handler();
128}
129
130unsafe extern "C" {
133 pub fn folk_signals_save();
135
136 pub fn folk_signals_restore();
138
139 pub fn folk_sigsegv_handler_install();
141
142 pub fn folk_eval_string_protected(code: *const c_char, retval: *mut zval) -> c_int;
144
145 pub fn folk_call_function_protected(
147 func_name: *const c_char,
148 retval: *mut zval,
149 param_count: c_uint,
150 params: *mut zval,
151 ) -> c_int;
152}
153
154unsafe extern "C" {
157 pub fn folk_call_with_binary(
159 func_name: *const c_char,
160 method_name: *const c_char,
161 method_name_len: usize,
162 params: *const c_char,
163 params_len: usize,
164 response_buf: *mut *mut c_char,
165 response_len: *mut usize,
166 ) -> c_int;
167
168 pub fn folk_free_buffer(buf: *mut c_char);
170
171 pub fn folk_array_init(arr: *mut zval);
173
174 pub fn folk_array_add_string(
176 arr: *mut zval,
177 key: *const c_char,
178 key_len: usize,
179 val: *const c_char,
180 val_len: usize,
181 );
182
183 pub fn folk_array_add_long(arr: *mut zval, key: *const c_char, key_len: usize, val: i64);
185
186 pub fn folk_array_add_array(
188 arr: *mut zval,
189 key: *const c_char,
190 key_len: usize,
191 sub_arr: *mut zval,
192 );
193
194 pub fn folk_array_append_string(arr: *mut zval, val: *const c_char, val_len: usize);
196
197 pub fn folk_call_with_array(
199 func_name: *const c_char,
200 request_arr: *mut zval,
201 retval: *mut zval,
202 ) -> c_int;
203
204 pub fn folk_array_get_string(
206 arr: *mut zval,
207 key: *const c_char,
208 key_len: usize,
209 out_len: *mut usize,
210 ) -> *const c_char;
211
212 pub fn folk_array_get_long(arr: *mut zval, key: *const c_char, key_len: usize) -> i64;
214
215 pub fn folk_array_count(arr: *mut zval) -> usize;
217
218 pub fn folk_array_index_string(
220 arr: *mut zval,
221 index: usize,
222 out_len: *mut usize,
223 ) -> *const c_char;
224}
225
226pub const IS_UNDEF: c_int = 0;
229pub const IS_NULL: c_int = 1;
230pub const IS_FALSE: c_int = 2;
231pub const IS_TRUE: c_int = 3;
232pub const IS_LONG: c_int = 4;
233pub const IS_DOUBLE: c_int = 5;
234pub const IS_STRING: c_int = 6;
235pub const IS_ARRAY: c_int = 7;
236pub const IS_OBJECT: c_int = 8;