Skip to main content

luaur_cli_lib/functions/
set_luau_flags_flags.rs

1use core::ffi::c_char;
2use core::sync::atomic::Ordering;
3
4use luaur_common::records::f_value::{FValue, FValueList};
5
6pub fn set_luau_flags_bool(state: bool) {
7    unsafe {
8        let mut flag_ptr = <bool as FValueList>::head().load(Ordering::Relaxed);
9
10        while !flag_ptr.is_null() {
11            let flag = &*flag_ptr;
12
13            let name_ptr = flag_ptr.cast::<FValueLayout<bool>>().read().name;
14
15            if !name_ptr.is_null() {
16                let name_cstr = core::ffi::CStr::from_ptr(name_ptr);
17                let name_bytes = name_cstr.to_bytes();
18
19                if name_bytes.starts_with(b"Luau") {
20                    flag.set(state);
21                }
22            }
23
24            flag_ptr = flag_ptr.cast::<FValueLayout<bool>>().read().next as *mut FValue<bool>;
25        }
26    }
27}
28
29#[repr(C)]
30struct FValueLayout<T> {
31    value: core::cell::UnsafeCell<T>,
32    dynamic: bool,
33    name: *const c_char,
34    next: *const FValue<T>,
35    version: core::ffi::c_uint,
36}