Exemple #1
0
        public Entry[] GetEntries()
        {
            FSBlock      curb = _StartBlock;
            List <Entry> d    = new List <Entry>();

            while (curb.NextBlock != 0)
            {
                int index = 0;
                curb = FSBlock.Read(_StartBlock.Partition, _StartBlock.NextBlock);
                while (index < curb.ContentSize)
                {
                    ulong a = BitConverter.ToUInt64(curb.Content, index);
                    index += 8;
                    uint sep = BitConverter.ToUInt32(curb.Content, index);
                    index += 4;
                    if (sep == 1)
                    {
                        d.Add(new PulsarDirectory(part, a, FileSystem.CombineDir(_Path, Name)));
                    }
                    else if (sep == 2)
                    {
                        d.Add(new File(part, a, FileSystem.CombineDir(_Path, Name)));
                    }
                }
            }
            return(d.ToArray());
        }
Exemple #2
0
        private FSBlock GetBlockToEdit()
        {
            FSBlock ret = _StartBlock;

            while (ret.NextBlock != 0)
            {
                ret = FSBlock.Read(_StartBlock.Partition, _StartBlock.NextBlock);
            }
            if (ret.BlockNumber == _StartBlock.BlockNumber)
            {
                ret                   = FSBlock.GetFreeBlock(part);
                ret.Used              = true;
                ret.ContentSize       = 0;
                ret.NextBlock         = 0;
                _StartBlock.NextBlock = ret.BlockNumber;
                FSBlock.Write(part, _StartBlock);
                FSBlock.Write(part, ret);
            }
            if (part.NewBlockArray(1).Length - ret.ContentSize < 12)
            {
                FSBlock b = FSBlock.GetFreeBlock(part);
                if (b == null)
                {
                    return(null);
                }
                ret.NextBlock = b.BlockNumber;
                FSBlock.Write(part, ret);
                b.Used = true;
                ret    = b;
            }
            return(ret);
        }
Exemple #3
0
 public PulsarDirectory(Partition p, ulong bn, String pa)
 {
     _Path       = pa;
     part        = p;
     _StartBlock = FSBlock.Read(p, bn);
     if (bn == 1 && pa == "/" && _StartBlock.Content[0] != '/')
     {
         Char[] nm = "/".ToCharArray();
         for (int i = 0; i < nm.Length; i++)
         {
             _StartBlock.Content[i] = (byte)nm[i];
         }
         _StartBlock.Used      = true;
         _StartBlock.NextBlock = 0;
         FSBlock.Write(p, _StartBlock);
     }
     if (!_StartBlock.Used)
     {
         _StartBlock.Used = true;
         String n = "New Directory";
         if (pa == FileSystem.separator)
         {
             _Path = "";
             n     = pa;
         }
         CreateEntry(part, _StartBlock, n);
     }
 }
Exemple #4
0
        public static void ClearBlocks(FSBlock StartBlock)
        {
            FSBlock b = StartBlock;

            while (b.NextBlock != 0)
            {
                b      = FSBlock.Read(b.Partition, b.NextBlock);
                b.Used = false;
                FSBlock.Write(mFS.Partition, b);
            }
        }
Exemple #5
0
 public File(Partition p, ulong bn, String pa)
 {
     _Path       = pa;
     part        = p;
     _StartBlock = FSBlock.Read(p, bn);
     if (!_StartBlock.Used)
     {
         _StartBlock.Used = true;
         String n = "New File";
         CreateEntry(part, _StartBlock, n);
     }
 }
Exemple #6
0
        private void DeleteBlock(FSBlock FSBlock)
        {
            FSBlock curb = _StartBlock;

            while (curb.NextBlock != 0)
            {
                int         index = 0;
                bool        found = false;
                List <Byte> cont  = new List <Byte>();
                curb = FSBlock.Read(_StartBlock.Partition, _StartBlock.NextBlock);
                while (index < curb.ContentSize)
                {
                    ulong  a   = BitConverter.ToUInt64(curb.Content, index);
                    Byte[] app = BitConverter.GetBytes(a);
                    for (int i = 0; i < app.Length; i++)
                    {
                        cont.Add(app[i]);
                    }
                    index += 8;
                    uint sep = BitConverter.ToUInt32(curb.Content, index);
                    index += 4;
                    if (a == FSBlock.BlockNumber)
                    {
                        app = BitConverter.GetBytes((uint)0);
                        for (int i = 0; i < app.Length; i++)
                        {
                            cont.Add(app[i]);
                        }
                        found = true;
                    }
                    else
                    {
                        app = BitConverter.GetBytes(sep);
                        for (int i = 0; i < app.Length; i++)
                        {
                            cont.Add(app[i]);
                        }
                    }
                }
                if (found)
                {
                    curb.Content     = cont.ToArray();
                    curb.ContentSize = (uint)cont.Count;
                    FSBlock.Write(part, curb);
                }
            }
        }
Exemple #7
0
        public Byte[] ReadAllBytes()
        {
            if (_StartBlock.NextBlock == 0)
            {
                return(new Byte[0]);
            }
            FSBlock     b    = _StartBlock;
            List <Byte> lret = new List <Byte>();

            while (b.NextBlock != 0)
            {
                b = FSBlock.Read(b.Partition, b.NextBlock);
                for (int i = 0; i < b.ContentSize; i++)
                {
                    lret.Add(b.Content[i]);
                }
            }
            EditEntryInfo(EntryInfoPosition.DateTimeLastAccess, Environment.DateTime.Now.TimeStamp);
            return(lret.ToArray());
        }