Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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;
            }
        }