diff --git a/src/de/mas/wiiu/jnus/entities/fst/FSTEntry.java b/src/de/mas/wiiu/jnus/entities/fst/FSTEntry.java index 800cf73..9e60e21 100644 --- a/src/de/mas/wiiu/jnus/entities/fst/FSTEntry.java +++ b/src/de/mas/wiiu/jnus/entities/fst/FSTEntry.java @@ -16,6 +16,7 @@ ****************************************************************************/ package de.mas.wiiu.jnus.entities.fst; +import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; @@ -37,7 +38,6 @@ public class FSTEntry { public static final byte FSTEntry_notInNUS = (byte) 0x80; @Getter private final String filename; - @Getter private final String path; @Getter private final FSTEntry parent; @Getter private final List children = new ArrayList<>(); @@ -91,6 +91,17 @@ public class FSTEntry { return getPath() + getFilename(); } + private StringBuilder getPathInternal() { + if (parent != null) { + return parent.getPathInternal().append(parent.getFilename()).append(File.separator); + } + return new StringBuilder(); + } + + public String getPath() { + return getPathInternal().toString(); + } + public int getEntryCount() { int count = 1; for (FSTEntry entry : getChildren()) { @@ -174,14 +185,13 @@ public class FSTEntry { @Override public String toString() { - return "FSTEntry [filename=" + filename + ", path=" + path + ", flags=" + flags + ", filesize=" + fileSize + ", fileoffset=" + fileOffset + ", content=" - + content + ", isDir=" + isDir + ", isRoot=" + isRoot + ", notInPackage=" + isNotInPackage + "]"; + return "FSTEntry [filename=" + getFilename() + ", path=" + getPath() + ", flags=" + flags + ", filesize=" + fileSize + ", fileoffset=" + fileOffset + + ", content=" + content + ", isDir=" + isDir + ", isRoot=" + isRoot + ", notInPackage=" + isNotInPackage + "]"; } @Data protected static class FSTEntryParam { private String filename = ""; - private String path = ""; private FSTEntry parent = null; diff --git a/src/de/mas/wiiu/jnus/entities/fst/FSTService.java b/src/de/mas/wiiu/jnus/entities/fst/FSTService.java index cc243dd..9b157cc 100644 --- a/src/de/mas/wiiu/jnus/entities/fst/FSTService.java +++ b/src/de/mas/wiiu/jnus/entities/fst/FSTService.java @@ -39,10 +39,6 @@ public final class FSTService { int level = 0; int[] LEntry = new int[16]; int[] Entry = new int[16]; - String[] pathStrings = new String[16]; - for (int i = 0; i < 16; i++) { - pathStrings[i] = ""; - } HashMap fstEntryToOffsetMap = new HashMap<>(); Entry[level] = 0; @@ -51,9 +47,7 @@ public final class FSTService { fstEntryToOffsetMap.put(0, rootEntry); int lastlevel = level; - String path = File.separator; - FSTEntry last = null; for (int i = 1; i < totalEntries; i++) { int entryOffset = i; @@ -68,7 +62,6 @@ public final class FSTService { FSTEntryParam entryParam = new FSTEntry.FSTEntryParam(); if (lastlevel != level) { - path = pathStrings[level] + getFullPath(level - 1, level, fstSection, namesSection, Entry); lastlevel = level; } @@ -92,7 +85,6 @@ public final class FSTService { parent = fstEntryToOffsetMap.get(parentOffset); Entry[level] = i; LEntry[level++] = nextOffset; - pathStrings[level] = path; if (level > 15) { log.warning("level > 15"); @@ -107,7 +99,6 @@ public final class FSTService { entryParam.setFlags(flags); entryParam.setFilename(filename); - entryParam.setPath(path); if (contentsByIndex != null) { Content content = contentsByIndex.get((int) contentIndex); @@ -129,7 +120,6 @@ public final class FSTService { entryParam.setParent(parent); FSTEntry entry = new FSTEntry(entryParam); - last = entry; fstEntryToOffsetMap.put(entryOffset, entry); } @@ -154,15 +144,4 @@ public final class FSTService { return (new String(Arrays.copyOfRange(namesSection, nameOffset, nameOffset + j))); } - public static String getFullPath(int startlevel, int endlevel, byte[] fstSection, byte[] namesSection, int[] Entry) { - StringBuilder sb = new StringBuilder(); - for (int i = startlevel; i < endlevel; i++) { - int entryOffset = Entry[i] * 0x10; - byte[] entryData = Arrays.copyOfRange(fstSection, entryOffset, entryOffset + 10); - String entryName = getName(entryData, namesSection); - - sb.append(entryName).append(File.separator); - } - return sb.toString(); - } }