oleaut32: Make typeinfo offsets table dynamic.
This commit is contained in:
parent
5e6016e2a7
commit
b0dcf32b85
|
@ -178,7 +178,8 @@ typedef struct tagICreateTypeLib2Impl
|
||||||
int typelib_guids; /* Number of defined typelib guids */
|
int typelib_guids; /* Number of defined typelib guids */
|
||||||
int typeinfo_guids; /* Number of defined typeinfo guids */
|
int typeinfo_guids; /* Number of defined typeinfo guids */
|
||||||
|
|
||||||
INT typelib_typeinfo_offsets[0x200]; /* Hope that's enough. */
|
INT *typelib_typeinfo_offsets;
|
||||||
|
int typeinfo_offsets_size;
|
||||||
|
|
||||||
INT *typelib_namehash_segment;
|
INT *typelib_namehash_segment;
|
||||||
INT *typelib_guidhash_segment;
|
INT *typelib_guidhash_segment;
|
||||||
|
@ -621,6 +622,21 @@ static int ctl2_alloc_typeinfo(
|
||||||
int offset;
|
int offset;
|
||||||
MSFT_TypeInfoBase *typeinfo;
|
MSFT_TypeInfoBase *typeinfo;
|
||||||
|
|
||||||
|
if (!This->typeinfo_offsets_size) {
|
||||||
|
This->typelib_typeinfo_offsets = heap_alloc(8*sizeof(INT));
|
||||||
|
if(!This->typelib_typeinfo_offsets)
|
||||||
|
return -1;
|
||||||
|
This->typeinfo_offsets_size = 8;
|
||||||
|
}else if (This->typelib_header.nrtypeinfos == This->typeinfo_offsets_size) {
|
||||||
|
INT *new_offsets = heap_realloc(This->typelib_typeinfo_offsets,
|
||||||
|
2*This->typeinfo_offsets_size*sizeof(INT));
|
||||||
|
if(!new_offsets)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
This->typelib_typeinfo_offsets = new_offsets;
|
||||||
|
This->typeinfo_offsets_size *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
offset = ctl2_alloc_segment(This, MSFT_SEG_TYPEINFO, sizeof(MSFT_TypeInfoBase), 0);
|
offset = ctl2_alloc_segment(This, MSFT_SEG_TYPEINFO, sizeof(MSFT_TypeInfoBase), 0);
|
||||||
if (offset == -1) return -1;
|
if (offset == -1) return -1;
|
||||||
|
|
||||||
|
@ -4338,6 +4354,7 @@ static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface)
|
||||||
heap_free(This->typelib_segment_data[i]);
|
heap_free(This->typelib_segment_data[i]);
|
||||||
This->typelib_segment_data[i] = NULL;
|
This->typelib_segment_data[i] = NULL;
|
||||||
}
|
}
|
||||||
|
heap_free(This->typelib_typeinfo_offsets);
|
||||||
|
|
||||||
SysFreeString(This->filename);
|
SysFreeString(This->filename);
|
||||||
This->filename = NULL;
|
This->filename = NULL;
|
||||||
|
|
Loading…
Reference in New Issue