mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-26 17:12:31 -06:00
83 lines
3 KiB
Java
83 lines
3 KiB
Java
|
package androidx.multidex;
|
||
|
|
||
|
import io.flutter.embedding.android.KeyboardMap;
|
||
|
import java.io.File;
|
||
|
import java.io.IOException;
|
||
|
import java.io.RandomAccessFile;
|
||
|
import java.util.zip.CRC32;
|
||
|
import java.util.zip.ZipException;
|
||
|
import okhttp3.internal.http2.Http2Stream;
|
||
|
|
||
|
/* loaded from: classes2.dex */
|
||
|
final class ZipUtil {
|
||
|
private static final int BUFFER_SIZE = 16384;
|
||
|
private static final int ENDHDR = 22;
|
||
|
private static final int ENDSIG = 101010256;
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
/* loaded from: classes2.dex */
|
||
|
public static class CentralDirectory {
|
||
|
long offset;
|
||
|
long size;
|
||
|
|
||
|
CentralDirectory() {
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ZipUtil() {
|
||
|
}
|
||
|
|
||
|
/* JADX INFO: Access modifiers changed from: package-private */
|
||
|
public static long getZipCrc(File file) throws IOException {
|
||
|
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
|
||
|
try {
|
||
|
return computeCrcOfCentralDir(randomAccessFile, findCentralDirectory(randomAccessFile));
|
||
|
} finally {
|
||
|
randomAccessFile.close();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static CentralDirectory findCentralDirectory(RandomAccessFile randomAccessFile) throws IOException, ZipException {
|
||
|
long length = randomAccessFile.length();
|
||
|
long j = length - 22;
|
||
|
if (j < 0) {
|
||
|
throw new ZipException("File too short to be a zip file: " + randomAccessFile.length());
|
||
|
}
|
||
|
long j2 = length - 65558;
|
||
|
long j3 = j2 >= 0 ? j2 : 0L;
|
||
|
int reverseBytes = Integer.reverseBytes(ENDSIG);
|
||
|
do {
|
||
|
randomAccessFile.seek(j);
|
||
|
if (randomAccessFile.readInt() == reverseBytes) {
|
||
|
randomAccessFile.skipBytes(2);
|
||
|
randomAccessFile.skipBytes(2);
|
||
|
randomAccessFile.skipBytes(2);
|
||
|
randomAccessFile.skipBytes(2);
|
||
|
CentralDirectory centralDirectory = new CentralDirectory();
|
||
|
centralDirectory.size = Integer.reverseBytes(randomAccessFile.readInt()) & KeyboardMap.kValueMask;
|
||
|
centralDirectory.offset = Integer.reverseBytes(randomAccessFile.readInt()) & KeyboardMap.kValueMask;
|
||
|
return centralDirectory;
|
||
|
}
|
||
|
j--;
|
||
|
} while (j >= j3);
|
||
|
throw new ZipException("End Of Central Directory signature not found");
|
||
|
}
|
||
|
|
||
|
static long computeCrcOfCentralDir(RandomAccessFile randomAccessFile, CentralDirectory centralDirectory) throws IOException {
|
||
|
CRC32 crc32 = new CRC32();
|
||
|
long j = centralDirectory.size;
|
||
|
randomAccessFile.seek(centralDirectory.offset);
|
||
|
byte[] bArr = new byte[16384];
|
||
|
int read = randomAccessFile.read(bArr, 0, (int) Math.min(Http2Stream.EMIT_BUFFER_SIZE, j));
|
||
|
while (read != -1) {
|
||
|
crc32.update(bArr, 0, read);
|
||
|
j -= read;
|
||
|
if (j == 0) {
|
||
|
break;
|
||
|
}
|
||
|
read = randomAccessFile.read(bArr, 0, (int) Math.min(Http2Stream.EMIT_BUFFER_SIZE, j));
|
||
|
}
|
||
|
return crc32.getValue();
|
||
|
}
|
||
|
}
|