TarEntry handles longnames

This commit is contained in:
Adam Hathcock
2013-11-23 12:58:35 +00:00
parent eae4965f32
commit 00263a8225
2 changed files with 20 additions and 7 deletions

View File

@@ -157,10 +157,6 @@ namespace SharpCompress.Common.Tar.Headers
Name = namePrefix + Name;
}
}
if (EntryType != EntryType.LongName && Name.Length == 0)
{
return false;
}
return true;
}

View File

@@ -85,17 +85,34 @@ namespace SharpCompress.Common.Tar
internal static IEnumerable<TarEntry> 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);
}
}
}
}