Add EndIteration method to free memory allocated

in StartIteration. This method should always be called when the
iteration is over to make sure that we don't leak memory.

Change-Id: I5205c754dfafbab9bb5f06003c3663d2ec4e8a35
This commit is contained in:
Piotr Jastrzebski 2014-08-08 14:02:17 +01:00
parent 2f40ddf3f3
commit 79c8b34f36
2 changed files with 16 additions and 4 deletions

View File

@ -130,10 +130,10 @@ int32_t FindEntry(const ZipArchiveHandle handle, const char* entryName,
/*
* Start iterating over all entries of a zip file. The order of iteration
* is not guaranteed to be the same as the order of elements
* in the central directory but is stable for a given zip file. |cookie|
* must point to a writeable memory location, and will be set to the value
* of an opaque cookie which can be used to make one or more calls to
* Next.
* in the central directory but is stable for a given zip file. |cookie| will
* contain the value of an opaque cookie which can be used to make one or more
* calls to Next. All calls to StartIteration must be matched by a call to
* EndIteration to free any allocated memory.
*
* This method also accepts an optional prefix to restrict iteration to
* entry names that start with |prefix|.
@ -151,6 +151,12 @@ int32_t StartIteration(ZipArchiveHandle handle, void** cookie_ptr,
*/
int32_t Next(void* cookie, ZipEntry* data, ZipEntryName *name);
/*
* End iteration over all entries of a zip file and frees the memory allocated
* in StartIteration.
*/
void EndIteration(void* cookie);
/*
* Uncompress and write an entry to an open file identified by |fd|.
* |entry->uncompressed_length| bytes will be written to the file at

View File

@ -909,6 +909,12 @@ int32_t StartIteration(ZipArchiveHandle handle, void** cookie_ptr, const char* p
return 0;
}
void EndIteration(void* cookie) {
if (cookie != NULL) {
free(cookie);
}
}
int32_t FindEntry(const ZipArchiveHandle handle, const char* entryName,
ZipEntry* data) {
const ZipArchive* archive = (ZipArchive*) handle;