avifil32: Remove the 1024 frame limit when recording AVI files
Bruno Jesus
00cpxxx at gmail.com
Tue Dec 30 22:19:26 CST 2014
Fixes https://bugs.winehq.org/show_bug.cgi?id=5137
-------------- next part --------------
diff --git a/dlls/avifil32/avifile.c b/dlls/avifil32/avifile.c
index af0315d..f5abc1c 100644
--- a/dlls/avifil32/avifile.c
+++ b/dlls/avifil32/avifile.c
@@ -1424,11 +1424,21 @@ static HRESULT AVIFILE_AddRecord(IAVIFileImpl *This)
/* pre-conditions */
assert(This != NULL && This->ppStreams[0] != NULL);
- if (This->idxRecords == NULL || This->cbIdxRecords == 0) {
- This->cbIdxRecords += 1024 * sizeof(AVIINDEXENTRY);
- This->idxRecords = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->cbIdxRecords);
- if (This->idxRecords == NULL)
+ if (This->idxRecords == NULL || This->cbIdxRecords / sizeof(AVIINDEXENTRY) <= This->nIdxRecords) {
+ DWORD new_count = This->cbIdxRecords + 1024 * sizeof(AVIINDEXENTRY);
+ void *mem;
+ if (!This->idxRecords)
+ mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, new_count);
+ else
+ mem = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->idxRecords, new_count);
+ if (mem) {
+ This->cbIdxRecords = new_count;
+ This->idxRecords = mem;
+ } else {
+ HeapFree(GetProcessHeap(), 0, This->idxRecords);
+ This->idxRecords = NULL;
return AVIERR_MEMORY;
+ }
}
assert(This->nIdxRecords < This->cbIdxRecords/sizeof(AVIINDEXENTRY));
More information about the wine-patches
mailing list