mirror of
https://github.com/revanced/revanced-manager
synced 2024-05-14 13:56:57 +02:00
fix: permission error when using installed app
This commit is contained in:
parent
7aea9473de
commit
f6563b265b
@ -30,7 +30,7 @@ object Aligning {
|
||||
}
|
||||
|
||||
file.copyEntriesFromFileAligned(
|
||||
ZipFile(inputFile),
|
||||
ZipFile(inputFile, readonly = true),
|
||||
ZipAligner::getEntryAlignment
|
||||
)
|
||||
}
|
||||
|
@ -5,16 +5,17 @@ import app.revanced.manager.patcher.alignment.zip.structures.ZipEntry
|
||||
|
||||
import java.io.Closeable
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.io.RandomAccessFile
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.channels.FileChannel
|
||||
import java.util.zip.CRC32
|
||||
import java.util.zip.Deflater
|
||||
|
||||
class ZipFile(file: File) : Closeable {
|
||||
class ZipFile(file: File, private val readonly: Boolean = false) : Closeable {
|
||||
var entries: MutableList<ZipEntry> = mutableListOf()
|
||||
|
||||
private val filePointer: RandomAccessFile = RandomAccessFile(file, "rw")
|
||||
private val filePointer: RandomAccessFile = RandomAccessFile(file, if (readonly) "r" else "rw")
|
||||
private var CDNeedsRewrite = false
|
||||
|
||||
private val compressionLevel = 5
|
||||
@ -34,6 +35,10 @@ class ZipFile(file: File) : Closeable {
|
||||
filePointer.seek(0)
|
||||
}
|
||||
|
||||
private fun assertWritable() {
|
||||
if (readonly) throw IOException("Archive is read-only")
|
||||
}
|
||||
|
||||
private fun findEndRecord(): ZipEndRecord {
|
||||
//look from end to start since end record is at the end
|
||||
for (i in filePointer.length() - 1 downTo 0) {
|
||||
@ -110,6 +115,8 @@ class ZipFile(file: File) : Closeable {
|
||||
}
|
||||
|
||||
fun addEntryCompressData(entry: ZipEntry, data: ByteArray) {
|
||||
assertWritable()
|
||||
|
||||
val compressor = Deflater(compressionLevel, true)
|
||||
compressor.setInput(data)
|
||||
compressor.finish()
|
||||
@ -136,6 +143,8 @@ class ZipFile(file: File) : Closeable {
|
||||
}
|
||||
|
||||
private fun addEntryCopyData(entry: ZipEntry, data: ByteBuffer, alignment: Int? = null) {
|
||||
assertWritable()
|
||||
|
||||
alignment?.let {
|
||||
//calculate where data would end up
|
||||
val dataOffset = filePointer.filePointer + entry.LFHSize
|
||||
@ -162,6 +171,8 @@ class ZipFile(file: File) : Closeable {
|
||||
}
|
||||
|
||||
fun copyEntriesFromFileAligned(file: ZipFile, entryAlignment: (entry: ZipEntry) -> Int?) {
|
||||
assertWritable()
|
||||
|
||||
for (entry in file.entries) {
|
||||
if (entries.any { it.fileName == entry.fileName }) continue //don't add duplicates
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user