Example #1
0
        public void SparseMemoryBufferClear()
        {
            SparseMemoryBuffer memoryBuffer = new SparseMemoryBuffer(10);

            byte[] buffer = new byte[20];

            memoryBuffer.Write(0, buffer, 0, 20);
            Assert.Equal(2, memoryBuffer.AllocatedChunks.Count());
            memoryBuffer.Clear(0, 20);
            Assert.Equal(0, memoryBuffer.AllocatedChunks.Count());

            memoryBuffer.Write(0, buffer, 0, 15);
            Assert.Equal(2, memoryBuffer.AllocatedChunks.Count());
            memoryBuffer.Clear(0, 15);
            Assert.Equal(1, memoryBuffer.AllocatedChunks.Count());
        }
        protected override void Read(byte[] buffer, int offset, out int length)
        {
            base.Read(buffer, offset, out length);

            uint   dataLength = Utilities.ToUInt32LittleEndian(buffer, offset + 0x10);
            ushort dataOffset = Utilities.ToUInt16LittleEndian(buffer, offset + 0x14);

            _indexedFlag = buffer[offset + 0x16];

            if (dataOffset + dataLength > length)
            {
                throw new IOException("Corrupt attribute, data outside of attribute");
            }

            _memoryBuffer = new SparseMemoryBuffer(1024);
            _memoryBuffer.Write(0, buffer, offset + dataOffset, (int)dataLength);
        }
Example #3
0
        public void TargetPath_Works()
        {
            var content = Encoding.UTF8.GetBytes("/var/lib/discutils.so");
            var buffer  = new SparseMemoryBuffer(0x100);

            buffer.Write(0, content, 0, content.Length);

            var symlinkMock = new Mock <Symlink>(MockBehavior.Strict, new Context(), new CatalogNodeId(0), new CatalogFileInfo());

            symlinkMock.Setup(s => s.FileContent).Returns(buffer);

            var symlink = symlinkMock.Object;

            Assert.Equal(@"\var\lib\discutils.so", symlink.TargetPath);

            // Calling .TargetPath twice will excercise the caching code path.
            Assert.Equal(@"\var\lib\discutils.so", symlink.TargetPath);
        }
        protected override void Read(byte[] buffer, int offset, out int length)
        {
            base.Read(buffer, offset, out length);

            uint dataLength = Utilities.ToUInt32LittleEndian(buffer, offset + 0x10);
            ushort dataOffset = Utilities.ToUInt16LittleEndian(buffer, offset + 0x14);
            _indexedFlag = buffer[offset + 0x16];

            if (dataOffset + dataLength > length)
            {
                throw new IOException("Corrupt attribute, data outside of attribute");
            }

            _memoryBuffer = new SparseMemoryBuffer(1024);
            _memoryBuffer.Write(0, buffer, offset + dataOffset, (int)dataLength);
        }