private void ParsePfs() { _stream.Seek(0, SeekOrigin.Begin); header = readPfsHdr(); dinodes = new DinodeD32[header.dinodeCount]; var total = 0; var maxPerSector = header.blocksz / 0xA8; for (var i = 0; i < header.dinodeBlockCount; i++) { _stream.Position = header.blocksz + header.blocksz * i; for (var j = 0; j < maxPerSector && total < header.dinodeCount; j++) { dinodes[total++] = readDinodeD32(); } } var dir = parseDirectory(0, null, ""); if (!dir.TryGetDirectory("uroot", out _root)) { _root = dir; } }
private void ParsePfs() { _stream.Seek(0, SeekOrigin.Begin); header = readPfsHdr(); Func <inode> dinodeReader; int dinodeSize; if ((header.mode & 1) == 1) { dinodes = new DinodeS32[header.dinodeCount]; dinodeReader = readDinodeS32; dinodeSize = 0x2C8; } else { dinodes = new DinodeD32[header.dinodeCount]; dinodeReader = readDinodeD32; dinodeSize = 0xA8; } var total = 0; var maxPerSector = header.blocksz / dinodeSize; for (var i = 0; i < header.dinodeBlockCount; i++) { _stream.Position = header.blocksz + header.blocksz * i; for (var j = 0; j < maxPerSector && total < header.dinodeCount; j++) { dinodes[total++] = dinodeReader(); } } var dir = parseDirectory(0, null, ""); if (!dir.TryGetDirectory("uroot", out _root)) { _root = dir; } }