Struct binstall_tar::Header
source · #[repr(C)]pub struct Header { /* private fields */ }
Expand description
Representation of the header of an entry in an archive
Implementations§
source§impl Header
impl Header
sourcepub fn new_gnu() -> Header
pub fn new_gnu() -> Header
Creates a new blank GNU header.
The GNU style header is the default for this library and allows various extensions such as long path names, long link names, and setting the atime/ctime metadata attributes of files.
sourcepub fn new_ustar() -> Header
pub fn new_ustar() -> Header
Creates a new blank UStar header.
The UStar style header is an extension of the original archive header which enables some extra metadata along with storing a longer (but not too long) path name.
UStar is also the basis used for pax archives.
sourcepub fn new_old() -> Header
pub fn new_old() -> Header
Creates a new blank old header.
This header format is the original archive header format which all other versions are compatible with (e.g. they are a superset). This header format limits the path name limit and isn’t able to contain extra metadata like atime/ctime.
sourcepub fn as_old(&self) -> &OldHeader
pub fn as_old(&self) -> &OldHeader
View this archive header as a raw “old” archive header.
This view will always succeed as all archive header formats will fill out at least the fields specified in the old header format.
sourcepub fn as_old_mut(&mut self) -> &mut OldHeader
pub fn as_old_mut(&mut self) -> &mut OldHeader
Same as as_old
, but the mutable version.
sourcepub fn as_ustar(&self) -> Option<&UstarHeader>
pub fn as_ustar(&self) -> Option<&UstarHeader>
View this archive header as a raw UStar archive header.
The UStar format is an extension to the tar archive format which enables longer pathnames and a few extra attributes such as the group and user name.
This cast may not succeed as this function will test whether the
magic/version fields of the UStar format have the appropriate values,
returning None
if they aren’t correct.
sourcepub fn as_ustar_mut(&mut self) -> Option<&mut UstarHeader>
pub fn as_ustar_mut(&mut self) -> Option<&mut UstarHeader>
Same as as_ustar_mut
, but the mutable version.
sourcepub fn as_gnu(&self) -> Option<&GnuHeader>
pub fn as_gnu(&self) -> Option<&GnuHeader>
View this archive header as a raw GNU archive header.
The GNU format is an extension to the tar archive format which enables longer pathnames and a few extra attributes such as the group and user name.
This cast may not succeed as this function will test whether the
magic/version fields of the GNU format have the appropriate values,
returning None
if they aren’t correct.
sourcepub fn as_gnu_mut(&mut self) -> Option<&mut GnuHeader>
pub fn as_gnu_mut(&mut self) -> Option<&mut GnuHeader>
Same as as_gnu
, but the mutable version.
sourcepub fn from_byte_slice(bytes: &[u8]) -> &Header
pub fn from_byte_slice(bytes: &[u8]) -> &Header
Treats the given byte slice as a header.
Panics if the length of the passed slice is not equal to 512.
sourcepub fn as_mut_bytes(&mut self) -> &mut [u8; 512]
pub fn as_mut_bytes(&mut self) -> &mut [u8; 512]
Returns a view into this header as a byte array.
sourcepub fn set_metadata(&mut self, meta: &Metadata)
pub fn set_metadata(&mut self, meta: &Metadata)
Blanket sets the metadata in this header from the metadata argument provided.
This is useful for initializing a Header
from the OS’s metadata from a
file. By default, this will use HeaderMode::Complete
to include all
metadata.
sourcepub fn set_metadata_in_mode(&mut self, meta: &Metadata, mode: HeaderMode)
pub fn set_metadata_in_mode(&mut self, meta: &Metadata, mode: HeaderMode)
Sets only the metadata relevant to the given HeaderMode in this header from the metadata argument provided.
sourcepub fn entry_size(&self) -> Result<u64>
pub fn entry_size(&self) -> Result<u64>
Returns the size of entry’s data this header represents.
This is different from Header::size
for sparse files, which have
some longer size()
but shorter entry_size()
. The entry_size()
listed here should be the number of bytes in the archive this header
describes.
May return an error if the field is corrupted.
sourcepub fn size(&self) -> Result<u64>
pub fn size(&self) -> Result<u64>
Returns the file size this header represents.
May return an error if the field is corrupted.
sourcepub fn set_size(&mut self, size: u64)
pub fn set_size(&mut self, size: u64)
Encodes the size
argument into the size field of this header.
sourcepub fn path(&self) -> Result<Cow<'_, Path>>
pub fn path(&self) -> Result<Cow<'_, Path>>
Returns the raw path name stored in this header.
This method may fail if the pathname is not valid Unicode and this is called on a Windows platform.
Note that this function will convert any \
characters to directory
separators.
sourcepub fn path_bytes(&self) -> Cow<'_, [u8]>
pub fn path_bytes(&self) -> Cow<'_, [u8]>
Returns the pathname stored in this header as a byte array.
This function is guaranteed to succeed, but you may wish to call the
path
method to convert to a Path
.
Note that this function will convert any \
characters to directory
separators.
sourcepub fn set_path<P: AsRef<Path>>(&mut self, p: P) -> Result<()>
pub fn set_path<P: AsRef<Path>>(&mut self, p: P) -> Result<()>
Sets the path name for this header.
This function will set the pathname listed in this header, encoding it in the appropriate format. May fail if the path is too long or if the path specified is not Unicode and this is a Windows platform. Will strip out any “.” path component, which signifies the current directory.
Note: This function does not support names over 100 bytes, or paths
over 255 bytes, even for formats that support longer names. Instead,
use Builder
methods to insert a long-name extension at the same time
as the file content.
sourcepub fn link_name(&self) -> Result<Option<Cow<'_, Path>>>
pub fn link_name(&self) -> Result<Option<Cow<'_, Path>>>
Returns the link name stored in this header, if any is found.
This method may fail if the pathname is not valid Unicode and this is
called on a Windows platform. Ok(None)
being returned, however,
indicates that the link name was not present.
Note that this function will convert any \
characters to directory
separators.
sourcepub fn link_name_bytes(&self) -> Option<Cow<'_, [u8]>>
pub fn link_name_bytes(&self) -> Option<Cow<'_, [u8]>>
Returns the link name stored in this header as a byte array, if any.
This function is guaranteed to succeed, but you may wish to call the
link_name
method to convert to a Path
.
Note that this function will convert any \
characters to directory
separators.
sourcepub fn set_link_name<P: AsRef<Path>>(&mut self, p: P) -> Result<()>
pub fn set_link_name<P: AsRef<Path>>(&mut self, p: P) -> Result<()>
Sets the link name for this header.
This function will set the linkname listed in this header, encoding it in the appropriate format. May fail if the link name is too long or if the path specified is not Unicode and this is a Windows platform. Will strip out any “.” path component, which signifies the current directory.
To use GNU long link names, prefer instead crate::Builder::append_link
.
sourcepub fn set_link_name_literal<P: AsRef<[u8]>>(&mut self, p: P) -> Result<()>
pub fn set_link_name_literal<P: AsRef<[u8]>>(&mut self, p: P) -> Result<()>
Sets the link name for this header without any transformation.
This function is like Self::set_link_name
but accepts an arbitrary byte array.
Hence it will not perform any canonicalization, such as replacing duplicate //
with /
.
sourcepub fn mode(&self) -> Result<u32>
pub fn mode(&self) -> Result<u32>
Returns the mode bits for this file
May return an error if the field is corrupted.
sourcepub fn uid(&self) -> Result<u64>
pub fn uid(&self) -> Result<u64>
Returns the value of the owner’s user ID field
May return an error if the field is corrupted.
sourcepub fn set_mtime(&mut self, mtime: u64)
pub fn set_mtime(&mut self, mtime: u64)
Encodes the mtime
provided into this header.
Note that this time is typically a number of seconds passed since January 1, 1970.
sourcepub fn username(&self) -> Result<Option<&str>, Utf8Error>
pub fn username(&self) -> Result<Option<&str>, Utf8Error>
Return the user name of the owner of this file.
A return value of Ok(Some(..))
indicates that the user name was
present and was valid utf-8, Ok(None)
indicates that the user name is
not present in this archive format, and Err
indicates that the user
name was present but was not valid utf-8.
sourcepub fn username_bytes(&self) -> Option<&[u8]>
pub fn username_bytes(&self) -> Option<&[u8]>
Returns the user name of the owner of this file, if present.
A return value of None
indicates that the user name is not present in
this header format.
sourcepub fn set_username(&mut self, name: &str) -> Result<()>
pub fn set_username(&mut self, name: &str) -> Result<()>
Sets the username inside this header.
This function will return an error if this header format cannot encode a user name or the name is too long.
sourcepub fn groupname(&self) -> Result<Option<&str>, Utf8Error>
pub fn groupname(&self) -> Result<Option<&str>, Utf8Error>
Return the group name of the owner of this file.
A return value of Ok(Some(..))
indicates that the group name was
present and was valid utf-8, Ok(None)
indicates that the group name is
not present in this archive format, and Err
indicates that the group
name was present but was not valid utf-8.
sourcepub fn groupname_bytes(&self) -> Option<&[u8]>
pub fn groupname_bytes(&self) -> Option<&[u8]>
Returns the group name of the owner of this file, if present.
A return value of None
indicates that the group name is not present in
this header format.
sourcepub fn set_groupname(&mut self, name: &str) -> Result<()>
pub fn set_groupname(&mut self, name: &str) -> Result<()>
Sets the group name inside this header.
This function will return an error if this header format cannot encode a group name or the name is too long.
sourcepub fn device_major(&self) -> Result<Option<u32>>
pub fn device_major(&self) -> Result<Option<u32>>
Returns the device major number, if present.
This field may not be present in all archives, and it may not be
correctly formed in all archives. Ok(Some(..))
means it was present
and correctly decoded, Ok(None)
indicates that this header format does
not include the device major number, and Err
indicates that it was
present and failed to decode.
sourcepub fn set_device_major(&mut self, major: u32) -> Result<()>
pub fn set_device_major(&mut self, major: u32) -> Result<()>
Encodes the value major
into the dev_major field of this header.
This function will return an error if this header format cannot encode a major device number.
sourcepub fn device_minor(&self) -> Result<Option<u32>>
pub fn device_minor(&self) -> Result<Option<u32>>
Returns the device minor number, if present.
This field may not be present in all archives, and it may not be
correctly formed in all archives. Ok(Some(..))
means it was present
and correctly decoded, Ok(None)
indicates that this header format does
not include the device minor number, and Err
indicates that it was
present and failed to decode.
sourcepub fn set_device_minor(&mut self, minor: u32) -> Result<()>
pub fn set_device_minor(&mut self, minor: u32) -> Result<()>
Encodes the value minor
into the dev_minor field of this header.
This function will return an error if this header format cannot encode a minor device number.
sourcepub fn entry_type(&self) -> EntryType
pub fn entry_type(&self) -> EntryType
Returns the type of file described by this header.
sourcepub fn set_entry_type(&mut self, ty: EntryType)
pub fn set_entry_type(&mut self, ty: EntryType)
Sets the type of file that will be described by this header.