.\" zip_stat.mdoc -- get information about file
.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner
.\"
.\" This file is part of libzip, a library to manipulate ZIP archives.
.\" The authors can be contacted at <libzip@nih.at>
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in
.\"    the documentation and/or other materials provided with the
.\"    distribution.
.\" 3. The names of the authors may not be used to endorse or promote
.\"    products derived from this software without specific prior
.\"    written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd December 18, 2017
.Dt ZIP_STAT 3
.Os
.Sh NAME
.Nm zip_stat ,
.Nm zip_stat_index
.Nd get information about file
.Sh LIBRARY
libzip (-lzip)
.Sh SYNOPSIS
.In zip.h
.Ft int
.Fn zip_stat "zip_t *archive" "const char *fname" "zip_flags_t flags" "zip_stat_t *sb"
.Ft int
.Fn zip_stat_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_stat_t *sb"
.Sh DESCRIPTION
The
.Fn zip_stat
function obtains information about the file named
.Ar fname
in
.Ar archive .
The
.Ar flags
argument specifies how the name lookup should be done.
Its values are described in
.Xr zip_name_locate 3 .
Also,
.Dv ZIP_FL_UNCHANGED
may be
.Em or Ns No 'ed
to it to request information about the original file in the archive,
ignoring any changes made.
.Pp
The
.Fn zip_stat_index
function obtains information about the file at position
.Ar index .
.Pp
The
.Ar sb
argument is a pointer to a
.Ft struct zip_stat
(shown below), into which information about the file is placed.
.Bd -literal
struct zip_stat {
    zip_uint64_t valid;                 /* which fields have valid values */
    const char *name;                   /* name of the file */
    zip_uint64_t index;                 /* index within archive */
    zip_uint64_t size;                  /* size of file (uncompressed) */
    zip_uint64_t comp_size;             /* size of file (compressed) */
    time_t mtime;                       /* modification time */
    zip_uint32_t crc;                   /* crc of file data */
    zip_uint16_t comp_method;           /* compression method used */
    zip_uint16_t encryption_method;     /* encryption method used */
    zip_uint32_t flags;                 /* reserved for future use */
};
.Ed
The structure pointed to by
.Ar sb
must be allocated before calling
.Fn zip_stat
or
.Fn zip_stat_index .
.Pp
The
.Ar valid
field of the structure specifies which other fields are valid.
Check if the flag defined by the following defines are in
.Ar valid
before accessing the fields:
.Bl -tag -width ZIP_STAT_ENCRYPTION_METHODXX -compact -offset indent
.It Dv ZIP_STAT_NAME
.Ar name
.It Dv ZIP_STAT_INDEX
.Ar index
.It Dv ZIP_STAT_SIZE
.Ar size
.It Dv ZIP_STAT_COMP_SIZE
.Ar comp_size
.It Dv ZIP_STAT_MTIME
.Ar mtime
.It Dv ZIP_STAT_CRC
.Ar crc
.It Dv ZIP_STAT_COMP_METHOD
.Ar comp_method
.It Dv ZIP_STAT_ENCRYPTION_METHOD
.Ar encryption_method
.It Dv ZIP_STAT_FLAGS
.Ar flags
.El
.Sh RETURN VALUES
Upon successful completion 0 is returned.
Otherwise, \-1 is returned and the error information in
.Ar archive
is set to indicate the error.
.Sh ERRORS
The function
.Fn zip_stat
can fail for any of the errors specified for the routine
.Xr zip_name_locate 3 .
.Pp
The function
.Fn zip_stat_index
fails and sets the error information to
.Er ZIP_ER_INVAL
if
.Ar index
is invalid.
If
.Dv ZIP_FL_UNCHANGED
is not set and no information can be obtained from the source
callback, the error information is set to
.Er ZIP_ER_CHANGED .
.Sh SEE ALSO
.Xr libzip 3 ,
.Xr zip_get_num_entries 3 ,
.Xr zip_name_locate 3 ,
.Xr zip_stat_init 3
.Sh HISTORY
.Fn zip_stat
was added in libzip 0.6.
In libzip 0.11 the type of
.Ar flags
was changed from
.Vt int
to
.Vt zip_flags_t .
.Pp
.Fn zip_stat_index
was added in libzip 0.6.
In libzip 0.10 the type of
.Ar index
was changed from
.Vt int
to
.Vt zip_uint64_t .
In libzip 0.11 the type of
.Ar flags
was changed from
.Vt int
to
.Vt zip_flags_t .
.Sh AUTHORS
.An -nosplit
.An Dieter Baron Aq Mt dillo@nih.at
and
.An Thomas Klausner Aq Mt tk@giga.or.at
