Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79c8b34f authored by Piotr Jastrzebski's avatar Piotr Jastrzebski
Browse files

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
parent 2f40ddf3
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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;