예제 #1
0
        public bool FillHeaderData(byte[] data)
        {
            int    len = Marshal.SizeOf(Header.GetType());
            IntPtr @in = Marshal.AllocHGlobal(len);

            Marshal.Copy(data, 0, @in, len);
            Header = (RpmStruct.RPMHeader)Marshal.PtrToStructure(@in, Header.GetType());
            Marshal.FreeHGlobal(@in);
            unchecked
            {
                Header.bytesDataCount = (int)((uint)Header.bytesDataCount).ReverseBytes();
                Header.entryCount     = (int)((uint)Header.entryCount).ReverseBytes();
            }
            byte[] buffer = new byte[RpmStruct.RPM_MAGIC_HEADER_NUMBER.Length];
            unsafe
            {
                fixed(byte *ptr = Header.magic)
                {
                    int i = 0;

                    for (byte *d = ptr; i < RpmStruct.RPM_MAGIC_HEADER_NUMBER.Length; ++i, ++d)
                    {
                        buffer[i] = *d;
                    }
                }
            }
            return(ByteArrayCompare(buffer, RpmStruct.RPM_MAGIC_HEADER_NUMBER));
        }
예제 #2
0
 public bool FillHeaderData(byte[] data)
 {
     int len = Marshal.SizeOf(Header.GetType());
     IntPtr @in = Marshal.AllocHGlobal(len);
     Marshal.Copy(data, 0, @in, len);
     Header = (RpmStruct.RPMHeader)Marshal.PtrToStructure(@in, Header.GetType());
     Marshal.FreeHGlobal(@in);
     unchecked
     { 
         Header.bytesDataCount = (int)((uint)Header.bytesDataCount).ReverseBytes();
         Header.entryCount = (int)((uint)Header.entryCount).ReverseBytes();
     }
     byte[] buffer = new byte[RpmStruct.RPM_MAGIC_HEADER_NUMBER.Length];
     unsafe
     {
         fixed (byte* ptr = Header.magic)
         {
             int i = 0;
             for (byte* d = ptr; i < RpmStruct.RPM_MAGIC_HEADER_NUMBER.Length; ++i, ++d)
             {
                 buffer[i] = *d;
             }
         }
     }
     return ByteArrayCompare(buffer, RpmStruct.RPM_MAGIC_HEADER_NUMBER);
 }