/// <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); }
/// <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); }