From 22e58a034faf879506c3859d602051f0de18e24d Mon Sep 17 00:00:00 2001 From: Dude so hot Date: Thu, 11 Jul 2024 20:58:37 +0800 Subject: [PATCH] Fix memleak while do archive --- app/src/main/cpp/archive.c | 12 ++++++------ .../main/kotlin/com/hippo/ehviewer/jni/Archive.kt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/cpp/archive.c b/app/src/main/cpp/archive.c index 8cc8ddb75..24808bc6c 100644 --- a/app/src/main/cpp/archive.c +++ b/app/src/main/cpp/archive.c @@ -487,7 +487,7 @@ Java_com_hippo_ehviewer_jni_ArchiveKt_releaseByteBuffer(JNIEnv *env, jclass thiz if (!ADDR_IN_FILE_MAPPING(addr)) mempool_release_pages(addr, size); } -JNIEXPORT jboolean JNICALL +JNIEXPORT void JNICALL Java_com_hippo_ehviewer_jni_ArchiveKt_archiveFdBatch(JNIEnv *env, jclass clazz, jintArray fd_batch, jobjectArray names, jint arc_fd, jint size) { EH_UNUSED(clazz); struct archive *arc = archive_write_new(); @@ -509,15 +509,15 @@ Java_com_hippo_ehviewer_jni_ArchiveKt_archiveFdBatch(JNIEnv *env, jclass clazz, archive_entry_copy_stat(entry, &st); archive_entry_set_perm(entry, 0644); archive_write_header(arc, entry); - int len = read(fd, buff, sizeof(buff)); - while (len > 0) { - archive_write_data(arc, buff, len); + int len; + do { len = read(fd, buff, sizeof(buff)); - } + archive_write_data(arc, buff, len); + } while (len > 0); archive_write_finish_entry(arc); archive_entry_clear(entry); } + archive_entry_free(entry); archive_write_close(arc); archive_write_free(arc); - return true; } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/jni/Archive.kt b/app/src/main/kotlin/com/hippo/ehviewer/jni/Archive.kt index 502646eea..aac47515b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/jni/Archive.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/jni/Archive.kt @@ -10,4 +10,4 @@ external fun getExtension(index: Int): String external fun needPassword(): Boolean external fun providePassword(str: String): Boolean external fun closeArchive() -external fun archiveFdBatch(fdBatch: IntArray, names: Array, arcFd: Int, size: Int): Boolean +external fun archiveFdBatch(fdBatch: IntArray, names: Array, arcFd: Int, size: Int)