/// <summary> /// Adds inodes for each dir. /// </summary> void addDirInodes() { inodes.Add(root.ino); foreach (var dir in allDirs) { var ino = new PfsDinode32 { Mode = InodeMode.dir | InodeMode.rwx, Number = (uint)inodes.Count, Blocks = 1, Size = 65536 }; dir.ino = ino; dir.Dirents.Add(new PfsDirent { Name = ".", InodeNumber = ino.Number, Type = 4 }); dir.Dirents.Add(new PfsDirent { Name = "..", InodeNumber = dir.Parent.ino.Number, Type = 5 }); dirents.Add(dir.Dirents); var dirent = new PfsDirent { Name = dir.name, InodeNumber = (uint)inodes.Count, Type = 3 }; dir.Parent.Dirents.Add(dirent); dir.Parent.ino.Nlink++; inodes.Add(ino); } }
/// <summary> /// Adds inodes for each file. /// </summary> void addFileInodes() { foreach (var file in allFiles) { var ino = new PfsDinode32 { Mode = InodeMode.file | InodeMode.rwx, Size = file.Size, SizeCompressed = file.Size, Number = (uint)inodes.Count, Blocks = (uint)CeilDiv(file.Size, hdr.BlockSize) }; file.ino = ino; var dirent = new PfsDirent { Name = file.name, Type = 2, InodeNumber = (uint)inodes.Count }; file.Parent.Dirents.Add(dirent); inodes.Add(ino); } }