MCPcopy Create free account
hub / github.com/diasurgical/devilution / mpqapi_alloc_block

Function mpqapi_alloc_block

Source/mpqapi.cpp:343–380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

341}
342
343void mpqapi_alloc_block(int block_offset, int block_size)
344{
345 _BLOCKENTRY *block;
346 int i;
347
348 block = cur_archive.sgpBlockTbl;
349 i = 2048;
350 while (i-- != 0) {
351 if (block->offset && !block->flags && !block->sizefile) {
352 if (block->offset + block->sizealloc == block_offset) {
353 block_offset = block->offset;
354 block_size += block->sizealloc;
355 memset(block, 0, sizeof(_BLOCKENTRY));
356 mpqapi_alloc_block(block_offset, block_size);
357 return;
358 }
359 if (block_offset + block_size == block->offset) {
360 block_size += block->sizealloc;
361 memset(block, 0, sizeof(_BLOCKENTRY));
362 mpqapi_alloc_block(block_offset, block_size);
363 return;
364 }
365 }
366 block++;
367 }
368 if (block_offset + block_size > cur_archive.size) {
369 app_fatal("MPQ free list error");
370 }
371 if (block_offset + block_size == cur_archive.size) {
372 cur_archive.size = block_offset;
373 } else {
374 block = mpqapi_new_block(NULL);
375 block->offset = block_offset;
376 block->sizealloc = block_size;
377 block->sizefile = 0;
378 block->flags = 0;
379 }
380}
381
382_BLOCKENTRY *mpqapi_new_block(int *block_index)
383{

Callers 2

mpqapi_remove_hash_entryFunction · 0.85

Calls 2

app_fatalFunction · 0.85
mpqapi_new_blockFunction · 0.85

Tested by

no test coverage detected