private bool DeserializeEntry(BinaryReader reader, out EaBufferEntry entry)
        {
            long start_position      = reader.BaseStream.Position;
            int  next_offset         = reader.ReadInt32();
            EaBufferEntryFlags flags = (EaBufferEntryFlags)reader.ReadByte();
            int    ea_name_length    = reader.ReadByte();
            int    data_length       = reader.ReadUInt16();
            string name = Encoding.ASCII.GetString(reader.ReadAllBytes(ea_name_length));

            reader.ReadByte();
            byte[] data = reader.ReadAllBytes(data_length);
            entry = new EaBufferEntry(name, data, flags);
            if (next_offset == 0)
            {
                return(true);
            }
            reader.BaseStream.Position = start_position + next_offset;
            return(false);
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="name">The name of the entry</param>
 /// <param name="data">Data associated with the entry</param>
 /// <param name="flags">Flags for entry.</param>
 public EaBufferEntry(string name, byte[] data, EaBufferEntryFlags flags)
 {
     Name = name;
     Data = data;
 }
 /// <summary>
 /// Add a new EA entry
 /// </summary>
 /// <param name="name">The name of the entry</param>
 /// <param name="data">The associated data</param>
 /// <param name="flags">The entry flags.</param>
 public void AddEntry(string name, string data, EaBufferEntryFlags flags)
 {
     AddEntry(name, Encoding.Unicode.GetBytes(data), flags, false);
 }
 /// <summary>
 /// Add a new EA entry
 /// </summary>
 /// <param name="name">The name of the entry</param>
 /// <param name="data">The associated data</param>
 /// <param name="flags">The entry flags.</param>
 public void AddEntry(string name, int data, EaBufferEntryFlags flags)
 {
     AddEntry(name, BitConverter.GetBytes(data), flags, false);
 }
 /// <summary>
 /// Add a new EA entry
 /// </summary>
 /// <param name="name">The name of the entry</param>
 /// <param name="data">The associated data</param>
 /// <param name="flags">The entry flags.</param>
 public void AddEntry(string name, byte[] data, EaBufferEntryFlags flags)
 {
     AddEntry(name, data, flags, true);
 }
 private void AddEntry(string name, byte[] data, EaBufferEntryFlags flags, bool clone)
 {
     _buffers.Add(new EaBufferEntry(name, clone ? (byte[])data.Clone() : data, flags));
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="name">The name of the entry</param>
 /// <param name="data">Data associated with the entry</param>
 /// <param name="flags">Flags for entry.</param>
 public EaBufferEntry(string name, string data, EaBufferEntryFlags flags)
     : this(name, Encoding.Unicode.GetBytes(data), flags)
 {
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="name">The name of the entry</param>
 /// <param name="data">Data associated with the entry</param>
 /// <param name="flags">Flags for entry.</param>
 public EaBufferEntry(string name, int data, EaBufferEntryFlags flags)
     : this(name, BitConverter.GetBytes(data), flags)
 {
 }