Beispiel #1
0
        public void AddedChild_HasParentAndRootAsParent()
        {
            VFSDirectory parent = new VFSDirectory();
            VFSDirectory child  = new VFSDirectory();

            parent.AddDirectory(child);

            Assert.ReferenceEquals(parent.Root, child.Root);
            Assert.ReferenceEquals(parent, child.Parent);
        }
        public static void UpdateVFS()
        {
            FATDirectoryEntry *root = (FATDirectoryEntry *)(uint)Heap.alloc((uint)(sizeof(FATDirectoryEntry) * 16));
            byte *name = (byte *)Heap.alloc(15);

            filesystem_root_node.host.host.ReadBlock(filesystem_root_node.address, 1, (byte *)(uint)root);

            rootDir         = new VFSDirectory();
            rootDir.address = filesystem_root_node.address;
            rootDir.name    = (byte *)Heap.alloc(15);
            Utils.memcpy(rootDir.name, name, 15);
            if (!Utils.isChar(rootDir.name[0]))
            {
                rootDir.name[0] = filesystem_root_node.host.mountPoint;
                rootDir.name[1] = 0;
            }
            Console.WriteLine(rootDir.name);

            for (int d = 2; d < 16; d++)
            {
                Utils.memcpy(name, (byte *)(root) + (sizeof(FATDirectoryEntry) * d), 8);
                Utils.memset(name + 8, 0, 7);
                Utils.strDepad(name, 8);
                if (Utils.isChar(name[0]) && Utils.strContains(name, "~") == -1 && Utils.strLen(name) > 0)
                {
                    uint firstFileCluster = (uint)((root[d].firstClusterHi << 16) | root[d].firstClusterLow);
                    if (root[d].getEntryType == EntryType.Directory)
                    {
                        VFSDirectory dir = new VFSDirectory();
                        dir.parent  = rootDir;
                        dir.address = firstFileCluster;
                        dir.name    = (byte *)Heap.alloc(15);
                        Utils.memcpy(dir.name, name, 15);
                        rootDir.directories.Add(dir);
                        UpdateVFSEnumerateDirectory(filesystem_root_node.address + firstFileCluster - 2, dir);
                        Console.WriteLine("Found a directory");
                    }
                    else if (root[d].getEntryType == EntryType.File)
                    {
                        VFSFile fil = new VFSFile();
                        fil.address = firstFileCluster;
                        fil.name    = (byte *)Heap.alloc(15);
                        fil.size    = (int)root[d].size;
                        Utils.memcpy(fil.name, name, 15);
                        rootDir.files.Add(fil);
                        Console.WriteLine("Found a file");
                    }
                }
            }
            Heap.free(name);
            Heap.free((byte *)(uint)root);
        }
Beispiel #3
0
        public void AddDirectory_WhichAlreadyExists()
        {
            VFSDirectory parent = new VFSDirectory();
            VFSDirectory child1 = new VFSDirectory()
            {
                Name = "child"
            };
            VFSDirectory child2 = new VFSDirectory()
            {
                Name = "child"
            };

            parent.AddDirectory(child1);
            parent.AddDirectory(child2);
        }
Beispiel #4
0
        public void NewDirectory_ShouldBeRoot()
        {
            VFSDirectory newDirectory = new VFSDirectory();

            Assert.ReferenceEquals(newDirectory, newDirectory.Root);
        }