示例#1
0
 /// <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);
     }
 }
示例#2
0
 /// <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);
     }
 }