| 293 | { |
| 294 | DEBUG("parsing " << headerextras.length() << " packets"); |
| 295 | loopv(headerextras) |
| 296 | { |
| 297 | ucharbuf q(headerextras[i]->data, headerextras[i]->len); |
| 298 | int type = headerextras[i]->flags & HX_TYPEMASK; |
| 299 | DEBUG("packet " << i << " type " << type); |
| 300 | bool deletethis = false; // (set deletethis for headers that persist outside headerextras and get reinserted by packheaderextras()) |
| 301 | if(!(ignoretypes & (1 << type))) switch(type) |
| 302 | { |
| 303 | case HX_EDITUNDO: |
| 304 | restoreeditundo(q); |
| 305 | break; |
| 306 | |
| 307 | case HX_CONFIG: |
| 308 | setcontext("map", "embedded"); |
| 309 | if(headerextras[i]->len > 0 && headerextras[i]->data[headerextras[i]->len - 1] == '\0') execute((const char *)q.buf); // needs to have '\0' at the end, better check... |
| 310 | else conoutf("malformed emb config"); |
| 311 | resetcontext(); |
| 312 | break; |
| 313 | |
| 314 | case HX_MAPINFO: |
| 315 | { |
| 316 | string l, c; |
| 317 | getstring(l, q, MAXSTRLEN - 1); |
| 318 | getstring(c, q, MAXSTRLEN - 1); |
| 319 | setmapinfo(l, c); |
| 320 | break; |
| 321 | } |
| 322 | case HX_MODEINFO: |
| 323 | case HX_ARTIST: |
| 324 | default: |
| 325 | break; |
| 326 | } |
| 327 | if(deletethis || (clearnonpersist && !(headerextras[i]->flags & HX_FLAG_PERSIST))) delete headerextras.remove(i--); |
| 328 | } |
| 329 | } |
| 330 | |
| 331 | ucharbuf packheaderextras(int ignoretypes = 0) // serialise all extra data packets to save with the map header |
no test coverage detected