Make DDL directory allocated and copied (to support update DDLs in MapEdit)

This commit is contained in:
Ondrej Novak 2025-08-07 19:27:25 +02:00
parent b33fb43d78
commit 96e6435998
2 changed files with 10 additions and 4 deletions

View file

@ -178,8 +178,12 @@ static TNAMETABLE_REF load_file_table(const void *bmf_m)
const uint32_t *src_table = (const uint32_t *)bmf_m;
uint32_t grptabsiz = src_table[1];
TNAMETABLE_REF out;
out.data = (const TNAMETABLE *)((const char *)bmf_m + grptabsiz);
out.count = (out.data[0].seek - grptabsiz)/sizeof(TNAMETABLE);
const TNAMETABLE *ptr = (const TNAMETABLE *)((const char *)bmf_m + grptabsiz);
size_t count = (ptr[0].seek - grptabsiz)/sizeof(TNAMETABLE);
TNAMETABLE *tbl = NewArr(TNAMETABLE, count);
memcpy(tbl,ptr, count * sizeof(TNAMETABLE) );
out.data = tbl;
out.count = count;
return out;
}
@ -345,6 +349,7 @@ void reload_ddls(void) {
}
dinfo->ptr = bmf;
dinfo->size = bmf_s;
ablock_free(dinfo->nametable.data);
dinfo->nametable = load_file_table(bmf);
}
}
@ -641,8 +646,9 @@ void close_manager()
for(j=0;j<BK_MINOR_HANDLES;j ++) undef_handle(i*BK_MINOR_HANDLES+j);
free(_handles[i]);
}
for (int i = 0; i < MAX_PATCHES; ++i) {
for (int i = 0; i < MAX_PATCHES; ++i) if (ddlmap[i].ptr) {
unmap_file((void *)ddlmap[i].ptr, ddlmap[i].size);
ablock_free(ddlmap[i].nametable.data);
free(ddlmap[i].path);
}