… | |
… | |
26 | #include "logger.h" |
26 | #include "logger.h" |
27 | #include "cfperl.h" |
27 | #include "cfperl.h" |
28 | #include "kw_hash.h" |
28 | #include "kw_hash.h" |
29 | |
29 | |
30 | object_freezer::object_freezer () |
30 | object_freezer::object_freezer () |
31 | : dynbuf (128 * 1024, 64 * 1024) |
31 | : dynbuf_text (128 * 1024, 64 * 1024) |
32 | { |
32 | { |
33 | av = newAV (); |
33 | av = newAV (); |
34 | } |
34 | } |
35 | |
35 | |
36 | object_freezer::~object_freezer () |
36 | object_freezer::~object_freezer () |
… | |
… | |
172 | |
172 | |
173 | SV **svp = av_fetch ((AV *)av, oid, 0); |
173 | SV **svp = av_fetch ((AV *)av, oid, 0); |
174 | |
174 | |
175 | if (!svp || !SvROK (*svp)) |
175 | if (!svp || !SvROK (*svp)) |
176 | { |
176 | { |
177 | printf ("trying to thaw duplicate or never-issued oid %d, ignoring.\n", oid); |
177 | LOG (llevError, "trying to thaw duplicate or never-issued oid %d, ignoring.\n", oid); |
178 | return; |
178 | return; |
179 | } |
179 | } |
180 | |
180 | |
181 | if (!SvROK (*svp)) |
181 | if (!SvROK (*svp)) |
182 | { |
182 | { |
183 | LOG (llevError, "deserialised perl object is not an RV"); |
183 | LOG (llevError, "deserialised perl object is not an RV\n"); |
184 | return; |
184 | return; |
185 | } |
185 | } |
186 | |
186 | |
187 | HV *hv = (HV *)SvRV (*svp); |
187 | HV *hv = (HV *)SvRV (*svp); |
188 | |
188 | |
189 | if (SvTYPE (hv) != SVt_PVHV) |
189 | if (SvTYPE (hv) != SVt_PVHV) |
190 | { |
190 | { |
191 | LOG (llevError, "deserialised perl object is not a PVHV"); |
191 | LOG (llevError, "deserialised perl object is not a PVHV\n"); |
192 | return; |
192 | return; |
193 | } |
193 | } |
194 | |
194 | |
195 | if (obj->self) |
195 | if (obj->self) |
196 | { |
196 | { |
… | |
… | |
297 | |
297 | |
298 | for (;;) |
298 | for (;;) |
299 | { |
299 | { |
300 | char *p = line; |
300 | char *p = line; |
301 | |
301 | |
|
|
302 | if (*p <= ' ') |
|
|
303 | { |
|
|
304 | // skip whitespace (only some files need this) |
|
|
305 | while (*p == ' ' || *p == '\t') |
|
|
306 | p++; |
|
|
307 | |
|
|
308 | line = p; |
|
|
309 | } |
|
|
310 | |
302 | if (!*p) |
311 | if (!*p) |
303 | { |
312 | { |
304 | kw = KW_EOF; |
313 | kw = KW_EOF; |
305 | break; |
314 | break; |
306 | } |
315 | } |
… | |
… | |
309 | while (*p > ' ') |
318 | while (*p > ' ') |
310 | p++; |
319 | p++; |
311 | |
320 | |
312 | int klen = p - line; |
321 | int klen = p - line; |
313 | |
322 | |
|
|
323 | value = 0; |
|
|
324 | |
314 | if (*p++ != '\n') |
325 | if (*p++ != '\n') |
315 | { |
326 | { |
316 | // parse value |
327 | // parse value |
317 | while (*(unsigned char *)p <= ' ' && *p != '\n') // skip 0x01 .. 0x20 |
328 | while (*(unsigned char *)p <= ' ' && *p != '\n') |
318 | ++p; |
329 | ++p; |
319 | |
330 | |
320 | value = p; |
331 | value = p; |
321 | |
332 | |
322 | while (*p != '\n') |
333 | while (*p != '\n') |
323 | p++; |
334 | p++; |
324 | |
335 | |
325 | *p++ = 0; |
336 | *p++ = 0; |
326 | } |
337 | } |
327 | else |
|
|
328 | value = 0; |
|
|
329 | |
338 | |
330 | ++linenum; |
339 | ++linenum; |
331 | line [klen] = 0; |
340 | line [klen] = 0; |
332 | keyword_idx *kw_idx = kw_lex::match (line, klen); |
341 | keyword_idx *kw_idx = kw_lex::match (line, klen); |
333 | |
|
|
334 | //printf ("KV %d<%s,%s>\n", kw ? kw->index : 0, line, value);//D |
|
|
335 | |
342 | |
336 | kw_str = line; |
343 | kw_str = line; |
337 | line = p; |
344 | line = p; |
338 | |
345 | |
339 | if (kw_idx) |
346 | if (kw_idx) |