219 references to TarEntryFormat
System.Formats.Tar (219)
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 (11)
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)
53
/// <exception cref="ArgumentOutOfRangeException">The value is negative, or larger than 2097151 when using <see cref="
TarEntryFormat
.V7"/> or <see cref="
TarEntryFormat
.Ustar"/>.</exception>
79
/// <exception cref="ArgumentOutOfRangeException">The value is negative, or larger than 2097151 when using <see cref="
TarEntryFormat
.V7"/> or <see cref="
TarEntryFormat
.Ustar"/>.</exception>
System\Formats\Tar\TarEntry.cs (14)
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
protected bool FormatIsOctalOnly => _header._format is
TarEntryFormat
.V7 or
TarEntryFormat
.Ustar;
27
internal TarEntry(TarHeader header, TarReader readerOfOrigin,
TarEntryFormat
format)
37
internal TarEntry(TarEntryType entryType, string entryName,
TarEntryFormat
format, bool isGea)
53
internal TarEntry(TarEntry other,
TarEntryFormat
format)
82
public
TarEntryFormat
Format => _header._format;
98
/// <exception cref="ArgumentOutOfRangeException">The specified value is larger than <see cref="DateTimeOffset.UnixEpoch"/> when using <see cref="
TarEntryFormat
.V7"/> or <see cref="
TarEntryFormat
.Ustar"/>.</exception>
115
/// <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>
250
/// <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)
48
internal
TarEntryFormat
_format;
90
internal TarHeader(
TarEntryFormat
format, string name = "", int mode = 0, DateTimeOffset mTime = default, TarEntryType typeFlag = TarEntryType.RegularFile)
104
internal TarHeader(
TarEntryFormat
format, TarEntryType typeFlag, TarHeader other)
141
private static string GetMagicForFormat(
TarEntryFormat
format) => format switch
143
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => UstarMagic,
144
TarEntryFormat
.Gnu => GnuMagic,
148
private static string GetVersionForFormat(
TarEntryFormat
format) => format switch
150
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => UstarVersion,
151
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, ReadOnlySpan<byte> buffer, Stream archiveStream)
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)
362
private static TarHeader? TryReadCommonAttributes(ReadOnlySpan<byte> buffer,
TarEntryFormat
initialFormat)
399
if (header._format ==
TarEntryFormat
.Unknown)
404
TarEntryType.GlobalExtendedAttributes =>
TarEntryFormat
.Pax,
411
TarEntryType.TapeVolume =>
TarEntryFormat
.Gnu,
414
TarEntryType.V7RegularFile =>
TarEntryFormat
.V7,
420
_ => (header._typeFlag == TarEntryType.RegularFile) ?
TarEntryFormat
.Ustar :
TarEntryFormat
.V7
436
_format =
TarEntryFormat
.V7;
444
_format =
TarEntryFormat
.Gnu;
449
if (_format ==
TarEntryFormat
.V7)
452
_format =
TarEntryFormat
.Ustar;
465
if (_format ==
TarEntryFormat
.V7)
473
case
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax:
491
case
TarEntryFormat
.Gnu:
System\Formats\Tar\TarHeader.Write.cs (59)
33
private void WriteWithSeekableDataStream(
TarEntryFormat
format, Stream archiveStream, Span<byte> buffer)
35
Debug.Assert(format is >
TarEntryFormat
.Unknown and <=
TarEntryFormat
.Gnu);
49
private async Task WriteWithSeekableDataStreamAsync(
TarEntryFormat
format, Stream archiveStream, Memory<byte> buffer, CancellationToken cancellationToken)
51
Debug.Assert(format is >
TarEntryFormat
.Unknown and <=
TarEntryFormat
.Gnu);
65
private void WriteWithUnseekableDataStream(
TarEntryFormat
format, Stream destinationStream, Span<byte> buffer, bool shouldAdvanceToEnd)
77
TarEntryFormat
.V7 => FieldLocations.V7Data,
78
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => FieldLocations.PosixData,
79
TarEntryFormat
.Gnu => FieldLocations.GnuData,
117
private async Task WriteWithUnseekableDataStreamAsync(
TarEntryFormat
format, Stream destinationStream, Memory<byte> buffer, bool shouldAdvanceToEnd, CancellationToken cancellationToken)
129
TarEntryFormat
.V7 => FieldLocations.V7Data,
130
TarEntryFormat
.Ustar or
TarEntryFormat
.Pax => FieldLocations.PosixData,
131
TarEntryFormat
.Gnu => FieldLocations.GnuData,
171
TarEntryType actualEntryType = TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.V7, _typeFlag);
181
TarEntryType actualEntryType = TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.Ustar, _typeFlag);
223
WriteWithUnseekableDataStream(
TarEntryFormat
.V7, archiveStream, buffer, shouldAdvanceToEnd: true);
227
WriteWithSeekableDataStream(
TarEntryFormat
.V7, archiveStream, buffer);
237
return WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.V7, archiveStream, buffer, shouldAdvanceToEnd: true, cancellationToken);
241
return WriteWithSeekableDataStreamAsync(
TarEntryFormat
.V7, archiveStream, buffer, cancellationToken);
250
WriteWithUnseekableDataStream(
TarEntryFormat
.Ustar, archiveStream, buffer, shouldAdvanceToEnd: true);
254
WriteWithSeekableDataStream(
TarEntryFormat
.Ustar, archiveStream, buffer);
264
return WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.Ustar, archiveStream, buffer, shouldAdvanceToEnd: true, cancellationToken);
268
return WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Ustar, archiveStream, buffer, cancellationToken);
279
TarHeader extendedAttributesHeader = new(
TarEntryFormat
.Pax);
286
WriteWithUnseekableDataStream(
TarEntryFormat
.Pax, tempStream, buffer, shouldAdvanceToEnd: false);
310
WriteWithSeekableDataStream(
TarEntryFormat
.Pax, archiveStream, buffer);
323
TarHeader extendedAttributesHeader = new(
TarEntryFormat
.Pax);
330
await WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.Pax, tempStream, buffer, shouldAdvanceToEnd: false, cancellationToken).ConfigureAwait(false);
354
await WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Pax, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
369
longLinkHeader.WriteWithSeekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer);
378
longPathHeader.WriteWithSeekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer);
385
WriteWithUnseekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer, shouldAdvanceToEnd: true);
389
WriteWithSeekableDataStream(
TarEntryFormat
.Gnu, archiveStream, buffer);
405
await longLinkHeader.WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
414
await longPathHeader.WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
421
await WriteWithUnseekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, shouldAdvanceToEnd: true, cancellationToken).ConfigureAwait(false);
425
await WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Gnu, archiveStream, buffer, cancellationToken).ConfigureAwait(false);
434
return new(
TarEntryFormat
.Gnu)
450
tmpChecksum += WriteCommonFields(buffer, TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.Gnu, _typeFlag));
463
WriteWithSeekableDataStream(
TarEntryFormat
.Pax, archiveStream, buffer);
472
return WriteWithSeekableDataStreamAsync(
TarEntryFormat
.Pax, archiveStream, buffer, cancellationToken);
493
tmpChecksum += WriteCommonFields(buffer, TarHelpers.GetCorrectTypeFlagForFormat(
TarEntryFormat
.Pax, _typeFlag));
501
private void WriteFieldsToBuffer(
TarEntryFormat
format, Span<byte> buffer)
505
case
TarEntryFormat
.V7:
508
case
TarEntryFormat
.Ustar:
511
case
TarEntryFormat
.Pax:
514
case
TarEntryFormat
.Gnu:
529
if (_format is
TarEntryFormat
.V7)
649
if (_format is not
TarEntryFormat
.Pax and not
TarEntryFormat
.Gnu)
707
if (_format is not
TarEntryFormat
.Pax)
725
if (_format is not
TarEntryFormat
.Pax)
1070
if (isOctalRange || _format ==
TarEntryFormat
.Pax)
1074
else if (_format ==
TarEntryFormat
.Gnu)
1096
if (isOctalRange || _format ==
TarEntryFormat
.Pax)
1100
else if (_format ==
TarEntryFormat
.Gnu)
System\Formats\Tar\TarHelpers.cs (8)
200
internal static TarEntryType GetCorrectTypeFlagForFormat(
TarEntryFormat
format, TarEntryType entryType)
202
if (format is
TarEntryFormat
.V7)
332
internal static void ThrowIfEntryTypeNotSupported(TarEntryType entryType,
TarEntryFormat
archiveFormat, [CallerArgumentExpression(nameof(entryType))] string? paramName = null)
336
case
TarEntryFormat
.V7:
347
case
TarEntryFormat
.Ustar:
361
case
TarEntryFormat
.Pax:
379
case
TarEntryFormat
.Gnu:
404
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)