Blame libarchive/archive_entry_stat.3

Packit 08bd4c
.\" Copyright (c) 2010 Joerg Sonnenberger
Packit 08bd4c
.\" All rights reserved.
Packit 08bd4c
.\"
Packit 08bd4c
.\" Redistribution and use in source and binary forms, with or without
Packit 08bd4c
.\" modification, are permitted provided that the following conditions
Packit 08bd4c
.\" are met:
Packit 08bd4c
.\" 1. Redistributions of source code must retain the above copyright
Packit 08bd4c
.\"    notice, this list of conditions and the following disclaimer.
Packit 08bd4c
.\" 2. Redistributions in binary form must reproduce the above copyright
Packit 08bd4c
.\"    notice, this list of conditions and the following disclaimer in the
Packit 08bd4c
.\"    documentation and/or other materials provided with the distribution.
Packit 08bd4c
.\"
Packit 08bd4c
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
Packit 08bd4c
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 08bd4c
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit 08bd4c
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
Packit 08bd4c
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 08bd4c
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit 08bd4c
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit 08bd4c
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit 08bd4c
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit 08bd4c
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit 08bd4c
.\" SUCH DAMAGE.
Packit 08bd4c
.\"
Packit 08bd4c
.Dd February 2, 2012
Packit 08bd4c
.Dt ARCHIVE_ENTRY_STAT 3
Packit 08bd4c
.Os
Packit 08bd4c
.Sh NAME
Packit 08bd4c
.Nm archive_entry_stat ,
Packit 08bd4c
.Nm archive_entry_copy_stat ,
Packit 08bd4c
.Nm archive_entry_filetype ,
Packit 08bd4c
.Nm archive_entry_set_filetype ,
Packit 08bd4c
.Nm archive_entry_mode ,
Packit 08bd4c
.Nm archive_entry_set_mode ,
Packit 08bd4c
.Nm archive_entry_size ,
Packit 08bd4c
.Nm archive_entry_size_is_set ,
Packit 08bd4c
.Nm archive_entry_set_size ,
Packit 08bd4c
.Nm archive_entry_unset_size ,
Packit 08bd4c
.Nm archive_entry_dev ,
Packit 08bd4c
.Nm archive_entry_set_dev ,
Packit 08bd4c
.Nm archive_entry_dev_is_set ,
Packit 08bd4c
.Nm archive_entry_devmajor ,
Packit 08bd4c
.Nm archive_entry_set_devmajor ,
Packit 08bd4c
.Nm archive_entry_devminor ,
Packit 08bd4c
.Nm archive_entry_set_devminor ,
Packit 08bd4c
.Nm archive_entry_ino ,
Packit 08bd4c
.Nm archive_entry_set_ino ,
Packit 08bd4c
.Nm archive_entry_ino_is_set ,
Packit 08bd4c
.Nm archive_entry_ino64 ,
Packit 08bd4c
.Nm archive_entry_set_ino64 ,
Packit 08bd4c
.Nm archive_entry_nlink ,
Packit 08bd4c
.Nm archive_entry_rdev ,
Packit 08bd4c
.Nm archive_entry_set_rdev ,
Packit 08bd4c
.Nm archive_entry_rdevmajor ,
Packit 08bd4c
.Nm archive_entry_set_rdevmajor ,
Packit 08bd4c
.Nm archive_entry_rdevminor ,
Packit 08bd4c
.Nm archive_entry_set_rdevminor ,
Packit 08bd4c
.Nd accessor functions for manipulating archive entry descriptions
Packit 08bd4c
.Sh LIBRARY
Packit 08bd4c
Streaming Archive Library (libarchive, -larchive)
Packit 08bd4c
.Sh SYNOPSIS
Packit 08bd4c
.In archive_entry.h
Packit 08bd4c
.Ft const struct stat *
Packit 08bd4c
.Fn archive_entry_stat "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_copy_stat "struct archive_entry *a" "const struct stat *sb"
Packit 08bd4c
.Ft mode_t
Packit 08bd4c
.Fn archive_entry_filetype "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_filetype "struct archive_entry *a" "unsigned int type"
Packit 08bd4c
.Ft mode_t
Packit 08bd4c
.Fn archive_entry_mode "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_mode "struct archive_entry *a" "mode_t mode"
Packit 08bd4c
.Ft int64_t
Packit 08bd4c
.Fn archive_entry_size "struct archive_entry *a"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_entry_size_is_set "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_size "struct archive_entry *a" "int64_t size"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_unset_size "struct archive_entry *a"
Packit 08bd4c
.Ft dev_t
Packit 08bd4c
.Fn archive_entry_dev "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_dev "struct archive_entry *a" "dev_t dev"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_entry_dev_is_set "struct archive_entry *a"
Packit 08bd4c
.Ft dev_t
Packit 08bd4c
.Fn archive_entry_devmajor "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_devmajor "struct archive_entry *a" "dev_t major"
Packit 08bd4c
.Ft dev_t
Packit 08bd4c
.Fn archive_entry_devminor "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_devminor "struct archive_entry *a" "dev_t minor"
Packit 08bd4c
.Ft ino_t
Packit 08bd4c
.Fn archive_entry_ino "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_ino "struct archive_entry *a" "unsigned long ino"
Packit 08bd4c
.Ft int
Packit 08bd4c
.Fn archive_entry_ino_is_set "struct archive_entry *a"
Packit 08bd4c
.Ft int64_t
Packit 08bd4c
.Fn archive_entry_ino64 "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_ino64 "struct archive_entry *a" "int64_t ino"
Packit 08bd4c
.Ft unsigned int
Packit 08bd4c
.Fn archive_entry_nlink "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_nlink "struct archive_entry *a" "unsigned int count"
Packit 08bd4c
.Ft dev_t
Packit 08bd4c
.Fn archive_entry_rdev "struct archive_entry *a"
Packit 08bd4c
.Ft dev_t
Packit 08bd4c
.Fn archive_entry_rdevmajor "struct archive_entry *a"
Packit 08bd4c
.Ft dev_t
Packit 08bd4c
.Fn archive_entry_rdevminor "struct archive_entry *a"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_rdev "struct archive_entry *a" "dev_t dev"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_rdevmajor "struct archive_entry *a" "dev_t major"
Packit 08bd4c
.Ft void
Packit 08bd4c
.Fn archive_entry_set_rdevminor "struct archive_entry *a" "dev_t minor"
Packit 08bd4c
.Sh DESCRIPTION
Packit 08bd4c
.Ss Copying to and from Vt struct stat
Packit 08bd4c
The function
Packit 08bd4c
.Fn archive_entry_stat
Packit 08bd4c
converts the various fields stored in the archive entry to the format
Packit 08bd4c
used by
Packit 08bd4c
.Xr stat 2 .
Packit 08bd4c
The return value remains valid until either
Packit 08bd4c
.Fn archive_entry_clear
Packit 08bd4c
or
Packit 08bd4c
.Fn archive_entry_free
Packit 08bd4c
is called.
Packit 08bd4c
It is not affected by calls to the set accessor functions.
Packit 08bd4c
It currently sets the following values in
Packit 08bd4c
.Vt struct stat :
Packit 08bd4c
.Vt st_atime ,
Packit 08bd4c
.Vt st_ctime ,
Packit 08bd4c
.Vt st_dev ,
Packit 08bd4c
.Vt st_gid ,
Packit 08bd4c
.Vt st_ino ,
Packit 08bd4c
.Vt st_mode ,
Packit 08bd4c
.Vt st_mtime ,
Packit 08bd4c
.Vt st_nlink ,
Packit 08bd4c
.Vt st_rdev ,
Packit 08bd4c
.Vt st_size ,
Packit 08bd4c
.Vt st_uid .
Packit 08bd4c
In addition,
Packit 08bd4c
.Vt st_birthtime
Packit 08bd4c
and high-precision information for time-related fields
Packit 08bd4c
will be included on platforms that support it.
Packit 08bd4c
.Pp
Packit 08bd4c
The function
Packit 08bd4c
.Fn archive_entry_copy_stat
Packit 08bd4c
copies fields from the platform's
Packit 08bd4c
.Vt struct stat .
Packit 08bd4c
Fields not provided by
Packit 08bd4c
.Vt struct stat
Packit 08bd4c
are unchanged.
Packit 08bd4c
.Ss General accessor functions
Packit 08bd4c
The functions
Packit 08bd4c
.Fn archive_entry_filetype
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_set_filetype
Packit 08bd4c
get respectively set the filetype.
Packit 08bd4c
The file type is one of the following constants:
Packit 08bd4c
.Bl -tag -width "AE_IFSOCK" -compact -offset indent
Packit 08bd4c
.It AE_IFREG
Packit 08bd4c
Regular file
Packit 08bd4c
.It AE_IFLNK
Packit 08bd4c
Symbolic link
Packit 08bd4c
.It AE_IFSOCK
Packit 08bd4c
Socket
Packit 08bd4c
.It AE_IFCHR
Packit 08bd4c
Character device
Packit 08bd4c
.It AE_IFBLK
Packit 08bd4c
Block device
Packit 08bd4c
.It AE_IFDIR
Packit 08bd4c
Directory
Packit 08bd4c
.It AE_IFIFO
Packit 08bd4c
Named pipe (fifo)
Packit 08bd4c
.El
Packit 08bd4c
Not all file types are supported by all platforms.
Packit 08bd4c
The constants used by
Packit 08bd4c
.Xr stat 2
Packit 08bd4c
may have different numeric values from the
Packit 08bd4c
corresponding constants above.
Packit 08bd4c
.Pp
Packit 08bd4c
The functions
Packit 08bd4c
.Fn archive_entry_mode
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_set_mode
Packit 08bd4c
get/set a combination of file type and permissions and provide the
Packit 08bd4c
equivalent of
Packit 08bd4c
.Va st_mode .
Packit 08bd4c
Use of
Packit 08bd4c
.Fn archive_entry_filetype
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_perm
Packit 08bd4c
for getting and
Packit 08bd4c
.Fn archive_entry_set_filetype
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_set_perm
Packit 08bd4c
for setting is recommended.
Packit 08bd4c
.Pp
Packit 08bd4c
The function
Packit 08bd4c
.Fn archive_entry_size
Packit 08bd4c
returns the file size, if it has been set, and 0 otherwise.
Packit 08bd4c
.Fn archive_entry_size
Packit 08bd4c
can be used to query that status.
Packit 08bd4c
.Fn archive_entry_set_size
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_unset_size
Packit 08bd4c
set and unset the size, respectively.
Packit 08bd4c
.Pp
Packit 08bd4c
The number of references (hardlinks) can be obtained by calling
Packit 08bd4c
.Fn archive_entry_nlinks
Packit 08bd4c
and set with
Packit 08bd4c
.Fn archive_entry_set_nlinks .
Packit 08bd4c
.Ss Identifying unique files
Packit 08bd4c
The functions
Packit 08bd4c
.Fn archive_entry_dev
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_ino64
Packit 08bd4c
are used by
Packit 08bd4c
.Xr archive_entry_linkify 3
Packit 08bd4c
to find hardlinks.
Packit 08bd4c
The pair of device and inode is supposed to identify hardlinked files.
Packit 08bd4c
.Pp
Packit 08bd4c
The device major and minor number can be obtained independently using
Packit 08bd4c
.Fn archive_entry_devmajor
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_devminor .
Packit 08bd4c
The device can be set either via
Packit 08bd4c
.Fn archive_entry_set_dev
Packit 08bd4c
or by the combination of major and minor number using
Packit 08bd4c
.Fn archive_entry_set_devmajor
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_entry_set_devminor .
Packit 08bd4c
.Pp
Packit 08bd4c
The inode number can be obtained using
Packit 08bd4c
.Fn archive_entry_ino .
Packit 08bd4c
This is a legacy interface that uses the platform
Packit 08bd4c
.Vt ino_t ,
Packit 08bd4c
which may be very small.
Packit 08bd4c
To set the inode number,
Packit 08bd4c
.Fn archive_entry_set_ino64
Packit 08bd4c
is the preferred interface.
Packit 08bd4c
.Ss Accessor functions for block and character devices
Packit 08bd4c
Block and character devices are characterised either using a device number
Packit 08bd4c
or a pair of major and minor number.
Packit 08bd4c
The combined device number can be obtained with
Packit 08bd4c
.Fn archive_device_rdev
Packit 08bd4c
and set with
Packit 08bd4c
.Fn archive_device_set_rdev .
Packit 08bd4c
The major and minor numbers are accessed by
Packit 08bd4c
.Fn archive_device_rdevmajor ,
Packit 08bd4c
.Fn archive_device_rdevminor
Packit 08bd4c
.Fn archive_device_set_rdevmajor
Packit 08bd4c
and
Packit 08bd4c
.Fn archive_device_set_rdevminor .
Packit 08bd4c
.Pp
Packit 08bd4c
The process of splitting the combined device number into major and
Packit 08bd4c
minor number and the reverse process of combing them differs between
Packit 08bd4c
platforms.
Packit 08bd4c
Some archive formats use the combined form, while other formats use
Packit 08bd4c
the split form.
Packit 08bd4c
.Sh SEE ALSO
Packit 08bd4c
.Xr archive_entry_acl 3 ,
Packit 08bd4c
.Xr archive_entry_perms 3 ,
Packit 08bd4c
.Xr archive_entry_time 3 ,
Packit 08bd4c
.Xr libarchive 3 ,
Packit 08bd4c
.Xr stat 2