diff --git a/libs/memman.c b/libs/memman.c index 4a2f075..0fd8921 100644 --- a/libs/memman.c +++ b/libs/memman.c @@ -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(name)); - HANDLE h = CreateFileW(p.c_str(), GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); + HANDLE h = CreateFileW(p.c_str(), GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (h == INVALID_HANDLE_VALUE) throw std::runtime_error(std::string("Failed to open file for mapping: ")+p.string()); LARGE_INTEGER fsize;