208 references to TarEntryFormat
System.Formats.Tar (208)
System\Formats\Tar\GnuTarEntry.cs (4)
9
/// <remarks>Even though the <see cref="
TarEntryFormat
.Gnu"/> format is not POSIX compatible, it implements and supports the Unix-specific fields that were defined in the POSIX IEEE P1003.1 standard from 1988: <c>devmajor</c>, <c>devminor</c>, <c>gname</c> and <c>uname</c>.</remarks>
14
: base(header, readerOfOrigin,
TarEntryFormat
.Gnu)
34
: base(entryType, entryName,
TarEntryFormat
.Gnu, isGea: false)
47
: base(other,
TarEntryFormat
.Gnu)
System\Formats\Tar\PaxGlobalExtendedAttributesTarEntry.cs (2)
18
: base(header, readerOfOrigin,
TarEntryFormat
.Pax)
28
: base(TarEntryType.GlobalExtendedAttributes, nameof(PaxGlobalExtendedAttributesTarEntry),
TarEntryFormat
.Pax, isGea: true) // Name == name of type for lack of a better temporary name until the entry is written
System\Formats\Tar\PaxTarEntry.cs (6)
19
: base(header, readerOfOrigin,
TarEntryFormat
.Pax)
53
: base(entryType, entryName,
TarEntryFormat
.Pax, isGea: false)
92
: base(entryType, entryName,
TarEntryFormat
.Pax, isGea: false)
110
: base(other,
TarEntryFormat
.Pax)
112
if (other._header._format is
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax)
System\Formats\Tar\PosixTarEntry.cs (7)
9
/// Abstract class that represents a tar entry from an archive of a format that is based on the POSIX IEEE P1003.1 standard from 1988. This includes the formats <see cref="
TarEntryFormat
.Ustar"/> (represented by the <see cref="UstarTarEntry"/> class), <see cref="
TarEntryFormat
.Pax"/> (represented by the <see cref="PaxTarEntry"/> class) and <see cref="
TarEntryFormat
.Gnu"/> (represented by the <see cref="GnuTarEntry"/> class).
12
/// Even though the <see cref="
TarEntryFormat
.Gnu"/> format is not POSIX compatible, it implements and supports the Unix-specific fields that were defined in that POSIX standard.</remarks>
16
internal PosixTarEntry(TarHeader header, TarReader readerOfOrigin,
TarEntryFormat
format)
22
internal PosixTarEntry(TarEntryType entryType, string entryName,
TarEntryFormat
format, bool isGea)
32
internal PosixTarEntry(TarEntry other,
TarEntryFormat
format)
System\Formats\Tar\TarEntry.cs (10)
15
/// <remarks>All the properties exposed by this class are supported by the <see cref="
TarEntryFormat
.V7"/>, <see cref="
TarEntryFormat
.Ustar"/>, <see cref="
TarEntryFormat
.Pax"/> and <see cref="
TarEntryFormat
.Gnu"/> formats.</remarks>
24
internal TarEntry(TarHeader header, TarReader readerOfOrigin,
TarEntryFormat
format)
34
internal TarEntry(TarEntryType entryType, string entryName,
TarEntryFormat
format, bool isGea)
50
internal TarEntry(TarEntry other,
TarEntryFormat
format)
79
public
TarEntryFormat
Format => _header._format;
109
/// <remarks>The entry type that commonly contains data is <see cref="TarEntryType.RegularFile"/> (or <see cref="TarEntryType.V7RegularFile"/> in the <see cref="
TarEntryFormat
.V7"/> format). Other uncommon entry types that can also contain data are: <see cref="TarEntryType.ContiguousFile"/>, <see cref="TarEntryType.DirectoryList"/>, <see cref="TarEntryType.MultiVolume"/> and <see cref="TarEntryType.SparseFile"/>.</remarks>
244
/// <exception cref="InvalidOperationException">Setting a data section is not supported because the <see cref="EntryType"/> is not <see cref="TarEntryType.RegularFile"/> (or <see cref="TarEntryType.V7RegularFile"/> for an archive of <see cref="
TarEntryFormat
.V7"/> format).</exception>
System\Formats\Tar\TarEntryType.cs (10)
14
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Ustar"/>, <see cref="
TarEntryFormat
.Pax"/> and <see cref="
TarEntryFormat
.Gnu"/> formats.</para>
46
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Gnu"/> format, and is treated as a <see cref="RegularFile"/> entry type.</para>
62
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Gnu"/> format, and is treated as a <see cref="Directory"/> entry type that contains a data section.</para>
77
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Gnu"/> format and is not supported for writing.</para>
82
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.V7"/> format.</para>
87
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Gnu"/> format. It is considered unsafe and is ignored by other tools.</para>
92
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Gnu"/> format and is not supported for writing.</para>
97
/// <para>This entry type is specific to the <see cref="
TarEntryFormat
.Gnu"/> format and is not supported for writing.</para>
System\Formats\Tar\TarFile.cs (2)
330
using (TarWriter writer = new TarWriter(destination,
TarEntryFormat
.Pax, leaveOpen))
384
TarWriter writer = new TarWriter(destination,
TarEntryFormat
.Pax, leaveOpen);
System\Formats\Tar\TarHeader.cs (11)
47
internal
TarEntryFormat
_format;
89
internal TarHeader(
TarEntryFormat
format, string name = "", int mode = 0, DateTimeOffset mTime = default, TarEntryType typeFlag = TarEntryType.RegularFile)
102
internal TarHeader(
TarEntryFormat
format, TarEntryType typeFlag, TarHeader other)
139
private static string GetMagicForFormat(
TarEntryFormat
format) => format switch
141
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => UstarMagic,
142
TarEntryFormat
.Gnu => GnuMagic,
146
private static string GetVersionForFormat(
TarEntryFormat
format) => format switch
148
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => UstarVersion,
149
TarEntryFormat
.Gnu => GnuVersion,
System\Formats\Tar\TarHeader.Read.cs (24)
21
internal static TarHeader? TryGetNextHeader(Stream archiveStream, bool copyData,
TarEntryFormat
initialFormat, bool processDataBlock)
40
internal static async ValueTask<TarHeader?> TryGetNextHeaderAsync(Stream archiveStream, bool copyData,
TarEntryFormat
initialFormat, bool processDataBlock, CancellationToken cancellationToken)
61
private static TarHeader? TryReadAttributes(
TarEntryFormat
initialFormat, Span<byte> buffer)
70
if (header._format !=
TarEntryFormat
.V7)
78
Debug.Assert(header._format is
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax or
TarEntryFormat
.Gnu);
79
if (header._format ==
TarEntryFormat
.Ustar)
83
else if (header._format ==
TarEntryFormat
.Gnu)
360
private static TarHeader? TryReadCommonAttributes(Span<byte> buffer,
TarEntryFormat
initialFormat)
398
if (header._format ==
TarEntryFormat
.Unknown)
403
TarEntryType.GlobalExtendedAttributes =>
TarEntryFormat
.Pax,
410
TarEntryType.TapeVolume =>
TarEntryFormat
.Gnu,
413
TarEntryType.V7RegularFile =>
TarEntryFormat
.V7,
419
_ => (header._typeFlag == TarEntryType.RegularFile) ?
TarEntryFormat
.Ustar :
TarEntryFormat
.V7
435
_format =
TarEntryFormat
.V7;
443
_format =
TarEntryFormat
.Gnu;
448
if (_format ==
TarEntryFormat
.V7)
451
_format =
TarEntryFormat
.Ustar;
464
if (_format ==
TarEntryFormat
.V7)
472
case
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax:
490
case
TarEntryFormat
.Gnu:
System\Formats\Tar\TarHeader.Write.cs (56)
29
private void WriteWithSeekableDataStream(
TarEntryFormat
format, Stream archiveStream, Span<byte> buffer)
31
Debug.Assert(format is >
TarEntryFormat
.Unknown and <=
TarEntryFormat
.Gnu);
45
private async Task WriteWithSeekableDataStreamAsync(
TarEntryFormat
format, Stream archiveStream, Memory<byte> buffer, CancellationToken cancellationToken)
47
Debug.Assert(format is >
TarEntryFormat
.Unknown and <=
TarEntryFormat
.Gnu);
61
private void WriteWithUnseekableDataStream(
TarEntryFormat
format, Stream destinationStream, Span<byte> buffer, bool shouldAdvanceToEnd)
73
TarEntryFormat
.V7 => FieldLocations.V7Data,
74
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => FieldLocations.PosixData,
75
TarEntryFormat
.Gnu => FieldLocations.GnuData,
110
private async Task WriteWithUnseekableDataStreamAsync(
TarEntryFormat
format, Stream destinationStream, Memory<byte> buffer, bool shouldAdvanceToEnd, CancellationToken cancellationToken)
122
TarEntryFormat
.V7 => FieldLocations.V7Data,
123
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => FieldLocations.PosixData,
124
TarEntryFormat
.Gnu => FieldLocations.GnuData,
161
TarEntryType actualEntryType = TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.V7, _typeFlag);
171
TarEntryType actualEntryType = TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.Ustar, _typeFlag);
213
WriteWithUnseekableDataStream(
TarEntryFormat
.V7, archiveStream, buffer, shouldAdvanceToEnd: true);
217
WriteWithSeekableDataStream(
TarEntryFormat
.V7, archiveStream, buffer);
227
return WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.V7, archiveStream, buffer, shouldAdvanceToEnd: true, cancellationToken);
231
return WriteWithSeekableDataStreamAsync(
TarEntryFormat
.V7, archiveStream, buffer, cancellationToken);
240
WriteWithUnseekableDataStream(
TarEntryFormat
.Ustar, archiveStream, buffer, shouldAdvanceToEnd: true);
244
WriteWithSeekableDataStream(
TarEntryFormat
.Ustar, archiveStream, buffer);
254
return WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.Ustar, archiveStream, buffer, shouldAdvanceToEnd: true, cancellationToken);
258
return WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Ustar, archiveStream, buffer, cancellationToken);
269
TarHeader extendedAttributesHeader = new(
TarEntryFormat
.Pax);
276
WriteWithUnseekableDataStream(
TarEntryFormat
.Pax, tempStream, buffer, shouldAdvanceToEnd: false);
300
WriteWithSeekableDataStream(
TarEntryFormat
.Pax, archiveStream, buffer);
313
TarHeader extendedAttributesHeader = new(
TarEntryFormat
.Pax);
320
await WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.Pax, tempStream, buffer, shouldAdvanceToEnd: false, cancellationToken).ConfigureAwait(false);
344
await WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Pax, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
359
longLinkHeader.WriteWithSeekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer);
368
longPathHeader.WriteWithSeekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer);
375
WriteWithUnseekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer, shouldAdvanceToEnd: true);
379
WriteWithSeekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer);
395
await longLinkHeader.WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
404
await longPathHeader.WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
411
await WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, shouldAdvanceToEnd: true, cancellationToken).ConfigureAwait(false);
415
await WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
424
return new(
TarEntryFormat
.Gnu)
440
tmpChecksum += WriteCommonFields(buffer, TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.Gnu, _typeFlag));
453
WriteWithSeekableDataStream(
TarEntryFormat
.Pax, archiveStream, buffer);
462
return WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Pax, archiveStream, buffer, cancellationToken);
483
tmpChecksum += WriteCommonFields(buffer, TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.Pax, _typeFlag));
491
private void WriteFieldsToBuffer(
TarEntryFormat
format, Span<byte> buffer)
495
case
TarEntryFormat
.V7:
498
case
TarEntryFormat
.Ustar:
501
case
TarEntryFormat
.Pax:
504
case
TarEntryFormat
.Gnu:
519
if (_format is
TarEntryFormat
.V7)
628
else if (_format is not
TarEntryFormat
.Pax)
652
if (_format is not
TarEntryFormat
.Pax and not
TarEntryFormat
.Gnu)
710
if (_format is not
TarEntryFormat
.Pax)
728
if (_format is not
TarEntryFormat
.Pax)
System\Formats\Tar\TarHelpers.cs (8)
201
internal static TarEntryType GetCorrectTypeFlagForFormat(
TarEntryFormat
format, TarEntryType entryType)
203
if (format is
TarEntryFormat
.V7)
310
internal static void ThrowIfEntryTypeNotSupported(TarEntryType entryType,
TarEntryFormat
archiveFormat, [CallerArgumentExpression(nameof(entryType))] string? paramName = null)
314
case
TarEntryFormat
.V7:
325
case
TarEntryFormat
.Ustar:
339
case
TarEntryFormat
.Pax:
357
case
TarEntryFormat
.Gnu:
382
case
TarEntryFormat
.Unknown:
System\Formats\Tar\TarReader.cs (23)
111
/// <para>More than one Global Extended Attributes Entry was found in the current <see cref="
TarEntryFormat
.Pax"/> archive.</para>
113
/// <para>Two or more Extended Attributes entries were found consecutively in the current <see cref="
TarEntryFormat
.Pax"/> archive.</para></exception>
138
TarEntryFormat
.Pax => header._typeFlag is TarEntryType.GlobalExtendedAttributes ?
140
TarEntryFormat
.Gnu => new GnuTarEntry(header, this),
141
TarEntryFormat
.Ustar => new UstarTarEntry(header, this),
142
TarEntryFormat
.V7 or
TarEntryFormat
.Unknown or _ => new V7TarEntry(header, this),
171
/// <para>More than one Global Extended Attributes Entry was found in the current <see cref="
TarEntryFormat
.Pax"/> archive.</para>
173
/// <para>Two or more Extended Attributes entries were found consecutively in the current <see cref="
TarEntryFormat
.Pax"/> archive.</para></exception>
291
TarEntryFormat
.Pax => header._typeFlag is TarEntryType.GlobalExtendedAttributes ?
293
TarEntryFormat
.Gnu => new GnuTarEntry(header, this),
294
TarEntryFormat
.Ustar => new UstarTarEntry(header, this),
295
TarEntryFormat
.V7 or
TarEntryFormat
.Unknown or _ => new V7TarEntry(header, this),
321
TarHeader? header = TarHeader.TryGetNextHeader(_archiveStream, copyData,
TarEntryFormat
.Unknown, processDataBlock: true);
363
TarHeader? header = await TarHeader.TryGetNextHeaderAsync(_archiveStream, copyData,
TarEntryFormat
.Unknown, processDataBlock: true, cancellationToken).ConfigureAwait(false);
401
actualHeader = TarHeader.TryGetNextHeader(_archiveStream, copyData,
TarEntryFormat
.Pax, processDataBlock: false);
434
TarHeader? actualHeader = await TarHeader.TryGetNextHeaderAsync(_archiveStream, copyData,
TarEntryFormat
.Pax, processDataBlock: false, cancellationToken).ConfigureAwait(false);
468
finalHeader = new(
TarEntryFormat
.Gnu);
470
TarHeader? secondHeader = TarHeader.TryGetNextHeader(_archiveStream, copyData,
TarEntryFormat
.Gnu, processDataBlock: true);
488
TarHeader? thirdHeader = TarHeader.TryGetNextHeader(_archiveStream, copyData,
TarEntryFormat
.Gnu, processDataBlock: true);
547
TarHeader? secondHeader = await TarHeader.TryGetNextHeaderAsync(_archiveStream, copyData,
TarEntryFormat
.Gnu, processDataBlock: true, cancellationToken).ConfigureAwait(false);
566
TarHeader? thirdHeader = await TarHeader.TryGetNextHeaderAsync(_archiveStream, copyData,
TarEntryFormat
.Gnu, processDataBlock: true, cancellationToken).ConfigureAwait(false);
System\Formats\Tar\TarWriter.cs (32)
27
/// <remarks>When using this constructor, <see cref="
TarEntryFormat
.Pax"/> is used as the default format of the entries written to the archive using the <see cref="WriteEntry(string, string?)"/> method.</remarks>
31
: this(archiveStream,
TarEntryFormat
.Pax, leaveOpen: false)
36
/// Initializes a <see cref="TarWriter"/> instance that can write tar entries to the specified stream and optionally leaves the stream open upon disposal of this instance. When using this constructor, the format of the resulting archive is <see cref="
TarEntryFormat
.Pax"/>.
43
: this(archiveStream,
TarEntryFormat
.Pax, leaveOpen)
52
/// <param name="format">The format to use when calling <see cref="WriteEntry(string, string?)"/>. The default value is <see cref="
TarEntryFormat
.Pax"/>.</param>
55
/// <remarks>The recommended format is <see cref="
TarEntryFormat
.Pax"/> for its flexibility.</remarks>
58
/// <exception cref="ArgumentOutOfRangeException"><paramref name="format"/> is either <see cref="
TarEntryFormat
.Unknown"/>, or not one of the other enum values.</exception>
59
public TarWriter(Stream archiveStream,
TarEntryFormat
format =
TarEntryFormat
.Pax, bool leaveOpen = false)
68
if (format is not
TarEntryFormat
.V7 and not
TarEntryFormat
.Ustar and not
TarEntryFormat
.Pax and not
TarEntryFormat
.Gnu)
84
public
TarEntryFormat
Format { get; }
194
/// <para><see cref="
TarEntryFormat
.V7"/></para>
203
/// <para><see cref="
TarEntryFormat
.Ustar"/>, <see cref="
TarEntryFormat
.Pax"/> and <see cref="
TarEntryFormat
.Gnu"/></para>
238
/// <para><see cref="
TarEntryFormat
.V7"/></para>
247
/// <para><see cref="
TarEntryFormat
.Ustar"/>, <see cref="
TarEntryFormat
.Pax"/> and <see cref="
TarEntryFormat
.Gnu"/></para>
286
case
TarEntryFormat
.V7:
290
case
TarEntryFormat
.Ustar:
294
case
TarEntryFormat
.Pax:
305
case
TarEntryFormat
.Gnu:
310
Debug.Assert(entry.Format ==
TarEntryFormat
.Unknown, "Missing format handler");
328
TarEntryFormat
.V7 => entry._header.WriteAsV7Async(_archiveStream, buffer, cancellationToken),
329
TarEntryFormat
.Ustar => entry._header.WriteAsUstarAsync(_archiveStream, buffer, cancellationToken),
330
TarEntryFormat
.Pax when entry._header._typeFlag is TarEntryType.GlobalExtendedAttributes => entry._header.WriteAsPaxGlobalExtendedAttributesAsync(_archiveStream, buffer, _nextGlobalExtendedAttributesEntryNumber++, cancellationToken),
331
TarEntryFormat
.Pax => entry._header.WriteAsPaxAsync(_archiveStream, buffer, cancellationToken),
332
TarEntryFormat
.Gnu => entry._header.WriteAsGnuAsync(_archiveStream, buffer, cancellationToken),
System\Formats\Tar\TarWriter.Unix.cs (5)
36
Interop.Sys.FileTypes.S_IFREG => Format is
TarEntryFormat
.V7 ? TarEntryType.V7RegularFile : TarEntryType.RegularFile,
45
TarEntryFormat
.V7 => new V7TarEntry(entryType, entryName),
46
TarEntryFormat
.Ustar => new UstarTarEntry(entryType, entryName),
47
TarEntryFormat
.Pax => new PaxTarEntry(entryType, entryName),
48
TarEntryFormat
.Gnu => new GnuTarEntry(entryType, entryName),
System\Formats\Tar\UstarTarEntry.cs (5)
13
: base(header, readerOfOrigin,
TarEntryFormat
.Ustar)
33
: base(entryType, entryName,
TarEntryFormat
.Ustar, isGea: false)
45
: base(other,
TarEntryFormat
.Ustar)
47
if (other._header._format is
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax)
System\Formats\Tar\V7TarEntry.cs (3)
13
: base(header, readerOfOrigin,
TarEntryFormat
.V7)
28
: base(entryType, entryName,
TarEntryFormat
.V7, isGea: false)
39
: base(other,
TarEntryFormat
.V7)