MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / load

Method load

ogsr_engine/xrGame/script_vars_storage.cpp:94–164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

92}
93
94int CScriptVarsTable::load(IReader& memory_stream)
95{
96 clear();
97 u32 var_count = memory_stream.r_u32();
98 is_array = true;
99 int loaded = 0;
100 // while (var_count-- > 0 && )
101 for (u32 n_var = 0; n_var < var_count && memory_stream.elapsed() >= 4; n_var++)
102 {
103 loaded++;
104 u32 pos = memory_stream.tell();
105 if (-1 == memory_stream.r_s32())
106 {
107 Msg("!#ERROR: script vars table %s loaded vars %d from %d, and found EOT flag ", name(), n_var, var_count);
108 // return;
109 }
110 else
111 memory_stream.seek(pos);
112
113 shared_str var_name;
114 SCRIPT_VAR sv;
115 memory_stream.r_stringZ(var_name);
116 sv.type = (int)memory_stream.r_u32();
117 sv.size = memory_stream.r_u32();
118 // MsgV ("3SCRIPT_VARS", "#DBG: CScriptVarsTable::load n_var = %3d type = 0x%08x size = %5d name = %s.%s ", n_var, sv.type, sv.size, name(), *var_name);
119 if (LUA_TTABLE == sv.eff_type())
120 {
121 memory_stream.seek(memory_stream.tell() - 4);
122 sv.T = xr_new<CScriptVarsTable>();
123 sv.T->add_ref();
124 sv.T->is_array = (sv.type & SVT_ARRAY_TABLE) > 0;
125 sv.T->zero_key = (sv.type & SVT_ARRAY_ZEROK) > 0;
126 sv.T->m_name.sprintf("%s.%s", name(), *var_name);
127 loaded += sv.T->load(memory_stream);
128 m_map[var_name] = sv;
129 continue;
130 }
131
132 if (LUA_TNETPACKET == sv.eff_type())
133 {
134 sv.P = xr_new<NET_Packet>();
135 sv.P->B.count = sv.size;
136 sv.P->r_seek(memory_stream.r_u32());
137 memory_stream.r(sv.P->B.data, sv.size);
138 m_map[var_name] = sv;
139 continue;
140 }
141
142 { // default var type
143 if (sv.size > sizeof(sv.s_value))
144 {
145 sv.data = xr_malloc(sv.size);
146 memory_stream.r(sv.data, sv.size);
147
148 if (LUA_TSTRING == sv.eff_type() && -1 == *(int*)sv.data) // явный выход за пределы чтения
149 Msg("!#WARN: probably string load failed = %s ", (LPCSTR)sv.data);
150 }
151 else

Callers 1

script_vars_importFunction · 0.45

Calls 15

MsgFunction · 0.85
xr_mallocFunction · 0.85
is_numberFunction · 0.85
eff_typeMethod · 0.80
add_refMethod · 0.80
r_seekMethod · 0.80
find_chunkMethod · 0.80
loadFunction · 0.70
clearFunction · 0.50
nameFunction · 0.50
r_u32Method · 0.45
elapsedMethod · 0.45

Tested by

no test coverage detected