Beispiel #1
0
        protected byte[][] ReadDataEntry(long startFirstEntryPosition, RpmStruct.RPMEntry entry)
        {
            Func <byte[]> func;

            if (_dataEntryReaders.TryGetValue((RpmConstants.rpmTagType)entry.Type, out func))
            {
                _fileStream.Seek(startFirstEntryPosition + entry.Offset, SeekOrigin.Begin);
                List <byte[]> data = new List <byte[]>();
                for (int i = 0; i < entry.Count; ++i)
                {
                    data.Add(func());
                }
                return(data.ToArray());
            }
            else
            {
                throw new Exception(string.Format("Для тега типа {0} не реализована функция чтения данных", entry.Type));
            }
        }
        public bool FillHeaderEntry(byte[] data, int countEntry)
        {
            int len = Marshal.SizeOf(typeof(RpmStruct.RPMEntry));

            _entries = new RpmStruct.RPMEntry[countEntry];
            for (int i = 0; i < countEntry; ++i)
            {
                RpmStruct.RPMEntry entry = new RpmStruct.RPMEntry();
                IntPtr             @in   = Marshal.AllocHGlobal(len);
                Marshal.Copy(data, len * i, @in, len);
                entry = (RpmStruct.RPMEntry)Marshal.PtrToStructure(@in, typeof(RpmStruct.RPMEntry));
                Marshal.FreeHGlobal(@in);
                entry.Count  = entry.Count.ReverseBytes();
                entry.Offset = entry.Offset.ReverseBytes();
                entry.Tag    = entry.Tag.ReverseBytes();
                entry.Type   = entry.Type.ReverseBytes();
                _entries[i]  = entry;
            }
            return(true);
        }
 public bool FillHeaderEntry(byte[] data, int countEntry)
 {
     int len = Marshal.SizeOf(typeof(RpmStruct.RPMEntry));
     _entries = new RpmStruct.RPMEntry[countEntry];
     for (int i = 0; i < countEntry; ++i)
     {
         RpmStruct.RPMEntry entry = new RpmStruct.RPMEntry();
         IntPtr @in = Marshal.AllocHGlobal(len);
         Marshal.Copy(data, len * i, @in, len);
         entry = (RpmStruct.RPMEntry)Marshal.PtrToStructure(@in, typeof(RpmStruct.RPMEntry));
         Marshal.FreeHGlobal(@in);
         unchecked
         {
             entry.Count = entry.Count.ReverseBytes();
             entry.Offset = entry.Offset.ReverseBytes();
             entry.Tag = entry.Tag.ReverseBytes();
             entry.Type = entry.Type.ReverseBytes();
         }
         _entries[i] = entry;
     }
     return true;
 }