コード例 #1
0
ファイル: MBR.cs プロジェクト: valentinbreiz/Sharpen
        /// <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));
        }
コード例 #2
0
ファイル: MBR.cs プロジェクト: valentinbreiz/Sharpen
        /// <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));
        }
コード例 #3
0
ファイル: MBR.cs プロジェクト: valentinbreiz/Sharpen
        /// <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);
        }