luaur_cli_lib/functions/
set_luau_flags_flags.rs1use 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}