luaur_cli_lib/functions/
set_luau_flags_flags_alt_b.rs1use core::ffi::c_char;
2
3use crate::functions::set_luau_flag::set_luau_flag;
4use crate::functions::set_luau_flags_flags::set_luau_flags_bool;
5
6pub fn set_luau_flags_c_char(list: *const c_char) {
7 if list.is_null() {
8 return;
9 }
10
11 let list_str = unsafe { core::ffi::CStr::from_ptr(list).to_string_lossy() };
12 let list_slice = list_str.as_bytes();
13
14 let mut rest = list_slice;
15
16 while !rest.is_empty() {
17 let ending = rest.iter().position(|&b| b == b',');
18 let element = if let Some(pos) = ending {
19 &rest[..pos]
20 } else {
21 &rest[..]
22 };
23
24 if let Some(separator) = element.iter().position(|&b| b == b'=') {
25 let key = &element[..separator];
26 let value = &element[separator + 1..];
27
28 let key_str = unsafe {
29 core::ffi::CStr::from_ptr(key.as_ptr() as *const c_char).to_string_lossy()
30 };
31 let value_str = unsafe {
32 core::ffi::CStr::from_ptr(value.as_ptr() as *const c_char).to_string_lossy()
33 };
34
35 if value_str == "true" || value_str == "True" {
36 set_luau_flag(&key_str, true);
37 } else if value_str == "false" || value_str == "False" {
38 set_luau_flag(&key_str, false);
39 } else {
40 eprintln!("Warning: unrecognized value '{}'.", value_str);
41 }
42 } else {
43 let element_str = unsafe {
44 core::ffi::CStr::from_ptr(element.as_ptr() as *const c_char).to_string_lossy()
45 };
46
47 if element_str == "true" || element_str == "True" {
48 set_luau_flags_bool(true);
49 } else if element_str == "false" || element_str == "False" {
50 set_luau_flags_bool(false);
51 } else {
52 set_luau_flag(&element_str, true);
53 }
54 }
55
56 if let Some(pos) = ending {
57 rest = &rest[pos + 1..];
58 } else {
59 break;
60 }
61 }
62}