Exemplo n.º 1
0
        private Result ReadImpl(out long entriesRead, ref FindPosition position, Span <DirectoryEntry> entryBuffer)
        {
            HierarchicalRomFileTable <RomFileInfo> tab = ParentFileSystem.FileTable;

            int i = 0;

            if (Mode.HasFlag(OpenDirectoryMode.Directory))
            {
                while ((entryBuffer.IsEmpty || i < entryBuffer.Length) && tab.FindNextDirectory(ref position, out string name))
                {
                    if (!entryBuffer.IsEmpty)
                    {
                        ref DirectoryEntry entry    = ref entryBuffer[i];
                        Span <byte>        nameUtf8 = Encoding.UTF8.GetBytes(name);

                        StringUtils.Copy(entry.Name, nameUtf8);
                        entry.Name[PathTools.MaxPathLength] = 0;

                        entry.Type = DirectoryEntryType.Directory;
                        entry.Size = 0;
                    }

                    i++;
                }
            }
Exemplo n.º 2
0
        public RomFsFileSystem(IStorage storage)
        {
            BaseStorage = storage;
            Header      = new RomfsHeader(storage.AsFile(OpenMode.Read));

            IStorage dirHashTable   = storage.Slice(Header.DirHashTableOffset, Header.DirHashTableSize);
            IStorage dirEntryTable  = storage.Slice(Header.DirMetaTableOffset, Header.DirMetaTableSize);
            IStorage fileHashTable  = storage.Slice(Header.FileHashTableOffset, Header.FileHashTableSize);
            IStorage fileEntryTable = storage.Slice(Header.FileMetaTableOffset, Header.FileMetaTableSize);

            FileTable = new HierarchicalRomFileTable <RomFileInfo>(dirHashTable, dirEntryTable, fileHashTable, fileEntryTable);
        }