luaur_vm/functions/
lua_l_addvalue.rs1use 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}