/// <summary> /// Filesystem write implementation /// </summary> /// <param name="node"></param> /// <param name="offset"></param> /// <param name="size"></param> /// <param name="buffer"></param> /// <returns></returns> private static uint writeImpl(Node node, uint offset, uint size, byte[] buffer) { IMBRCookie cookie = (IMBRCookie)node.Cookie; if (offset >= cookie.MaxLBA) { return(0); } return(cookie.Disk.Write(cookie.Disk, (uint)cookie.Offset + offset, size, buffer)); }
/// <summary> /// Filesystem read implementation /// </summary> /// <param name="node"></param> /// <param name="offset"></param> /// <param name="size"></param> /// <param name="buffer"></param> /// <returns></returns> private static uint readImpl(Node node, uint offset, uint size, byte[] buffer) { IMBRCookie cookie = (IMBRCookie)node.Cookie; if (offset >= cookie.MaxLBA) { return(0); } uint offsetOut = (uint)cookie.Offset + offset; //Console.WriteLine("READD"); //Console.WriteHex(size); //Console.WriteLine(""); return(cookie.Disk.Read(cookie.Disk, (uint)cookie.Offset + offset, size, buffer)); }
/// <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); }