Skip to main content

luaur_cli_lib/functions/
set_luau_flags_flags_alt_b.rs

1use 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}