So there are archives not in the index, not sure what to do with it
This commit is contained in:
10
src/main/java/net/runelite/cache/fs/Index.java
vendored
10
src/main/java/net/runelite/cache/fs/Index.java
vendored
@@ -9,9 +9,13 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import net.runelite.cache.fs.io.InputStream;
|
import net.runelite.cache.fs.io.InputStream;
|
||||||
import net.runelite.cache.fs.io.OutputStream;
|
import net.runelite.cache.fs.io.OutputStream;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
public class Index implements Closeable
|
public class Index implements Closeable
|
||||||
{
|
{
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(Index.class);
|
||||||
|
|
||||||
private final Store store;
|
private final Store store;
|
||||||
private final IndexFile index;
|
private final IndexFile index;
|
||||||
private final int id;
|
private final int id;
|
||||||
@@ -227,6 +231,12 @@ public class Index implements Closeable
|
|||||||
for (Archive a : archives)
|
for (Archive a : archives)
|
||||||
{
|
{
|
||||||
IndexEntry entry = this.index.read(a.getArchiveId());
|
IndexEntry entry = this.index.read(a.getArchiveId());
|
||||||
|
if (entry == null)
|
||||||
|
{
|
||||||
|
logger.warn("can't read archive " + a.getArchiveId() + " from index " + this.id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
assert this.index.getIndexFileId() == this.id;
|
assert this.index.getIndexFileId() == this.id;
|
||||||
assert entry.getId() == a.getArchiveId();
|
assert entry.getId() == a.getArchiveId();
|
||||||
DataFileReadResult res = store.getData().read(this.id, entry.getId(), entry.getSector(), entry.getLength()); // needs decompress etc...
|
DataFileReadResult res = store.getData().read(this.id, entry.getId(), entry.getSector(), entry.getLength()); // needs decompress etc...
|
||||||
|
|||||||
@@ -91,11 +91,20 @@ public class IndexFile implements Closeable
|
|||||||
idx.seek(id * INDEX_ENTRY_LEN);
|
idx.seek(id * INDEX_ENTRY_LEN);
|
||||||
int i = idx.read(buffer);
|
int i = idx.read(buffer);
|
||||||
if (i != INDEX_ENTRY_LEN)
|
if (i != INDEX_ENTRY_LEN)
|
||||||
logger.warn("short read");
|
{
|
||||||
|
logger.warn("short read for id {}: {}", id, i);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int length = ((buffer[0] & 0xFF) << 16) | ((buffer[1] & 0xFF) << 8) | (buffer[2] & 0xFF);
|
int length = ((buffer[0] & 0xFF) << 16) | ((buffer[1] & 0xFF) << 8) | (buffer[2] & 0xFF);
|
||||||
int sector = ((buffer[3] & 0xFF) << 16) | ((buffer[4] & 0xFF) << 8) | (buffer[5] & 0xFF);
|
int sector = ((buffer[3] & 0xFF) << 16) | ((buffer[4] & 0xFF) << 8) | (buffer[5] & 0xFF);
|
||||||
|
|
||||||
|
if (length <= 0 || sector <= 0)
|
||||||
|
{
|
||||||
|
logger.warn("invalid length or sector {}/{}", length, sector);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return new IndexEntry(this, id, sector, length);
|
return new IndexEntry(this, id, sector, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public class Store implements Closeable
|
|||||||
{
|
{
|
||||||
int id = i.getIndex().getIndexFileId();
|
int id = i.getIndex().getIndexFileId();
|
||||||
if (id == 5)
|
if (id == 5)
|
||||||
break;
|
continue;
|
||||||
i.load();
|
i.load();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user