Change flag name to be closer to spec

This commit is contained in:
Adam Hathcock
2018-04-29 16:33:15 +01:00
parent abddabf18e
commit 501407c3fe
6 changed files with 3512 additions and 13 deletions

3497
reference/APPNOTE.TXT Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -34,16 +34,16 @@ namespace SharpCompress.Common.Zip.Headers
byte[] extra = reader.ReadBytes(extraLength);
byte[] comment = reader.ReadBytes(commentLength);
if ((Flags & HeaderFlags.UTF8) == 0)
{
Name = ArchiveEncoding.Decode437(name);
Comment = ArchiveEncoding.Decode437(comment);
}
else
if (Flags.HasFlag(HeaderFlags.EFS))
{
Name = ArchiveEncoding.Decode(name);
Comment = ArchiveEncoding.Decode(comment);
}
else
{
Name = ArchiveEncoding.Decode437(name);
Comment = ArchiveEncoding.Decode437(comment);
}
LoadExtra(extra);

View File

@@ -11,6 +11,7 @@ namespace SharpCompress.Common.Zip.Headers
Bit2 = 4,
UsePostDataDescriptor = 8,
EnhancedDeflate = 16,
UTF8 = 2048
//Bit 11: Language encoding flag
EFS = 2048
}
}

View File

@@ -25,14 +25,15 @@ namespace SharpCompress.Common.Zip.Headers
ushort extraLength = reader.ReadUInt16();
byte[] name = reader.ReadBytes(nameLength);
byte[] extra = reader.ReadBytes(extraLength);
if ((Flags & HeaderFlags.UTF8) == 0)
if (Flags.HasFlag(HeaderFlags.EFS))
{
// Use IBM Code Page 437 (IBM PC character encoding set)
Name = ArchiveEncoding.Decode437(name);
Name = ArchiveEncoding.Decode(name);
}
else
{
Name = ArchiveEncoding.Decode(name);
// Use IBM Code Page 437 (IBM PC character encoding set)
Name = ArchiveEncoding.Decode437(name);
}
LoadExtra(extra);

View File

@@ -44,7 +44,7 @@ namespace SharpCompress.Writers.Zip
var extralength = zip64 ? (2 + 2 + 8 + 8 + 8 + 4) : 0;
var version = (byte)(zip64 ? 45 : 20); // Version 20 required for deflate/encryption
HeaderFlags flags = Equals(archiveEncoding.GetEncoding(), Encoding.UTF8) ? HeaderFlags.UTF8 : HeaderFlags.None;
HeaderFlags flags = Equals(archiveEncoding.GetEncoding(), Encoding.UTF8) ? HeaderFlags.EFS : HeaderFlags.None;
if (!outputStream.CanSeek)
{
// Cannot use data descriptors with zip64:

View File

@@ -169,7 +169,7 @@ namespace SharpCompress.Writers.Zip
{
OutputStream.Write(new byte[] { 63, 0 }, 0, 2); //version says we used PPMd or LZMA
}
HeaderFlags flags = Equals(WriterOptions.ArchiveEncoding.GetEncoding(), Encoding.UTF8) ? HeaderFlags.UTF8 : 0;
HeaderFlags flags = Equals(WriterOptions.ArchiveEncoding.GetEncoding(), Encoding.UTF8) ? HeaderFlags.EFS : 0;
if (!OutputStream.CanSeek)
{
flags |= HeaderFlags.UsePostDataDescriptor;