cabinet/tests: Fix some memory leaks (Try 2)
Andrew Talbot
Andrew.Talbot at talbotville.com
Tue Sep 12 18:14:00 CDT 2006
Please use this one: the first effort had a fatal typo in it.
Thanks,
-- Andy.
---
Changelog:
cabinet/tests: Fix some memory leaks.
diff -urN a/dlls/cabinet/tests/extract.c b/dlls/cabinet/tests/extract.c
--- a/dlls/cabinet/tests/extract.c 2006-09-12 11:58:07.000000000 +0100
+++ b/dlls/cabinet/tests/extract.c 2006-09-13 00:04:19.000000000 +0100
@@ -334,6 +334,33 @@
return FALSE;
}
+static void remove_filelist_item(EXTRACTDEST *extractDest, struct ExtractFileList *item)
+{
+ struct ExtractFileList *p1, *p2;
+
+ for (p1 = extractDest->filelist; p1 != NULL && p1 != item && p1->next != item; p1 = p1->next)
+ ; /* VOID */
+
+ if (p1 == NULL)
+ return;
+
+ p2 = p1->next;
+
+ if (p1 == extractDest->filelist)
+ {
+ extractDest->filelist = p2;
+ free(p1->filename);
+ free(p1);
+ }
+ else
+ {
+ p1->next = p2->next;
+ free(p2->filename);
+ free(p2);
+ }
+}
+
+
static void test_Extract(void)
{
EXTRACTDEST extractDest;
@@ -392,8 +419,8 @@
ok(check_list(&extractDest, "a.txt", FALSE), "list entry wrong\n");
/* remove two of the files in the list */
- extractDest.filelist->next = extractDest.filelist->next->next;
- extractDest.filelist->next->next = NULL;
+ remove_filelist_item(&extractDest, extractDest.filelist->next);
+ remove_filelist_item(&extractDest, extractDest.filelist->next->next);
extractDest.filterlist = NULL;
CreateDirectoryA("dest", NULL);
res = pExtract(&extractDest, "extract.cab");
@@ -457,6 +484,10 @@
ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n");
ok(RemoveDirectoryA("dest"), "Expected dest\\testdir to exist\n");
+
+ /* release used memory */
+ while (extractDest.filelist != NULL)
+ remove_filelist_item(&extractDest, extractDest.filelist);
}
START_TEST(extract)
More information about the wine-patches
mailing list