ext_php_rs/zend/
ini_entry_def.rs1use std::{ffi::CString, os::raw::c_char, ptr};
5
6use crate::{ffi::zend_ini_entry_def, ffi::zend_register_ini_entries, flags::IniEntryPermission};
7
8pub type IniEntryDef = zend_ini_entry_def;
14
15impl IniEntryDef {
16 pub fn new(name: String, default_value: String, permission: IniEntryPermission) -> Self {
18 let mut template = Self::end();
19 let name = CString::new(name).expect("Unable to create CString from name");
20 let value = CString::new(default_value).expect("Unable to create CString from value");
21 template.name_length = name.as_bytes().len() as _;
22 template.name = name.into_raw();
23 template.value_length = value.as_bytes().len() as _;
24 template.value = value.into_raw();
25 template.modifiable = IniEntryPermission::PerDir.bits() as _;
26 template.modifiable = permission.bits() as _;
27 template
28 }
29
30 pub fn end() -> Self {
32 Self {
33 name: ptr::null() as *const c_char,
34 on_modify: None,
35 mh_arg1: std::ptr::null_mut(),
36 mh_arg2: std::ptr::null_mut(),
37 mh_arg3: std::ptr::null_mut(),
38 value: std::ptr::null_mut(),
39 displayer: None,
40 modifiable: 0,
41 value_length: 0,
42 name_length: 0,
43 }
44 }
45
46 pub fn into_raw(self) -> *mut Self {
49 Box::into_raw(Box::new(self))
50 }
51
52 pub fn register(mut entries: Vec<Self>, module_number: i32) {
53 entries.push(Self::end());
54 let entries = Box::into_raw(entries.into_boxed_slice()) as *const Self;
55
56 unsafe { zend_register_ini_entries(entries, module_number) };
57 }
58}