Example #1
0
        /// <summary>
        /// Read partitions from disk
        /// </summary>
        /// <param name="node">NODE</param>
        /// <param name="name">Name</param>
        public unsafe void ReadPartitions(Node node, string name)
        {
            byte[] buf = new byte[512];

            node.Read(node, 0, 512, buf);

            MBR_Partition_entry *entries = (MBR_Partition_entry *)((byte *)Util.ObjectToVoidPtr(buf) + PARTITION_OFFSET);

            for (int i = 0; i < 4; i++)
            {
                ReadPartition(node, entries + i, name, i);
            }

            Heap.Free(buf);
        }
Example #2
0
        /// <summary>
        /// Read partition from node
        /// </summary>
        /// <param name="entry">Partition entry</param>
        /// <param name="name">Index name</param>
        /// <param name="i">Index</param>
        public unsafe void ReadPartition(Node disk, MBR_Partition_entry *entry, string name, int i)
        {
            // Is entry used?
            if (entry->StartingHead == 0)
            {
                return;
            }

            IMBRCookie cookie = new IMBRCookie();

            cookie.Disk   = disk;
            cookie.MaxLBA = (int)entry->TotalSectors;
            cookie.Offset = (int)entry->StartingLBA;
            cookie.Size   = cookie.MaxLBA * 512;
            cookie.Type   = entry->SystemID;

            // TODO: Fix this!
            string insertion = "p";
            string index     = i.ToString();

            string nodeNames = Sharpen.Lib.String.Merge(name, insertion);
            string nodeName  = Sharpen.Lib.String.Merge(nodeNames, index);

            Heap.Free(nodeNames);

            Node node = new Node();

            node.Cookie = cookie;
            node.Read   = readImpl;
            node.Write  = writeImpl;

            RootPoint rp = new RootPoint(nodeName, node);

            VFS.MountPointDevFS.AddEntry(rp);


            Heap.Free(index);
        }