public DuckyDirectory Extract(SequentialReader reader) { var directory = new DuckyDirectory(); try { while (true) { var tag = reader.GetUInt16(); // End of Segment is marked with zero if (tag == 0) { break; } var length = reader.GetUInt16(); switch (tag) { case DuckyDirectory.TagQuality: { if (length != 4) { directory.AddError("Unexpected length for the quality tag"); return(directory); } directory.Set(tag, reader.GetUInt32()); break; } case DuckyDirectory.TagComment: case DuckyDirectory.TagCopyright: { reader.Skip(4); directory.Set(tag, reader.GetString(length - 4, Encoding.BigEndianUnicode)); break; } default: { // Unexpected tag directory.Set(tag, reader.GetBytes(length)); break; } } } } catch (IOException e) { directory.AddError(e.Message); } return(directory); }
public DuckyDirectory Extract(SequentialReader reader) { var directory = new DuckyDirectory(); try { while (true) { var tag = reader.GetUInt16(); // End of Segment is marked with zero if (tag == 0) break; var length = reader.GetUInt16(); switch (tag) { case DuckyDirectory.TagQuality: { if (length != 4) { directory.AddError("Unexpected length for the quality tag"); return directory; } directory.Set(tag, reader.GetUInt32()); break; } case DuckyDirectory.TagComment: case DuckyDirectory.TagCopyright: { reader.Skip(4); directory.Set(tag, reader.GetString(length - 4, Encoding.BigEndianUnicode)); break; } default: { // Unexpected tag directory.Set(tag, reader.GetBytes(length)); break; } } } } catch (IOException e) { directory.AddError(e.Message); } return directory; }