diff --git a/SharpCompress/Common/Tar/Headers/TarHeader.cs b/SharpCompress/Common/Tar/Headers/TarHeader.cs index 310f8c6b..634a9e43 100644 --- a/SharpCompress/Common/Tar/Headers/TarHeader.cs +++ b/SharpCompress/Common/Tar/Headers/TarHeader.cs @@ -157,10 +157,6 @@ namespace SharpCompress.Common.Tar.Headers Name = namePrefix + Name; } } - if (EntryType != EntryType.LongName && Name.Length == 0) - { - return false; - } return true; } diff --git a/SharpCompress/Common/Tar/TarEntry.cs b/SharpCompress/Common/Tar/TarEntry.cs index b44c5f88..18c290f9 100644 --- a/SharpCompress/Common/Tar/TarEntry.cs +++ b/SharpCompress/Common/Tar/TarEntry.cs @@ -85,17 +85,34 @@ namespace SharpCompress.Common.Tar internal static IEnumerable GetEntries(StreamingMode mode, Stream stream, CompressionType compressionType) { + string nextHeaderName = null; foreach (TarHeader h in TarHeaderFactory.ReadHeader(mode, stream)) { if (h != null) { - if (mode == StreamingMode.Seekable) + if (h.EntryType == EntryType.LongName) { - yield return new TarEntry(new TarFilePart(h, stream), compressionType); + var memoryStream = new MemoryStream(); + h.PackedStream.CopyTo(memoryStream); + memoryStream.Position = 0; + var bytes = memoryStream.ToArray(); + nextHeaderName = ArchiveEncoding.Default.GetString(bytes, 0, bytes.Length).TrimNulls(); } else { - yield return new TarEntry(new TarFilePart(h, null), compressionType); + if (nextHeaderName != null) + { + h.Name = nextHeaderName; + nextHeaderName = null; + } + if (mode == StreamingMode.Seekable) + { + yield return new TarEntry(new TarFilePart(h, stream), compressionType); + } + else + { + yield return new TarEntry(new TarFilePart(h, null), compressionType); + } } } }