.\" zip_file_get_external_attributes.mdoc -- get external attributes for file in zip
.\" Copyright (C) 2013 Dieter Baron and Thomas Klausner
.\"
.\" This file is part of libzip, a library to manipulate ZIP files.
.\" 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 September 19, 2013
.Dt ZIP_FILE_GET_EXTERNAL_ATTRIBUTES 3
.Os
.Sh NAME
.Nm zip_file_get_external_attributes
.Nd get external attributes for file in zip
.Sh LIBRARY
libzip (-lzip)
.Sh SYNOPSIS
.In zip.h
.Ft const char *
.Fn zip_file_get_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" \
"zip_uint8_t *opsys" "zip_uint32_t *attributes"
.Sh DESCRIPTION
The
.Fn zip_file_get_external_attributes
function returns the operating system and external attributes for the
file at position
.Ar index
in the zip archive.
The external attributes usually contain the operating system-specific
file permissions.
If
.Ar flags
is set to
.Dv ZIP_FL_UNCHANGED ,
the original unchanged values are returned.
If
.Ar opsys
or
.Ar attributes
are
.Dv NULL ,
they are not filled in.
.Pp
The following operating systems are defined by the zip specification:
.Bl -item -compact -offset indent
.It
.Dv ZIP_OPSYS_ACORN_RISC
.It
.Dv ZIP_OPSYS_ALTERNATE_MVS
.It
.Dv ZIP_OPSYS_AMIGA
.It
.Dv ZIP_OPSYS_ATARI_ST
.It
.Dv ZIP_OPSYS_BEOS
.It
.Dv ZIP_OPSYS_CPM
.It
.Dv ZIP_OPSYS_DOS
.It
.Dv ZIP_OPSYS_MACINTOSH
.It
.Dv ZIP_OPSYS_MVS
.It
.Dv ZIP_OPSYS_OPENVMS
.It
.Dv ZIP_OPSYS_OS_2
.It
.Dv ZIP_OPSYS_OS_400
.It
.Dv ZIP_OPSYS_OS_X
.It
.Dv ZIP_OPSYS_TANDEM
.It
.Dv ZIP_OPSYS_UNIX
.It
.Dv ZIP_OPSYS_VFAT
.It
.Dv ZIP_OPSYS_VM_CMS
.It
.Dv ZIP_OPSYS_VSE
.It
.Dv ZIP_OPSYS_WINDOWS_NTFS
(uncommon, use
.Dv ZIP_OPSYS_DOS
instead)
.It
.Dv ZIP_OPSYS_Z_SYSTEM
.El
.Pp
The defines above follow the PKWARE Inc. Appnote; please note that
the InfoZIP Appnote has a slightly different mapping.
.Sh RETURN VALUES
Upon successful completion, 0 is returned.
In case of an error,
.Dv \-1
is returned and the error code in
.Ar archive
is set to indicate the error.
.Sh ERRORS
.Fn zip_file_get_external_attributes
fails if:
.Bl -tag -width Er
.It Bq Er ZIP_ER_INVAL
.Ar index
is not a valid file index in
.Ar archive .
.El
.Sh SEE ALSO
.Xr libzip 3 ,
.Xr zip_file_set_external_attributes 3
.Sh EXAMPLES
The following code can be used to expand
.Ar attributes
if the operating system is
.Dv ZIP_OPSYS_DOS .
.Bd -literal
#include <sys/stat.h>

#define FA_RDONLY       0x01            // FILE_ATTRIBUTE_READONLY
#define FA_DIREC        0x10            // FILE_ATTRIBUTE_DIRECTORY

static mode_t
_zip_dos_attr2mode(zip_uint32_t attr)
{
   mode_t m = S_IRUSR | S_IRGRP | S_IROTH;
   if (0 == (attr & FA_RDONLY))
      m |= S_IWUSR | S_IWGRP | S_IWOTH;

   if (attr & FA_DIREC)
      m = (S_IFDIR | (m & ~S_IFMT)) | S_IXUSR | S_IXGRP | S_IXOTH;

   return m;
}
.Ed
.Sh AUTHORS
.An -nosplit
.An Dieter Baron Aq Mt dillo@nih.at
and
.An Thomas Klausner Aq Mt tk@giga.or.at
