Example #1
0
        /// <summary>
        /// Creates inodes and dirents for superroot, flat_path_table, and uroot.
        /// Also, creates the root node for the FS tree.
        /// </summary>
        void SetupRootStructure()
        {
            inodes.Add(super_root_ino = MakeInode(
                           Mode: InodeMode.dir | InodeMode.rx_only,
                           Blocks: 1,
                           Size: 65536,
                           SizeCompressed: 65536,
                           Nlink: 1,
                           Number: 0,
                           Flags: InodeFlags.@internal | InodeFlags.@readonly
                           ));
            inodes.Add(fpt_ino = MakeInode(
                           Mode: InodeMode.file | InodeMode.rx_only,
                           Blocks: 1,
                           Number: 1,
                           Flags: InodeFlags.@internal | InodeFlags.@readonly
                           ));
            var uroot_ino = MakeInode(
                Mode: InodeMode.dir | InodeMode.rx_only,
                Number: 2,
                Size: 65536,
                SizeCompressed: 65536,
                Blocks: 1,
                Flags: InodeFlags.@readonly,
                Nlink: 3
                );

            super_root_dirents = new List <PfsDirent>
            {
                new PfsDirent {
                    InodeNumber = 1, Name = "flat_path_table", Type = DirentType.File
                },
                new PfsDirent {
                    InodeNumber = 2, Name = "uroot", Type = DirentType.Directory
                }
            };

            root         = properties.root;
            root.name    = "uroot";
            root.ino     = uroot_ino;
            root.Dirents = new List <PfsDirent>
            {
                new PfsDirent {
                    Name = ".", Type = DirentType.Dot, InodeNumber = 2
                },
                new PfsDirent {
                    Name = "..", Type = DirentType.DotDot, InodeNumber = 2
                }
            };
            if (properties.Sign) // HACK: Outer PFS lacks readonly flags
            {
                super_root_ino.Flags &= ~InodeFlags.@readonly;
                fpt_ino.Flags        &= ~InodeFlags.@readonly;
                uroot_ino.Flags      &= ~InodeFlags.@readonly;
            }
        }
Example #2
0
        /// <summary>
        /// Creates inodes and dirents for superroot, flat_path_table, and uroot.
        /// Also, creates the root node for the FS tree.
        /// </summary>
        void SetupRootStructure(bool hasCollision)
        {
            var inodeNum = 0u;

            inodes.Add(super_root_ino = MakeInode(
                           Mode: InodeMode.dir | inode.RXOnly,
                           Blocks: 1,
                           Size: 65536,
                           SizeCompressed: 65536,
                           Nlink: 1,
                           Number: inodeNum++,
                           Flags: InodeFlags.@internal | InodeFlags.@readonly
                           ));
            inodes.Add(fpt_ino = MakeInode(
                           Mode: InodeMode.file | inode.RXOnly,
                           Blocks: 1,
                           Number: inodeNum++,
                           Flags: InodeFlags.@internal | InodeFlags.@readonly
                           ));
            if (hasCollision)
            {
                inodes.Add(cr_ino = MakeInode(
                               Mode: InodeMode.file | inode.RXOnly,
                               Blocks: 1,
                               Number: inodeNum++,
                               Flags: InodeFlags.@internal | InodeFlags.@readonly
                               ));
            }
            var uroot_ino = MakeInode(
                Mode: InodeMode.dir | inode.RXOnly,
                Number: inodeNum++,
                Size: 65536,
                SizeCompressed: 65536,
                Blocks: 1,
                Flags: InodeFlags.@readonly,
                Nlink: 3
                );

            super_root_dirents = new List <PfsDirent>
            {
                new PfsDirent {
                    InodeNumber = fpt_ino.Number, Name = "flat_path_table", Type = DirentType.File
                },
            };
            if (hasCollision)
            {
                super_root_dirents.Add(
                    new PfsDirent {
                    InodeNumber = cr_ino.Number, Name = "collision_resolver", Type = DirentType.File
                });
            }
            super_root_dirents.Add(
                new PfsDirent {
                InodeNumber = uroot_ino.Number, Name = "uroot", Type = DirentType.Directory
            });

            properties.root.name    = "uroot";
            properties.root.ino     = uroot_ino;
            properties.root.Dirents = new List <PfsDirent>
            {
                new PfsDirent {
                    Name = ".", Type = DirentType.Dot, InodeNumber = uroot_ino.Number
                },
                new PfsDirent {
                    Name = "..", Type = DirentType.DotDot, InodeNumber = uroot_ino.Number
                }
            };
            if (properties.Sign) // HACK: Outer PFS lacks readonly flags
            {
                super_root_ino.Flags &= ~InodeFlags.@readonly;
                fpt_ino.Flags        &= ~InodeFlags.@readonly;
                uroot_ino.Flags      &= ~InodeFlags.@readonly;
            }
        }