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; }