Skip to main content

luaur_vm/functions/
lua_l_addvalue.rs

1use crate::functions::extendstrbuf::extendstrbuf;
2use crate::functions::lua_tolstring::lua_tolstring;
3use crate::macros::lua_pop::lua_pop;
4use crate::records::lua_l_strbuf::LuaLStrbuf;
5use crate::type_aliases::lua_state::lua_State;
6use core::ffi::c_char;
7use core::ptr::copy_nonoverlapping;
8
9pub fn lua_l_addvalue(B: *mut LuaLStrbuf) {
10    unsafe {
11        let L = (*B).L;
12
13        let mut vl: usize = 0;
14        let s = lua_tolstring(L, -1, &mut vl);
15
16        if !s.is_null() {
17            let current_buffer_size = (*B).end as usize - (*B).p as usize;
18            if current_buffer_size < vl as usize {
19                extendstrbuf(B, vl as usize - current_buffer_size, -2);
20            }
21
22            copy_nonoverlapping(s as *const u8, (*B).p as *mut u8, vl as usize);
23            (*B).p = (*B).p.add(vl as usize);
24
25            lua_pop(L, 1);
26        }
27    }
28}