From 04920883ea431d71a6206a4321208aad3648ca0e Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Thu, 10 Oct 2019 15:07:45 -0400 Subject: [PATCH] Change code for handling tar files --- .../topjohnwu/magisk/tasks/MagiskInstaller.kt | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.kt b/app/src/main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.kt index 9547adfb2..5357f9703 100644 --- a/app/src/main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.kt +++ b/app/src/main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.kt @@ -24,9 +24,11 @@ import org.kamranzafar.jtar.TarHeader import org.kamranzafar.jtar.TarInputStream import org.kamranzafar.jtar.TarOutputStream import timber.log.Timber -import java.io.* +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import java.io.InputStream import java.nio.ByteBuffer -import java.util.* import java.util.zip.ZipEntry import java.util.zip.ZipInputStream @@ -39,7 +41,7 @@ abstract class MagiskInstaller { private val console: MutableList private val logs: MutableList - private var isTar = false + private var tarOut: TarOutputStream? = null private val service: GithubRawServices by inject() private val context: Context by inject() @@ -150,7 +152,9 @@ abstract class MagiskInstaller { private fun handleTar(input: InputStream) { console.add("- Processing tar file") var vbmeta = false - withStreams(TarInputStream(input), TarOutputStream(destFile)) { tarIn, tarOut -> + val tarOut = TarOutputStream(destFile) + this.tarOut = tarOut + TarInputStream(input).use { tarIn -> lateinit var entry: TarEntry while (tarIn.nextEntry?.let { entry = it } != null) { if (entry.name.contains("boot.img") || entry.name.contains("recovery.img")) { @@ -214,8 +218,7 @@ abstract class MagiskInstaller { return false } it.reset() - if (Arrays.equals(magic, "ustar".toByteArray())) { - isTar = true + if (magic.contentEquals("ustar".toByteArray())) { destFile = File(Config.downloadDirectory, "magisk_patched.tar") handleTar(it) } else { @@ -292,15 +295,13 @@ abstract class MagiskInstaller { protected fun storeBoot(): Boolean { val patched = SuFile.open(installDir, "new-boot.img") try { - val os: OutputStream - if (isTar) { - os = TarOutputStream(destFile, true) - os.putNextEntry(newEntry( + val os = tarOut?.let { + it.putNextEntry(newEntry( if (srcBoot.contains("recovery")) "recovery.img" else "boot.img", patched.length())) - } else { - os = destFile.outputStream() - } + tarOut = null + it + } ?: destFile.outputStream() patched.suInputStream().use { it.copyTo(os); os.close() } } catch (e: IOException) { console.add("! Failed to output to $destFile")