deps: Upgrade libarchive 3.6.2->3.7.4

This commit is contained in:
Tom Dewey 2024-07-12 19:57:16 +01:00 committed by Tom Dewey
parent c2ed524e44
commit 61171a0db6
1425 changed files with 12545 additions and 122968 deletions

View file

@ -9,8 +9,8 @@ OPTION (DRIVELIST_FILTER_SYSTEM_DRIVES "Filter System drives from displayed driv
project(rpi-imager LANGUAGES CXX C)
set(IMAGER_VERSION_MAJOR 1)
set(IMAGER_VERSION_MINOR 8)
set(IMAGER_VERSION_STR "${IMAGER_VERSION_MAJOR}.${IMAGER_VERSION_MINOR}.5")
set(IMAGER_VERSION_CSV "${IMAGER_VERSION_MAJOR},${IMAGER_VERSION_MINOR},5,0")
set(IMAGER_VERSION_STR "${IMAGER_VERSION_MAJOR}.${IMAGER_VERSION_MINOR}.6")
set(IMAGER_VERSION_CSV "${IMAGER_VERSION_MAJOR},${IMAGER_VERSION_MINOR},6,0")
add_definitions(-DIMAGER_VERSION_STR="${IMAGER_VERSION_STR}")
add_definitions(-DIMAGER_VERSION_CSV=${IMAGER_VERSION_CSV})
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@ -98,14 +98,14 @@ find_package(Qt5 5.14 QUIET COMPONENTS Core Quick LinguistTools Svg OPTIONAL_COM
if (Qt5_FOUND)
set(QT Qt5)
if (APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "" FORCE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE)
endif()
else()
find_package(Qt6 QUIET COMPONENTS Core Quick LinguistTools Svg OPTIONAL_COMPONENTS Widgets DBus WinExtras)
if (Qt6_FOUND)
set(QT Qt6)
if (APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "" FORCE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "11" CACHE STRING "" FORCE)
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "" FORCE)
endif()
else()
@ -210,11 +210,11 @@ if (WIN32)
set(ENABLE_TAR OFF CACHE BOOL "")
set(ENABLE_CPIO OFF CACHE BOOL "")
set(ENABLE_CAT OFF CACHE BOOL "")
add_subdirectory(dependencies/libarchive-3.6.2)
add_subdirectory(dependencies/libarchive-3.7.4)
# Disable shared libarchive (we only want static)
set_target_properties(archive PROPERTIES EXCLUDE_FROM_ALL 1)
set(LibArchive_LIBRARIES archive_static)
set(LibArchive_INCLUDE_DIR dependencies/libarchive-3.6.2/libarchive)
set(LibArchive_INCLUDE_DIR dependencies/libarchive-3.7.4/libarchive)
# Bundled fat32format
add_subdirectory(dependencies/fat32format)
@ -304,11 +304,11 @@ elseif(APPLE)
set(ENABLE_TAR OFF CACHE BOOL "")
set(ENABLE_CPIO OFF CACHE BOOL "")
set(ENABLE_CAT OFF CACHE BOOL "")
add_subdirectory(dependencies/libarchive-3.6.2)
add_subdirectory(dependencies/libarchive-3.7.4)
# Disable shared libarchive (we only want static)
set_target_properties(archive PROPERTIES EXCLUDE_FROM_ALL 1)
set(LibArchive_LIBRARIES archive_static)
set(LibArchive_INCLUDE_DIR dependencies/libarchive-3.6.2/libarchive)
set(LibArchive_INCLUDE_DIR dependencies/libarchive-3.7.4/libarchive)
find_library(Cocoa Cocoa)
find_library(CoreFoundation CoreFoundation)
@ -329,7 +329,7 @@ elseif(APPLE)
else()
find_package(CURL 7.32.0 REQUIRED)
find_package(LibArchive 3.2.0 REQUIRED)
find_package(LibArchive 3.7.4 REQUIRED)
if (NOT CMAKE_CROSSCOMPILING)
find_program(LSBLK "lsblk")

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,67 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT])
#
# DESCRIPTION
#
# For every FLAG1, FLAG2 it is checked whether the compiler works with the
# flag. If it does, the flag is added FLAGS-VARIABLE
#
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
# CFLAGS) is used. During the check the flag is always added to the
# current language's flags.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
#
# NOTE: This macro depends on the AX_APPEND_FLAG and
# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with
# AX_APPEND_LINK_FLAGS.
#
# LICENSE
#
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 5
AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG])
AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
for flag in $1; do
AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4])
done
])dnl AX_APPEND_COMPILE_FLAGS

View file

@ -1,71 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
#
# DESCRIPTION
#
# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
# added in between.
#
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains
# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly
# FLAG.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 6
AC_DEFUN([AX_APPEND_FLAG],
[dnl
AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF
AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])
AS_VAR_SET_IF(FLAGS,[
AS_CASE([" AS_VAR_GET(FLAGS) "],
[*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])],
[
AS_VAR_APPEND(FLAGS,[" $1"])
AC_RUN_LOG([: FLAGS="$FLAGS"])
])
],
[
AS_VAR_SET(FLAGS,[$1])
AC_RUN_LOG([: FLAGS="$FLAGS"])
])
AS_VAR_POPDEF([FLAGS])dnl
])dnl AX_APPEND_FLAG

View file

@ -1,74 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
#
# DESCRIPTION
#
# Check whether the given FLAG works with the current language's compiler
# or gives an error. (Warnings, however, are ignored)
#
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
# success/failure.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 4
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_VAR_IF(CACHEVAR,yes,
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS

View file

@ -1,37 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_require_defined.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_REQUIRE_DEFINED(MACRO)
#
# DESCRIPTION
#
# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
# been defined and thus are available for use. This avoids random issues
# where a macro isn't expanded. Instead the configure script emits a
# non-fatal:
#
# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
#
# It's like AC_REQUIRE except it doesn't expand the required macro.
#
# Here's an example:
#
# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
#
# LICENSE
#
# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 1
AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
])dnl AX_REQUIRE_DEFINED

View file

@ -1,51 +0,0 @@
# AC_LANG_STDCALL_FUNC_LINK_TRY(FUNCTION, SIGNATURE)
# -------------------------------
# Produce a source which links correctly iff the FUNCTION exists.
AC_DEFUN([AC_LANG_STDCALL_FUNC_LINK_TRY],
[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
# AC_CHECK_STDCALL_FUNC(FUNCTION, SIGNATURE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# -----------------------------------------------------------------
AC_DEFUN([AC_CHECK_STDCALL_FUNC],
[AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$1])dnl
AC_CACHE_CHECK([for $1], ac_var,
[AC_LINK_IFELSE([AC_LANG_STDCALL_FUNC_LINK_TRY([$1],[$2])],
[AS_VAR_SET(ac_var, yes)],
[AS_VAR_SET(ac_var, no)])])
AS_IF([test AS_VAR_GET(ac_var) = yes], [$3], [$4])dnl
AS_VAR_POPDEF([ac_var])dnl
])# AC_CHECK_FUNC
# AC_LANG_STDCALL_FUNC_LINK_TRY(C)(FUNCTION, SIGNATURE)
# ----------------------------------
# Don't include <ctype.h> because on OSF/1 3.0 it includes
# <sys/types.h> which includes <sys/select.h> which contains a
# prototype for select. Similarly for bzero.
m4_define([AC_LANG_STDCALL_FUNC_LINK_TRY(C)],
[AC_LANG_PROGRAM(
[/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char __stdcall $1 ( $2 ) below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char __stdcall $1 ( $2 );
char (*f) ( $2 );
],
[/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$1) || defined (__stub___$1)
choke me
#else
f = $1;
#endif
])])
# AC_LANG_STDCALL_FUNC_LINK_TRY(C++)(FUNCTION)
# ------------------------------------
m4_copy([AC_LANG_STDCALL_FUNC_LINK_TRY(C)], [AC_LANG_STDCALL_FUNC_LINK_TRY(C++)])

View file

@ -1,348 +0,0 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 1999-2021 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN* | MSYS*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/* | msys/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
if test -f "$dir/lib$lib.a"; then
found=yes
lib=$dir/lib$lib.a
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

File diff suppressed because it is too large Load diff

View file

@ -1,696 +0,0 @@
#! /bin/sh
#
# NOTE: This file was brought from
# http://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/config.rpath
# You should sometimes check if the file is updated and bring it to
# our trunk and copy this note to the top of that file.
#
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2011 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# Known limitations:
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
# than 256 bytes, otherwise the compiler driver will dump core. The only
# known workaround is to choose shorter directory names for the build
# directory and/or the installation directory.
# All known linkers require a `.a' archive for static linking (except MSVC,
# which needs '.lib').
libext=a
shrext=.so
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
# Code taken from libtool.m4's _LT_CC_BASENAME.
for cc_temp in $CC""; do
case $cc_temp in
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
\-*) ;;
*) break;;
esac
done
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
# Code taken from libtool.m4's _LT_COMPILER_PIC.
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix*)
wl='-Wl,'
;;
mingw* | cygwin* | msys* | pw32* | os2* | cegcc*)
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6* | nonstopux*)
wl='-Wl,'
;;
linux* | k*bsd*-gnu | kopensolaris*-gnu)
case $cc_basename in
ecc*)
wl='-Wl,'
;;
icc* | ifort*)
wl='-Wl,'
;;
lf95*)
wl='-Wl,'
;;
nagfor*)
wl='-Wl,-Wl,,'
;;
pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
wl='-Wl,'
;;
ccc*)
wl='-Wl,'
;;
xl* | bgxl* | bgf* | mpixl*)
wl='-Wl,'
;;
como)
wl='-lopt='
;;
*)
case `$CC -V 2>&1 | sed 5q` in
*Sun\ F* | *Sun*Fortran*)
wl=
;;
*Sun\ C*)
wl='-Wl,'
;;
esac
;;
esac
;;
newsos6)
;;
*nto* | *qnx*)
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
rdos*)
;;
solaris*)
case $cc_basename in
f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
wl='-Qoption ld '
;;
*)
wl='-Wl,'
;;
esac
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3*)
wl='-Wl,'
;;
sysv4*MP*)
;;
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
wl='-Wl,'
;;
unicos*)
wl='-Wl,'
;;
uts4*)
;;
esac
fi
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | msys* | mingw* | pw32* | cegcc*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
interix*)
# we just hope/assume this is gcc and not c89 (= MSVC++)
with_gnu_ld=yes
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
# Set some defaults for GNU ld with shared library support. These
# are reset later if shared libraries are not supported. Putting them
# here allows them to be overridden if necessary.
# Unlike libtool, we use -rpath here, not --rpath, since the documented
# option of GNU ld is called -rpath, not --rpath.
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
case "$host_os" in
aix[3-9]*)
# On AIX/PPC, the GNU linker is very broken
if test "$host_cpu" != ia64; then
ld_shlibs=no
fi
;;
amigaos*)
case "$host_cpu" in
powerpc)
;;
m68k)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
esac
;;
beos*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | msys* | mingw* | pw32* | cegcc*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
haiku*)
;;
interix[3-9]*)
hardcode_direct=no
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
netbsd*)
;;
solaris*)
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
case `$LD -v 2>&1` in
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
ld_shlibs=no
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
else
ld_shlibs=no
fi
;;
esac
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = no; then
hardcode_libdir_flag_spec=
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix[4-9]*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
;;
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
:
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
;;
esac
fi
# Begin _LT_AC_SYS_LIBPATH_AIX.
echo 'int main () { return 0; }' > conftest.c
${CC} ${LDFLAGS} conftest.c -o conftest
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
if test -z "$aix_libpath"; then
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
}'`
fi
if test -z "$aix_libpath"; then
aix_libpath="/usr/lib:/lib"
fi
rm -f conftest.c conftest
# End _LT_AC_SYS_LIBPATH_AIX.
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
fi
fi
;;
amigaos*)
case "$host_cpu" in
powerpc)
;;
m68k)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
esac
;;
bsdi[45]*)
;;
cygwin* | msys* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
hardcode_direct=no
if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
:
else
ld_shlibs=no
fi
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd* | dragonfly*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
hpux10*)
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
fi
;;
hpux11*)
if test "$with_gnu_ld" = no; then
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
case $host_cpu in
hppa*64*|ia64*)
hardcode_direct=no
;;
*)
hardcode_direct=yes
# hardcode_minus_L: Not really in the search PATH,
# but as the default location of the library.
hardcode_minus_L=yes
;;
esac
fi
;;
irix5* | irix6* | nonstopux*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
*nto* | *qnx*)
;;
openbsd*)
if test -f /usr/libexec/ld.so; then
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
else
ld_shlibs=no
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
case $host_vendor in
sni)
hardcode_direct=yes # is this really true???
;;
siemens)
hardcode_direct=no
;;
motorola)
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
;;
esac
;;
sysv4.3*)
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
;;
sysv5* | sco3.2v5* | sco5v6*)
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
hardcode_libdir_separator=':'
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
# only about the one the linker finds when passed -lNAME. This is the last
# element of library_names_spec in libtool.m4, or possibly two of them if the
# linker has special search rules.
library_names_spec= # the last element of library_names_spec in libtool.m4
libname_spec='lib$name'
case "$host_os" in
aix3*)
library_names_spec='$libname.a'
;;
aix[4-9]*)
library_names_spec='$libname$shrext'
;;
amigaos*)
case "$host_cpu" in
powerpc*)
library_names_spec='$libname$shrext' ;;
m68k)
library_names_spec='$libname.a' ;;
esac
;;
beos*)
library_names_spec='$libname$shrext'
;;
bsdi[45]*)
library_names_spec='$libname$shrext'
;;
cygwin* | msys* | mingw* | pw32* | cegcc*)
shrext=.dll
library_names_spec='$libname.dll.a $libname.lib'
;;
darwin* | rhapsody*)
shrext=.dylib
library_names_spec='$libname$shrext'
;;
dgux*)
library_names_spec='$libname$shrext'
;;
freebsd* | dragonfly*)
case "$host_os" in
freebsd[123]*)
library_names_spec='$libname$shrext$versuffix' ;;
*)
library_names_spec='$libname$shrext' ;;
esac
;;
gnu*)
library_names_spec='$libname$shrext'
;;
haiku*)
library_names_spec='$libname$shrext'
;;
hpux9* | hpux10* | hpux11*)
case $host_cpu in
ia64*)
shrext=.so
;;
hppa*64*)
shrext=.sl
;;
*)
shrext=.sl
;;
esac
library_names_spec='$libname$shrext'
;;
interix[3-9]*)
library_names_spec='$libname$shrext'
;;
irix5* | irix6* | nonstopux*)
library_names_spec='$libname$shrext'
case "$host_os" in
irix5* | nonstopux*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
;;
linux*oldld* | linux*aout* | linux*coff*)
;;
linux* | k*bsd*-gnu | kopensolaris*-gnu)
library_names_spec='$libname$shrext'
;;
knetbsd*-gnu)
library_names_spec='$libname$shrext'
;;
netbsd*)
library_names_spec='$libname$shrext'
;;
newsos6)
library_names_spec='$libname$shrext'
;;
*nto* | *qnx*)
library_names_spec='$libname$shrext'
;;
openbsd*)
library_names_spec='$libname$shrext$versuffix'
;;
os2*)
libname_spec='$name'
shrext=.dll
library_names_spec='$libname.a'
;;
osf3* | osf4* | osf5*)
library_names_spec='$libname$shrext'
;;
rdos*)
;;
solaris*)
library_names_spec='$libname$shrext'
;;
sunos4*)
library_names_spec='$libname$shrext$versuffix'
;;
sysv4 | sysv4.3*)
library_names_spec='$libname$shrext'
;;
sysv4*MP*)
library_names_spec='$libname$shrext'
;;
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
library_names_spec='$libname$shrext'
;;
tpf*)
library_names_spec='$libname$shrext'
;;
uts4*)
library_names_spec='$libname$shrext'
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Format of library name prefix.
libname_spec="$escaped_libname_spec"
# Library names that the linker finds when passed -lNAME.
library_names_spec="$escaped_library_names_spec"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
EOF

File diff suppressed because it is too large Load diff

View file

@ -1,791 +0,0 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 1999-2021 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by 'PROGRAMS ARGS'.
object Object file output by 'PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputting dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit $?
;;
esac
# Get the directory component of the given path, and save it in the
# global variables '$dir'. Note that this directory component will
# be either empty or ending with a '/' character. This is deliberate.
set_dir_from ()
{
case $1 in
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
*) dir=;;
esac
}
# Get the suffix-stripped basename of the given path, and save it the
# global variable '$base'.
set_base_from ()
{
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
}
# If no dependency file was actually created by the compiler invocation,
# we still have to create a dummy depfile, to avoid errors with the
# Makefile "include basename.Plo" scheme.
make_dummy_depfile ()
{
echo "#dummy" > "$depfile"
}
# Factor out some common post-processing of the generated depfile.
# Requires the auxiliary global variable '$tmpdepfile' to be set.
aix_post_process_depfile ()
{
# If the compiler actually managed to produce a dependency file,
# post-process it.
if test -f "$tmpdepfile"; then
# Each line is of the form 'foo.o: dependency.h'.
# Do two passes, one to just change these to
# $object: dependency.h
# and one to simply output
# dependency.h:
# which is needed to avoid the deleted-header problem.
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
} > "$depfile"
rm -f "$tmpdepfile"
else
make_dummy_depfile
fi
}
# A tabulation character.
tab=' '
# A newline character.
nl='
'
# Character ranges might be problematic outside the C locale.
# These definitions help.
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
lower=abcdefghijklmnopqrstuvwxyz
digits=0123456789
alpha=${upper}${lower}
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Avoid interferences from the environment.
gccflag= dashmflag=
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
cygpath_u="cygpath -u -f -"
if test "$depmode" = msvcmsys; then
# This is just like msvisualcpp but w/o cygpath translation.
# Just convert the backslash-escaped backslashes to single forward
# slashes to satisfy depend.m4
cygpath_u='sed s,\\\\,/,g'
depmode=msvisualcpp
fi
if test "$depmode" = msvc7msys; then
# This is just like msvc7 but w/o cygpath translation.
# Just convert the backslash-escaped backslashes to single forward
# slashes to satisfy depend.m4
cygpath_u='sed s,\\\\,/,g'
depmode=msvc7
fi
if test "$depmode" = xlc; then
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
gccflag=-qmakedep=gcc,-MF
depmode=gcc
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
## the command line argument order; so add the flags where they
## appear in depend2.am. Note that the slowdown incurred here
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
for arg
do
case $arg in
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
*) set fnord "$@" "$arg" ;;
esac
shift # fnord
shift # $arg
done
"$@"
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
## (see the conditional assignment to $gccflag above).
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say). Also, it might not be
## supported by the other compilers which use the 'gcc' depmode.
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
# The second -e expression handles DOS-style file names with drive
# letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the "deleted header file" problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
## Some versions of gcc put a space before the ':'. On the theory
## that the space means something, we add a space to the output as
## well. hp depmode also adds that space, but also prefixes the VPATH
## to the object. Take care to not repeat it in the output.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like '#:fec' to the end of the
# dependency line.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
| tr "$nl" ' ' >> "$depfile"
echo >> "$depfile"
# The second pass generates a dummy entry for each header file.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> "$depfile"
else
make_dummy_depfile
fi
rm -f "$tmpdepfile"
;;
xlc)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts '$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
set_dir_from "$object"
set_base_from "$object"
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.u
tmpdepfile2=$base.u
tmpdepfile3=$dir.libs/$base.u
"$@" -Wc,-M
else
tmpdepfile1=$dir$base.u
tmpdepfile2=$dir$base.u
tmpdepfile3=$dir$base.u
"$@" -M
fi
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
do
test -f "$tmpdepfile" && break
done
aix_post_process_depfile
;;
tcc)
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
# FIXME: That version still under development at the moment of writing.
# Make that this statement remains true also for stable, released
# versions.
# It will wrap lines (doesn't matter whether long or short) with a
# trailing '\', as in:
#
# foo.o : \
# foo.c \
# foo.h \
#
# It will put a trailing '\' even on the last line, and will use leading
# spaces rather than leading tabs (at least since its commit 0394caf7
# "Emit spaces for -MD").
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
# We have to change lines of the first kind to '$object: \'.
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
# And for each line of the second kind, we have to emit a 'dep.h:'
# dummy dependency, to avoid the deleted-header problem.
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
rm -f "$tmpdepfile"
;;
## The order of this option in the case statement is important, since the
## shell code in configure will try each of these formats in the order
## listed in this file. A plain '-MD' option would be understood by many
## compilers, so we must ensure this comes after the gcc and icc options.
pgcc)
# Portland's C compiler understands '-MD'.
# Will always output deps to 'file.d' where file is the root name of the
# source file under compilation, even if file resides in a subdirectory.
# The object file name does not affect the name of the '.d' file.
# pgcc 10.2 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using '\' :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
set_dir_from "$object"
# Use the source, not the object, to determine the base name, since
# that's sadly what pgcc will do too.
set_base_from "$source"
tmpdepfile=$base.d
# For projects that build the same source file twice into different object
# files, the pgcc approach of using the *source* file root name can cause
# problems in parallel builds. Use a locking strategy to avoid stomping on
# the same $tmpdepfile.
lockdir=$base.d-lock
trap "
echo '$0: caught signal, cleaning up...' >&2
rmdir '$lockdir'
exit 1
" 1 2 13 15
numtries=100
i=$numtries
while test $i -gt 0; do
# mkdir is a portable test-and-set.
if mkdir "$lockdir" 2>/dev/null; then
# This process acquired the lock.
"$@" -MD
stat=$?
# Release the lock.
rmdir "$lockdir"
break
else
# If the lock is being held by a different process, wait
# until the winning process is done or we timeout.
while test -d "$lockdir" && test $i -gt 0; do
sleep 1
i=`expr $i - 1`
done
fi
i=`expr $i - 1`
done
trap - 1 2 13 15
if test $i -le 0; then
echo "$0: failed to acquire lock after $numtries attempts" >&2
echo "$0: check lockdir '$lockdir'" >&2
exit 1
fi
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp2)
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
# compilers, which have integrated preprocessors. The correct option
# to use with these is +Maked; it writes dependencies to a file named
# 'foo.d', which lands next to the object file, wherever that
# happens to be.
# Much of this is similar to the tru64 case; see comments there.
set_dir_from "$object"
set_base_from "$object"
if test "$libtool" = yes; then
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir.libs/$base.d
"$@" -Wc,+Maked
else
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir$base.d
"$@" +Maked
fi
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
# Add 'dependent.h:' lines.
sed -ne '2,${
s/^ *//
s/ \\*$//
s/$/:/
p
}' "$tmpdepfile" >> "$depfile"
else
make_dummy_depfile
fi
rm -f "$tmpdepfile" "$tmpdepfile2"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in 'foo.d' instead, so we check for that too.
# Subdirectories are respected.
set_dir_from "$object"
set_base_from "$object"
if test "$libtool" = yes; then
# Libtool generates 2 separate objects for the 2 libraries. These
# two compilations output dependencies in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir$base.o.d # libtool 1.5
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -ne 0; then
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
do
test -f "$tmpdepfile" && break
done
# Same post-processing that is required for AIX mode.
aix_post_process_depfile
;;
msvc7)
if test "$libtool" = yes; then
showIncludes=-Wc,-showIncludes
else
showIncludes=-showIncludes
fi
"$@" $showIncludes > "$tmpdepfile"
stat=$?
grep -v '^Note: including file: ' "$tmpdepfile"
if test $stat -ne 0; then
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
# The first sed program below extracts the file names and escapes
# backslashes for cygpath. The second sed program outputs the file
# name when reading, but also accumulates all include files in the
# hold buffer in order to output them again at the end. This only
# works with sed implementations that can handle large buffers.
sed < "$tmpdepfile" -n '
/^Note: including file: *\(.*\)/ {
s//\1/
s/\\/\\\\/g
p
}' | $cygpath_u | sort -u | sed -n '
s/ /\\ /g
s/\(.*\)/'"$tab"'\1 \\/p
s/.\(.*\) \\/\1:/
H
$ {
s/.*/'"$tab"'/
G
p
}' >> "$depfile"
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
rm -f "$tmpdepfile"
;;
msvc7msys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# Remove '-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for ':'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
"$@" $dashmflag |
sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this sed invocation
# correctly. Breaking it into two sed invocations is a workaround.
tr ' ' "$nl" < "$tmpdepfile" \
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no eat=no
for arg
do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
if test $eat = yes; then
eat=no
continue
fi
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-arch)
eat=yes ;;
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix=`echo "$object" | sed 's/^.*\././'`
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
# makedepend may prepend the VPATH from the source file name to the object.
# No need to regex-escape $object, excess matching of '.' is harmless.
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process the last invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed '1,2d' "$tmpdepfile" \
| tr ' ' "$nl" \
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
| sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
# Remove '-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E \
| sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
| sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test "X$1" != 'X--mode=compile'; do
shift
done
shift
fi
IFS=" "
for arg
do
case "$arg" in
-o)
shift
;;
$object)
shift
;;
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E 2>/dev/null |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
echo "$tab" >> "$depfile"
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvcmsys)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

View file

@ -1,271 +0,0 @@
# iconv.m4 serial 19 (gettext-0.18.2)
dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
[
dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
dnl accordingly.
AC_LIB_LINKFLAGS_BODY([iconv])
])
AC_DEFUN([AM_ICONV_LINK],
[
dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
dnl those with the standalone portable GNU libiconv installed).
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
dnl accordingly.
AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
dnl Add $INCICONV to CPPFLAGS before performing the following checks,
dnl because if the user has installed libiconv and not disabled its use
dnl via --without-libiconv-prefix, he wants to use it. The first
dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
am_save_CPPFLAGS="$CPPFLAGS"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stdlib.h>
#include <iconv.h>
]],
[[iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);]])],
[am_cv_func_iconv=yes])
if test "$am_cv_func_iconv" != yes; then
am_save_LIBS="$LIBS"
LIBS="$LIBS $LIBICONV"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stdlib.h>
#include <iconv.h>
]],
[[iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);]])],
[am_cv_lib_iconv=yes]
[am_cv_func_iconv=yes])
LIBS="$am_save_LIBS"
fi
])
if test "$am_cv_func_iconv" = yes; then
AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
dnl Solaris 10.
am_save_LIBS="$LIBS"
if test $am_cv_lib_iconv = yes; then
LIBS="$LIBS $LIBICONV"
fi
am_cv_func_iconv_works=no
for ac_iconv_const in '' 'const'; do
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <iconv.h>
#include <string.h>
#ifndef ICONV_CONST
# define ICONV_CONST $ac_iconv_const
#endif
]],
[[int result = 0;
/* Test against AIX 5.1 bug: Failures are not distinguishable from successful
returns. */
{
iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
if (cd_utf8_to_88591 != (iconv_t)(-1))
{
static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
char buf[10];
ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_utf8_to_88591,
&inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res == 0)
result |= 1;
iconv_close (cd_utf8_to_88591);
}
}
/* Test against Solaris 10 bug: Failures are not distinguishable from
successful returns. */
{
iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
if (cd_ascii_to_88591 != (iconv_t)(-1))
{
static ICONV_CONST char input[] = "\263";
char buf[10];
ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_ascii_to_88591,
&inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res == 0)
result |= 2;
iconv_close (cd_ascii_to_88591);
}
}
/* Test against AIX 6.1..7.1 bug: Buffer overrun. */
{
iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
if (cd_88591_to_utf8 != (iconv_t)(-1))
{
static ICONV_CONST char input[] = "\304";
static char buf[2] = { (char)0xDE, (char)0xAD };
ICONV_CONST char *inptr = input;
size_t inbytesleft = 1;
char *outptr = buf;
size_t outbytesleft = 1;
size_t res = iconv (cd_88591_to_utf8,
&inptr, &inbytesleft,
&outptr, &outbytesleft);
if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
result |= 4;
iconv_close (cd_88591_to_utf8);
}
}
#if 0 /* This bug could be worked around by the caller. */
/* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
{
iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
if (cd_88591_to_utf8 != (iconv_t)(-1))
{
static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
char buf[50];
ICONV_CONST char *inptr = input;
size_t inbytesleft = strlen (input);
char *outptr = buf;
size_t outbytesleft = sizeof (buf);
size_t res = iconv (cd_88591_to_utf8,
&inptr, &inbytesleft,
&outptr, &outbytesleft);
if ((int)res > 0)
result |= 8;
iconv_close (cd_88591_to_utf8);
}
}
#endif
/* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
provided. */
if (/* Try standardized names. */
iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
/* Try IRIX, OSF/1 names. */
&& iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
/* Try AIX names. */
&& iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
/* Try HP-UX names. */
&& iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
result |= 16;
return result;
]])],
[am_cv_func_iconv_works=yes], ,
[case "$host_os" in
aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
*) am_cv_func_iconv_works="guessing yes" ;;
esac])
test "$am_cv_func_iconv_works" = no || break
done
LIBS="$am_save_LIBS"
])
case "$am_cv_func_iconv_works" in
*no) am_func_iconv=no am_cv_lib_iconv=no ;;
*) am_func_iconv=yes ;;
esac
else
am_func_iconv=no am_cv_lib_iconv=no
fi
if test "$am_func_iconv" = yes; then
AC_DEFINE([HAVE_ICONV], [1],
[Define if you have the iconv() function and it works.])
fi
if test "$am_cv_lib_iconv" = yes; then
AC_MSG_CHECKING([how to link with libiconv])
AC_MSG_RESULT([$LIBICONV])
else
dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
dnl either.
CPPFLAGS="$am_save_CPPFLAGS"
LIBICONV=
LTLIBICONV=
fi
AC_SUBST([LIBICONV])
AC_SUBST([LTLIBICONV])
])
dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
dnl avoid warnings like
dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
dnl This is tricky because of the way 'aclocal' is implemented:
dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
dnl Otherwise aclocal's initial scan pass would miss the macro definition.
dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
dnl warnings.
m4_define([gl_iconv_AC_DEFUN],
m4_version_prereq([2.64],
[[AC_DEFUN_ONCE(
[$1], [$2])]],
[m4_ifdef([gl_00GNULIB],
[[AC_DEFUN_ONCE(
[$1], [$2])]],
[[AC_DEFUN(
[$1], [$2])]])]))
gl_iconv_AC_DEFUN([AM_ICONV],
[
AM_ICONV_LINK
if test "$am_cv_func_iconv" = yes; then
AC_MSG_CHECKING([for iconv declaration])
AC_CACHE_VAL([am_cv_proto_iconv], [
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stdlib.h>
#include <iconv.h>
extern
#ifdef __cplusplus
"C"
#endif
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
#else
size_t iconv();
#endif
]],
[[]])],
[am_cv_proto_iconv_arg1=""],
[am_cv_proto_iconv_arg1="const"])
am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
AC_MSG_RESULT([
$am_cv_proto_iconv])
AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
[Define as const if the declaration of iconv() needs const.])
dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
m4_ifdef([gl_ICONV_H_DEFAULTS],
[AC_REQUIRE([gl_ICONV_H_DEFAULTS])
if test -n "$am_cv_proto_iconv_arg1"; then
ICONV_CONST="const"
fi
])
fi
])

View file

@ -1,541 +0,0 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2020-11-14.01; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# 'make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
tab=' '
nl='
'
IFS=" $tab$nl"
# Set DOITPROG to "echo" to test this script.
doit=${DOITPROG-}
doit_exec=${doit:-exec}
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
posix_mkdir=
# Desired mode of installed file.
mode=0755
# Create dirs (including intermediate dirs) using mode 755.
# This is like GNU 'install' as of coreutils 8.32 (2020).
mkdir_umask=22
backupsuffix=
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
stripcmd=
src=
dst=
dir_arg=
dst_arg=
copy_on_change=false
is_target_a_directory=possibly
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
--help display this help and exit.
--version display version info and exit.
-c (ignored)
-C install only if different (preserve data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-p pass -p to $cpprog.
-s $stripprog installed files.
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
By default, rm is invoked with -f; when overridden with RMPROG,
it's up to you to specify -f if you want it.
If -S is not specified, no backups are attempted.
Email bug reports to bug-automake@gnu.org.
Automake home page: https://www.gnu.org/software/automake/
"
while test $# -ne 0; do
case $1 in
-c) ;;
-C) copy_on_change=true;;
-d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
case $mode in
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
shift;;
-o) chowncmd="$chownprog $2"
shift;;
-p) cpprog="$cpprog -p";;
-s) stripcmd=$stripprog;;
-S) backupsuffix="$2"
shift;;
-t)
is_target_a_directory=always
dst_arg=$2
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
shift;;
-T) is_target_a_directory=never;;
--version) echo "$0 $scriptversion"; exit $?;;
--) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
shift
done
# We allow the use of options -d and -T together, by making -d
# take the precedence; this is for compatibility with GNU install.
if test -n "$dir_arg"; then
if test -n "$dst_arg"; then
echo "$0: target directory not allowed when installing a directory." >&2
exit 1
fi
fi
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dst_arg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dst_arg"
shift # fnord
fi
shift # arg
dst_arg=$arg
# Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
done
fi
if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call 'install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
if test -z "$dir_arg"; then
if test $# -gt 1 || test "$is_target_a_directory" = always; then
if test ! -d "$dst_arg"; then
echo "$0: $dst_arg: Is not a directory." >&2
exit 1
fi
fi
fi
if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
trap "ret=141; $do_exit" 13
trap "ret=143; $do_exit" 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
case $mode in
# Optimize common cases.
*644) cp_umask=133;;
*755) cp_umask=22;;
*[0-7])
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
for src
do
# Protect names problematic for 'test' and other utilities.
case $src in
-* | [=\(\)!]) src=./$src;;
esac
if test -n "$dir_arg"; then
dst=$src
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
# Don't chown directories that already exist.
if test $dstdir_status = 0; then
chowncmd=""
fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dst_arg
# If destination is a directory, append the input filename.
if test -d "$dst"; then
if test "$is_target_a_directory" = never; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dstbase=`basename "$src"`
case $dst in
*/) dst=$dst$dstbase;;
*) dst=$dst/$dstbase;;
esac
dstdir_status=0
else
dstdir=`dirname "$dst"`
test -d "$dstdir"
dstdir_status=$?
fi
fi
case $dstdir in
*/) dstdirslash=$dstdir;;
*) dstdirslash=$dstdir/;;
esac
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
mkdir_mode=-m$mode
else
mkdir_mode=
fi
posix_mkdir=false
# The $RANDOM variable is not portable (e.g., dash). Use it
# here however when possible just to lower collision chance.
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap '
ret=$?
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
exit $ret
' 0
# Because "mkdir -p" follows existing symlinks and we likely work
# directly in world-writeable /tmp, make sure that the '$tmpdir'
# directory is successfully created first before we actually test
# 'mkdir -p'.
if (umask $mkdir_umask &&
$mkdirprog $mkdir_mode "$tmpdir" &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
test_tmpdir="$tmpdir/a"
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
fi
trap '' 0;;
esac
if
$posix_mkdir && (
umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
/*) prefix='/';;
[-=\(\)!]*) prefix='./';;
*) prefix='';;
esac
oIFS=$IFS
IFS=/
set -f
set fnord $dstdir
shift
set +f
IFS=$oIFS
prefixes=
for d
do
test X"$d" = X && continue
prefix=$prefix$d
if test -d "$prefix"; then
prefixes=
else
if $posix_mkdir; then
(umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
else
case $prefix in
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
*) qprefix=$prefix;;
esac
prefixes="$prefixes '$qprefix'"
fi
fi
prefix=$prefix/
done
if test -n "$prefixes"; then
# Don't fail if two instances are running concurrently.
(umask $mkdir_umask &&
eval "\$doit_exec \$mkdirprog $prefixes") ||
test -d "$dstdir" || exit 1
obsolete_mkdir_used=true
fi
fi
fi
if test -n "$dir_arg"; then
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
# Make a couple of temp file names in the proper directory.
dsttmp=${dstdirslash}_inst.$$_
rmtmp=${dstdirslash}_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
(umask $cp_umask &&
{ test -z "$stripcmd" || {
# Create $dsttmp read-write so that cp doesn't create it read-only,
# which would cause strip to fail.
if test -z "$doit"; then
: >"$dsttmp" # No need to fork-exec 'touch'.
else
$doit touch "$dsttmp"
fi
}
} &&
$doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# If -C, don't bother to copy if it wouldn't change the file.
if $copy_on_change &&
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
set -f &&
set X $old && old=:$2:$4:$5:$6 &&
set X $new && new=:$2:$4:$5:$6 &&
set +f &&
test "$old" = "$new" &&
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
then
rm -f "$dsttmp"
else
# If $backupsuffix is set, and the file being installed
# already exists, attempt a backup. Don't worry if it fails,
# e.g., if mv doesn't support -f.
if test -n "$backupsuffix" && test -f "$dst"; then
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
fi
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
{
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
test ! -f "$dst" ||
$doit $rmcmd "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dst"
}
fi || exit 1
trap '' 0
fi
done
# Local variables:
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

View file

@ -1,20 +0,0 @@
# la_TYPE_UID_T
# -------------
AC_DEFUN([la_TYPE_UID_T],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_CACHE_CHECK(for uid_t in sys/types.h, la_cv_type_uid_t,
[AC_EGREP_HEADER(uid_t, sys/types.h,
la_cv_type_uid_t=yes, la_cv_type_uid_t=no)])
if test $la_cv_type_uid_t = no; then
case $host in
*mingw*) def_uid_t=short ;;
*) def_uid_t=int ;;
esac
AC_DEFINE_UNQUOTED(uid_t, [$def_uid_t],
[Define to match typeof st_uid field of struct stat if <sys/types.h> doesn't define.])
AC_DEFINE_UNQUOTED(gid_t, [$def_uid_t],
[Define to match typeof st_gid field of struct stat if <sys/types.h> doesn't define.])
fi
])
AU_ALIAS([AC_TYPE_UID_T], [la_TYPE_UID_T])

View file

@ -1,109 +0,0 @@
# lib-ld.m4 serial 5 (gettext-0.18.2)
dnl Copyright (C) 1996-2003, 2009-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Subroutines of libtool.m4,
dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
dnl with libtool.m4.
dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
AC_DEFUN([AC_LIB_PROG_LD_GNU],
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
case `$LD -v 2>&1 </dev/null` in
*GNU* | *'with BFD'*)
acl_cv_prog_gnu_ld=yes ;;
*)
acl_cv_prog_gnu_ld=no ;;
esac])
with_gnu_ld=$acl_cv_prog_gnu_ld
])
dnl From libtool-1.4. Sets the variable LD.
AC_DEFUN([AC_LIB_PROG_LD],
[AC_ARG_WITH([gnu-ld],
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
# Prepare PATH_SEPARATOR.
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
# Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
# contains only /bin. Note that ksh looks also at the FPATH variable,
# so we have to set that as well for the test.
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
&& { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
|| PATH_SEPARATOR=';'
}
fi
ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by GCC])
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
*)
ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
esac
case $ac_prog in
# Accept absolute paths.
[[\\/]* | [A-Za-z]:[\\/]*)]
[re_direlt='/[^/][^/]*/\.\./']
# Canonicalize the path of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
done
test -z "$LD" && LD="$ac_prog"
;;
"")
# If it fails, then pretend we aren't using GCC.
ac_prog=ld
;;
*)
# If it is relative, then search for the first ld in PATH.
with_gnu_ld=unknown
;;
esac
elif test "$with_gnu_ld" = yes; then
AC_MSG_CHECKING([for GNU ld])
else
AC_MSG_CHECKING([for non-GNU ld])
fi
AC_CACHE_VAL([acl_cv_path_LD],
[if test -z "$LD"; then
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
acl_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
*GNU* | *'with BFD'*)
test "$with_gnu_ld" != no && break ;;
*)
test "$with_gnu_ld" != yes && break ;;
esac
fi
done
IFS="$ac_save_ifs"
else
acl_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
LD="$acl_cv_path_LD"
if test -n "$LD"; then
AC_MSG_RESULT([$LD])
else
AC_MSG_RESULT([no])
fi
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
AC_LIB_PROG_LD_GNU
])

View file

@ -1,777 +0,0 @@
# lib-link.m4 serial 26 (gettext-0.18.2)
dnl Copyright (C) 2001-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
AC_PREREQ([2.54])
dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
dnl augments the CPPFLAGS variable.
dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
AC_DEFUN([AC_LIB_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
pushdef([Name],[m4_translit([$1],[./+-], [____])])
pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
AC_LIB_LINKFLAGS_BODY([$1], [$2])
ac_cv_lib[]Name[]_libs="$LIB[]NAME"
ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
])
LIB[]NAME="$ac_cv_lib[]Name[]_libs"
LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
AC_SUBST([LIB]NAME[_PREFIX])
dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
dnl results of this search when this library appears as a dependency.
HAVE_LIB[]NAME=yes
popdef([NAME])
popdef([Name])
])
dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
dnl searches for libname and the libraries corresponding to explicit and
dnl implicit dependencies, together with the specified include files and
dnl the ability to compile and link the specified testcode. The missing-message
dnl defaults to 'no' and may contain additional hints for the user.
dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
[
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
AC_REQUIRE([AC_LIB_RPATH])
pushdef([Name],[m4_translit([$1],[./+-], [____])])
pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
dnl accordingly.
AC_LIB_LINKFLAGS_BODY([$1], [$2])
dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
dnl because if the user has installed lib[]Name and not disabled its use
dnl via --without-lib[]Name-prefix, he wants to use it.
ac_save_CPPFLAGS="$CPPFLAGS"
AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
ac_save_LIBS="$LIBS"
dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
dnl because these -l options might require -L options that are present in
dnl LIBS. -l options benefit only from the -L options listed before it.
dnl Otherwise, add it to the front of LIBS, because it may be a static
dnl library that depends on another static library that is present in LIBS.
dnl Static libraries benefit only from the static libraries listed after
dnl it.
case " $LIB[]NAME" in
*" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
*) LIBS="$LIB[]NAME $LIBS" ;;
esac
AC_LINK_IFELSE(
[AC_LANG_PROGRAM([[$3]], [[$4]])],
[ac_cv_lib[]Name=yes],
[ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
LIBS="$ac_save_LIBS"
])
if test "$ac_cv_lib[]Name" = yes; then
HAVE_LIB[]NAME=yes
AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
AC_MSG_CHECKING([how to link with lib[]$1])
AC_MSG_RESULT([$LIB[]NAME])
else
HAVE_LIB[]NAME=no
dnl If $LIB[]NAME didn't lead to a usable library, we don't need
dnl $INC[]NAME either.
CPPFLAGS="$ac_save_CPPFLAGS"
LIB[]NAME=
LTLIB[]NAME=
LIB[]NAME[]_PREFIX=
fi
AC_SUBST([HAVE_LIB]NAME)
AC_SUBST([LIB]NAME)
AC_SUBST([LTLIB]NAME)
AC_SUBST([LIB]NAME[_PREFIX])
popdef([NAME])
popdef([Name])
])
dnl Determine the platform dependent parameters needed to use rpath:
dnl acl_libext,
dnl acl_shlibext,
dnl acl_libname_spec,
dnl acl_library_names_spec,
dnl acl_hardcode_libdir_flag_spec,
dnl acl_hardcode_libdir_separator,
dnl acl_hardcode_direct,
dnl acl_hardcode_minus_L.
AC_DEFUN([AC_LIB_RPATH],
[
dnl Tell automake >= 1.10 to complain if config.rpath is missing.
m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
. ./conftest.sh
rm -f ./conftest.sh
acl_cv_rpath=done
])
wl="$acl_cv_wl"
acl_libext="$acl_cv_libext"
acl_shlibext="$acl_cv_shlibext"
acl_libname_spec="$acl_cv_libname_spec"
acl_library_names_spec="$acl_cv_library_names_spec"
acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
acl_hardcode_direct="$acl_cv_hardcode_direct"
acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
dnl Determine whether the user wants rpath handling at all.
AC_ARG_ENABLE([rpath],
[ --disable-rpath do not hardcode runtime library paths],
:, enable_rpath=yes)
])
dnl AC_LIB_FROMPACKAGE(name, package)
dnl declares that libname comes from the given package. The configure file
dnl will then not have a --with-libname-prefix option but a
dnl --with-package-prefix option. Several libraries can come from the same
dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
dnl macro call that searches for libname.
AC_DEFUN([AC_LIB_FROMPACKAGE],
[
pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
define([acl_frompackage_]NAME, [$2])
popdef([NAME])
pushdef([PACK],[$2])
pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
define([acl_libsinpackage_]PACKUP,
m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
popdef([PACKUP])
popdef([PACK])
])
dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
dnl the libraries corresponding to explicit and implicit dependencies.
dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
[
AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
[ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
dnl Autoconf >= 2.61 supports dots in --with options.
pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
AC_ARG_WITH(P_A_C_K[-prefix],
[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
--without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
[
if test "X$withval" = "Xno"; then
use_additional=no
else
if test "X$withval" = "X"; then
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
else
additional_includedir="$withval/include"
additional_libdir="$withval/$acl_libdirstem"
if test "$acl_libdirstem2" != "$acl_libdirstem" \
&& ! test -d "$withval/$acl_libdirstem"; then
additional_libdir="$withval/$acl_libdirstem2"
fi
fi
fi
])
dnl Search the library and its dependencies in $additional_libdir and
dnl $LDFLAGS. Using breadth-first-seach.
LIB[]NAME=
LTLIB[]NAME=
INC[]NAME=
LIB[]NAME[]_PREFIX=
dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
dnl computed. So it has to be reset here.
HAVE_LIB[]NAME=
rpathdirs=
ltrpathdirs=
names_already_handled=
names_next_round='$1 $2'
while test -n "$names_next_round"; do
names_this_round="$names_next_round"
names_next_round=
for name in $names_this_round; do
already_handled=
for n in $names_already_handled; do
if test "$n" = "$name"; then
already_handled=yes
break
fi
done
if test -z "$already_handled"; then
names_already_handled="$names_already_handled $name"
dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
dnl or AC_LIB_HAVE_LINKFLAGS call.
uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
eval value=\"\$HAVE_LIB$uppername\"
if test -n "$value"; then
if test "$value" = yes; then
eval value=\"\$LIB$uppername\"
test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
eval value=\"\$LTLIB$uppername\"
test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
else
dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
dnl that this library doesn't exist. So just drop it.
:
fi
else
dnl Search the library lib$name in $additional_libdir and $LDFLAGS
dnl and the already constructed $LIBNAME/$LTLIBNAME.
found_dir=
found_la=
found_so=
found_a=
eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
if test -n "$acl_shlibext"; then
shrext=".$acl_shlibext" # typically: shrext=.so
else
shrext=
fi
if test $use_additional = yes; then
dir="$additional_libdir"
dnl The same code as in the loop below:
dnl First look for a shared library.
if test -n "$acl_shlibext"; then
if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
found_so="$dir/$libname$shrext"
else
if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
ver=`(cd "$dir" && \
for f in "$libname$shrext".*; do echo "$f"; done \
| sed -e "s,^$libname$shrext\\\\.,," \
| sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
| sed 1q ) 2>/dev/null`
if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
found_dir="$dir"
found_so="$dir/$libname$shrext.$ver"
fi
else
eval library_names=\"$acl_library_names_spec\"
for f in $library_names; do
if test -f "$dir/$f"; then
found_dir="$dir"
found_so="$dir/$f"
break
fi
done
fi
fi
fi
dnl Then look for a static library.
if test "X$found_dir" = "X"; then
if test -f "$dir/$libname.$acl_libext"; then
found_dir="$dir"
found_a="$dir/$libname.$acl_libext"
fi
fi
if test "X$found_dir" != "X"; then
if test -f "$dir/$libname.la"; then
found_la="$dir/$libname.la"
fi
fi
fi
if test "X$found_dir" = "X"; then
for x in $LDFLAGS $LTLIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
case "$x" in
-L*)
dir=`echo "X$x" | sed -e 's/^X-L//'`
dnl First look for a shared library.
if test -n "$acl_shlibext"; then
if test -f "$dir/$libname$shrext"; then
found_dir="$dir"
found_so="$dir/$libname$shrext"
else
if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
ver=`(cd "$dir" && \
for f in "$libname$shrext".*; do echo "$f"; done \
| sed -e "s,^$libname$shrext\\\\.,," \
| sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
| sed 1q ) 2>/dev/null`
if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
found_dir="$dir"
found_so="$dir/$libname$shrext.$ver"
fi
else
eval library_names=\"$acl_library_names_spec\"
for f in $library_names; do
if test -f "$dir/$f"; then
found_dir="$dir"
found_so="$dir/$f"
break
fi
done
fi
fi
fi
dnl Then look for a static library.
if test "X$found_dir" = "X"; then
if test -f "$dir/$libname.$acl_libext"; then
found_dir="$dir"
found_a="$dir/$libname.$acl_libext"
fi
fi
if test "X$found_dir" != "X"; then
if test -f "$dir/$libname.la"; then
found_la="$dir/$libname.la"
fi
fi
;;
esac
if test "X$found_dir" != "X"; then
break
fi
done
fi
if test "X$found_dir" != "X"; then
dnl Found the library.
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
if test "X$found_so" != "X"; then
dnl Linking with a shared library. We attempt to hardcode its
dnl directory into the executable's runpath, unless it's the
dnl standard /usr/lib.
if test "$enable_rpath" = no \
|| test "X$found_dir" = "X/usr/$acl_libdirstem" \
|| test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
dnl No hardcoding is needed.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
dnl Potentially add DIR to ltrpathdirs.
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
haveit=
for x in $ltrpathdirs; do
if test "X$x" = "X$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $found_dir"
fi
dnl The hardcoding into $LIBNAME is system dependent.
if test "$acl_hardcode_direct" = yes; then
dnl Using DIR/libNAME.so during linking hardcodes DIR into the
dnl resulting binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
dnl Use an explicit option to hardcode DIR into the resulting
dnl binary.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
dnl Potentially add DIR to rpathdirs.
dnl The rpathdirs will be appended to $LIBNAME at the end.
haveit=
for x in $rpathdirs; do
if test "X$x" = "X$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
rpathdirs="$rpathdirs $found_dir"
fi
else
dnl Rely on "-L$found_dir".
dnl But don't add it if it's already contained in the LDFLAGS
dnl or the already constructed $LIBNAME
haveit=
for x in $LDFLAGS $LIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$found_dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
fi
if test "$acl_hardcode_minus_L" != no; then
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
else
dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
dnl here, because this doesn't fit in flags passed to the
dnl compiler. So give up. No hardcoding. This affects only
dnl very old systems.
dnl FIXME: Not sure whether we should use
dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
dnl here.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
fi
fi
fi
fi
else
if test "X$found_a" != "X"; then
dnl Linking with a static library.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
else
dnl We shouldn't come here, but anyway it's good to have a
dnl fallback.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
fi
fi
dnl Assume the include files are nearby.
additional_includedir=
case "$found_dir" in
*/$acl_libdirstem | */$acl_libdirstem/)
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
if test "$name" = '$1'; then
LIB[]NAME[]_PREFIX="$basedir"
fi
additional_includedir="$basedir/include"
;;
*/$acl_libdirstem2 | */$acl_libdirstem2/)
basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
if test "$name" = '$1'; then
LIB[]NAME[]_PREFIX="$basedir"
fi
additional_includedir="$basedir/include"
;;
esac
if test "X$additional_includedir" != "X"; then
dnl Potentially add $additional_includedir to $INCNAME.
dnl But don't add it
dnl 1. if it's the standard /usr/include,
dnl 2. if it's /usr/local/include and we are using GCC on Linux,
dnl 3. if it's already present in $CPPFLAGS or the already
dnl constructed $INCNAME,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_includedir" != "X/usr/include"; then
haveit=
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
for x in $CPPFLAGS $INC[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-I$additional_includedir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_includedir"; then
dnl Really add $additional_includedir to $INCNAME.
INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
fi
fi
fi
fi
fi
dnl Look for dependencies.
if test -n "$found_la"; then
dnl Read the .la file. It defines the variables
dnl dlname, library_names, old_library, dependency_libs, current,
dnl age, revision, installed, dlopen, dlpreopen, libdir.
save_libdir="$libdir"
case "$found_la" in
*/* | *\\*) . "$found_la" ;;
*) . "./$found_la" ;;
esac
libdir="$save_libdir"
dnl We use only dependency_libs.
for dep in $dependency_libs; do
case "$dep" in
-L*)
additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
dnl But don't add it
dnl 1. if it's the standard /usr/lib,
dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
dnl 3. if it's already present in $LDFLAGS or the already
dnl constructed $LIBNAME,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
&& test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
haveit=
if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
|| test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
haveit=
for x in $LDFLAGS $LIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LIBNAME.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
fi
fi
haveit=
for x in $LDFLAGS $LTLIB[]NAME; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LTLIBNAME.
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
fi
fi
fi
fi
;;
-R*)
dir=`echo "X$dep" | sed -e 's/^X-R//'`
if test "$enable_rpath" != no; then
dnl Potentially add DIR to rpathdirs.
dnl The rpathdirs will be appended to $LIBNAME at the end.
haveit=
for x in $rpathdirs; do
if test "X$x" = "X$dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
rpathdirs="$rpathdirs $dir"
fi
dnl Potentially add DIR to ltrpathdirs.
dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
haveit=
for x in $ltrpathdirs; do
if test "X$x" = "X$dir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
ltrpathdirs="$ltrpathdirs $dir"
fi
fi
;;
-l*)
dnl Handle this in the next round.
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
;;
*.la)
dnl Handle this in the next round. Throw away the .la's
dnl directory; it is already contained in a preceding -L
dnl option.
names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
;;
*)
dnl Most likely an immediate library name.
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
;;
esac
done
fi
else
dnl Didn't find the library; assume it is in the system directories
dnl known to the linker and runtime loader. (All the system
dnl directories known to the linker should also be known to the
dnl runtime loader, otherwise the system is severely misconfigured.)
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
fi
fi
fi
done
done
if test "X$rpathdirs" != "X"; then
if test -n "$acl_hardcode_libdir_separator"; then
dnl Weird platform: only the last -rpath option counts, the user must
dnl pass all path elements in one option. We can arrange that for a
dnl single library, but not when more than one $LIBNAMEs are used.
alldirs=
for found_dir in $rpathdirs; do
alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
done
dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
acl_save_libdir="$libdir"
libdir="$alldirs"
eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
else
dnl The -rpath options are cumulative.
for found_dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$found_dir"
eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
done
fi
fi
if test "X$ltrpathdirs" != "X"; then
dnl When using libtool, the option that works for both libraries and
dnl executables is -R. The -R options are cumulative.
for found_dir in $ltrpathdirs; do
LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
done
fi
popdef([P_A_C_K])
popdef([PACKLIBS])
popdef([PACKUP])
popdef([PACK])
popdef([NAME])
])
dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
dnl unless already present in VAR.
dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
dnl contains two or three consecutive elements that belong together.
AC_DEFUN([AC_LIB_APPENDTOVAR],
[
for element in [$2]; do
haveit=
for x in $[$1]; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X$element"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
[$1]="${[$1]}${[$1]:+ }$element"
fi
done
])
dnl For those cases where a variable contains several -L and -l options
dnl referring to unknown libraries and directories, this macro determines the
dnl necessary additional linker options for the runtime path.
dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
dnl otherwise linking without libtool is assumed.
AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
[
AC_REQUIRE([AC_LIB_RPATH])
AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
$1=
if test "$enable_rpath" != no; then
if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
dnl Use an explicit option to hardcode directories into the resulting
dnl binary.
rpathdirs=
next=
for opt in $2; do
if test -n "$next"; then
dir="$next"
dnl No need to hardcode the standard /usr/lib.
if test "X$dir" != "X/usr/$acl_libdirstem" \
&& test "X$dir" != "X/usr/$acl_libdirstem2"; then
rpathdirs="$rpathdirs $dir"
fi
next=
else
case $opt in
-L) next=yes ;;
-L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
dnl No need to hardcode the standard /usr/lib.
if test "X$dir" != "X/usr/$acl_libdirstem" \
&& test "X$dir" != "X/usr/$acl_libdirstem2"; then
rpathdirs="$rpathdirs $dir"
fi
next= ;;
*) next= ;;
esac
fi
done
if test "X$rpathdirs" != "X"; then
if test -n ""$3""; then
dnl libtool is used for linking. Use -R options.
for dir in $rpathdirs; do
$1="${$1}${$1:+ }-R$dir"
done
else
dnl The linker is used for linking directly.
if test -n "$acl_hardcode_libdir_separator"; then
dnl Weird platform: only the last -rpath option counts, the user
dnl must pass all path elements in one option.
alldirs=
for dir in $rpathdirs; do
alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
done
acl_save_libdir="$libdir"
libdir="$alldirs"
eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
$1="$flag"
else
dnl The -rpath options are cumulative.
for dir in $rpathdirs; do
acl_save_libdir="$libdir"
libdir="$dir"
eval flag=\"$acl_hardcode_libdir_flag_spec\"
libdir="$acl_save_libdir"
$1="${$1}${$1:+ }$flag"
done
fi
fi
fi
fi
fi
AC_SUBST([$1])
])

View file

@ -1,224 +0,0 @@
# lib-prefix.m4 serial 7 (gettext-0.18)
dnl Copyright (C) 2001-2005, 2008-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
dnl require excessive bracketing.
ifdef([AC_HELP_STRING],
[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
dnl to access previously installed libraries. The basic assumption is that
dnl a user will want packages to use other packages he previously installed
dnl with the same --prefix option.
dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
dnl libraries, but is otherwise very convenient.
AC_DEFUN([AC_LIB_PREFIX],
[
AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
dnl By default, look in $includedir and $libdir.
use_additional=yes
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
AC_LIB_ARG_WITH([lib-prefix],
[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
--without-lib-prefix don't search for libraries in includedir and libdir],
[
if test "X$withval" = "Xno"; then
use_additional=no
else
if test "X$withval" = "X"; then
AC_LIB_WITH_FINAL_PREFIX([
eval additional_includedir=\"$includedir\"
eval additional_libdir=\"$libdir\"
])
else
additional_includedir="$withval/include"
additional_libdir="$withval/$acl_libdirstem"
fi
fi
])
if test $use_additional = yes; then
dnl Potentially add $additional_includedir to $CPPFLAGS.
dnl But don't add it
dnl 1. if it's the standard /usr/include,
dnl 2. if it's already present in $CPPFLAGS,
dnl 3. if it's /usr/local/include and we are using GCC on Linux,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_includedir" != "X/usr/include"; then
haveit=
for x in $CPPFLAGS; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-I$additional_includedir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test "X$additional_includedir" = "X/usr/local/include"; then
if test -n "$GCC"; then
case $host_os in
linux* | gnu* | k*bsd*-gnu) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
if test -d "$additional_includedir"; then
dnl Really add $additional_includedir to $CPPFLAGS.
CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
fi
fi
fi
fi
dnl Potentially add $additional_libdir to $LDFLAGS.
dnl But don't add it
dnl 1. if it's the standard /usr/lib,
dnl 2. if it's already present in $LDFLAGS,
dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
dnl 4. if it doesn't exist as a directory.
if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
haveit=
for x in $LDFLAGS; do
AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
if test "X$x" = "X-L$additional_libdir"; then
haveit=yes
break
fi
done
if test -z "$haveit"; then
if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
if test -n "$GCC"; then
case $host_os in
linux*) haveit=yes;;
esac
fi
fi
if test -z "$haveit"; then
if test -d "$additional_libdir"; then
dnl Really add $additional_libdir to $LDFLAGS.
LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
fi
fi
fi
fi
fi
])
dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
dnl acl_final_exec_prefix, containing the values to which $prefix and
dnl $exec_prefix will expand at the end of the configure script.
AC_DEFUN([AC_LIB_PREPARE_PREFIX],
[
dnl Unfortunately, prefix and exec_prefix get only finally determined
dnl at the end of configure.
if test "X$prefix" = "XNONE"; then
acl_final_prefix="$ac_default_prefix"
else
acl_final_prefix="$prefix"
fi
if test "X$exec_prefix" = "XNONE"; then
acl_final_exec_prefix='${prefix}'
else
acl_final_exec_prefix="$exec_prefix"
fi
acl_save_prefix="$prefix"
prefix="$acl_final_prefix"
eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
prefix="$acl_save_prefix"
])
dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
dnl variables prefix and exec_prefix bound to the values they will have
dnl at the end of the configure script.
AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
[
acl_save_prefix="$prefix"
prefix="$acl_final_prefix"
acl_save_exec_prefix="$exec_prefix"
exec_prefix="$acl_final_exec_prefix"
$1
exec_prefix="$acl_save_exec_prefix"
prefix="$acl_save_prefix"
])
dnl AC_LIB_PREPARE_MULTILIB creates
dnl - a variable acl_libdirstem, containing the basename of the libdir, either
dnl "lib" or "lib64" or "lib/64",
dnl - a variable acl_libdirstem2, as a secondary possible value for
dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
dnl "lib/amd64".
AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
[
dnl There is no formal standard regarding lib and lib64.
dnl On glibc systems, the current practice is that on a system supporting
dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
dnl the compiler's default mode by looking at the compiler's library search
dnl path. If at least one of its elements ends in /lib64 or points to a
dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
dnl Otherwise we use the default, namely "lib".
dnl On Solaris systems, the current practice is that on a system supporting
dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
AC_REQUIRE([AC_CANONICAL_HOST])
acl_libdirstem=lib
acl_libdirstem2=
case "$host_os" in
solaris*)
dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
dnl symlink is missing, so we set acl_libdirstem2 too.
AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
[AC_EGREP_CPP([sixtyfour bits], [
#ifdef _LP64
sixtyfour bits
#endif
], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
])
if test $gl_cv_solaris_64bit = yes; then
acl_libdirstem=lib/64
case "$host_cpu" in
sparc*) acl_libdirstem2=lib/sparcv9 ;;
i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
esac
fi
;;
*)
searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
if test -n "$searchpath"; then
acl_save_IFS="${IFS= }"; IFS=":"
for searchdir in $searchpath; do
if test -d "$searchdir"; then
case "$searchdir" in
*/lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
*/../ | */.. )
# Better ignore directories of this form. They are misleading.
;;
*) searchdir=`cd "$searchdir" && pwd`
case "$searchdir" in
*/lib64 ) acl_libdirstem=lib64 ;;
esac ;;
esac
fi
done
IFS="$acl_save_IFS"
fi
;;
esac
test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
])

File diff suppressed because it is too large Load diff

View file

@ -1,115 +0,0 @@
# ============================================================================
# https://www.gnu.org/software/autoconf-archive/ax_compile_check_sizeof.html
# ============================================================================
#
# SYNOPSIS
#
# AX_COMPILE_CHECK_SIZEOF(TYPE [, HEADERS [, EXTRA_SIZES...]])
#
# DESCRIPTION
#
# This macro checks for the size of TYPE using compile checks, not run
# checks. You can supply extra HEADERS to look into. the check will cycle
# through 1 2 4 8 16 and any EXTRA_SIZES the user supplies. If a match is
# found, it will #define SIZEOF_`TYPE' to that value. Otherwise it will
# emit a configure time error indicating the size of the type could not be
# determined.
#
# The trick is that C will not allow duplicate case labels. While this is
# valid C code:
#
# switch (0) case 0: case 1:;
#
# The following is not:
#
# switch (0) case 0: case 0:;
#
# Thus, the AC_COMPILE_IFELSE will fail if the currently tried size does
# not match.
#
# Here is an example skeleton configure.in script, demonstrating the
# macro's usage:
#
# AC_PROG_CC
# AC_CHECK_HEADERS(stddef.h unistd.h)
# AC_TYPE_SIZE_T
# AC_CHECK_TYPE(ssize_t, int)
#
# headers='#ifdef HAVE_STDDEF_H
# #include <stddef.h>
# #endif
# #ifdef HAVE_UNISTD_H
# #include <unistd.h>
# #endif
# '
#
# AX_COMPILE_CHECK_SIZEOF(char)
# AX_COMPILE_CHECK_SIZEOF(short)
# AX_COMPILE_CHECK_SIZEOF(int)
# AX_COMPILE_CHECK_SIZEOF(long)
# AX_COMPILE_CHECK_SIZEOF(unsigned char *)
# AX_COMPILE_CHECK_SIZEOF(void *)
# AX_COMPILE_CHECK_SIZEOF(size_t, $headers)
# AX_COMPILE_CHECK_SIZEOF(ssize_t, $headers)
# AX_COMPILE_CHECK_SIZEOF(ptrdiff_t, $headers)
# AX_COMPILE_CHECK_SIZEOF(off_t, $headers)
#
# LICENSE
#
# Copyright (c) 2008 Kaveh Ghazi <ghazi@caip.rutgers.edu>
# Copyright (c) 2017 Reini Urban <rurban@cpan.org>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <https://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 8
AU_ALIAS([AC_COMPILE_CHECK_SIZEOF], [AX_COMPILE_CHECK_SIZEOF])
AC_DEFUN([AX_COMPILE_CHECK_SIZEOF],
[changequote(<<, >>)dnl
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
dnl The cache variable name.
define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
changequote([, ])dnl
AC_MSG_CHECKING(size of $1)
AC_CACHE_VAL(AC_CV_NAME,
[for ac_size in 4 8 1 2 16 $3 ; do # List sizes in rough order of prevalence.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
$2
]], [[switch (0) case 0: case (sizeof ($1) == $ac_size):;]])], [AC_CV_NAME=$ac_size])
if test x$AC_CV_NAME != x ; then break; fi
done
])
if test x$AC_CV_NAME = x ; then
AC_MSG_ERROR([cannot determine a size for $1])
fi
AC_MSG_RESULT($AC_CV_NAME)
AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1])
undefine([AC_TYPE_NAME])dnl
undefine([AC_CV_NAME])dnl
])

View file

@ -1,215 +0,0 @@
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 1996-2021 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
echo 1>&2 "Try '$0 --help' for more information"
exit 1
fi
case $1 in
--is-lightweight)
# Used by our autoconf macros to check whether the available missing
# script is modern enough.
exit 0
;;
--run)
# Back-compat with the calling convention used by older automake.
shift
;;
-h|--h|--he|--hel|--help)
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
to PROGRAM being missing or too old.
Options:
-h, --help display this help and exit
-v, --version output version information and exit
Supported PROGRAM values:
aclocal autoconf autoheader autom4te automake makeinfo
bison yacc flex lex help2man
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
'g' are ignored when checking the name.
Send bug reports to <bug-automake@gnu.org>."
exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
exit $?
;;
-*)
echo 1>&2 "$0: unknown '$1' option"
echo 1>&2 "Try '$0 --help' for more information"
exit 1
;;
esac
# Run the given program, remember its exit status.
"$@"; st=$?
# If it succeeded, we are done.
test $st -eq 0 && exit 0
# Also exit now if we it failed (or wasn't found), and '--version' was
# passed; such an option is passed most likely to detect whether the
# program is present and works.
case $2 in --version|--help) exit $st;; esac
# Exit code 63 means version mismatch. This often happens when the user
# tries to use an ancient version of a tool on a file that requires a
# minimum version.
if test $st -eq 63; then
msg="probably too old"
elif test $st -eq 127; then
# Program was missing.
msg="missing on your system"
else
# Program was found and executed, but failed. Give up.
exit $st
fi
perl_URL=https://www.perl.org/
flex_URL=https://github.com/westes/flex
gnu_software_URL=https://www.gnu.org/software
program_details ()
{
case $1 in
aclocal|automake)
echo "The '$1' program is part of the GNU Automake package:"
echo "<$gnu_software_URL/automake>"
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
echo "<$gnu_software_URL/autoconf>"
echo "<$gnu_software_URL/m4/>"
echo "<$perl_URL>"
;;
autoconf|autom4te|autoheader)
echo "The '$1' program is part of the GNU Autoconf package:"
echo "<$gnu_software_URL/autoconf/>"
echo "It also requires GNU m4 and Perl in order to run:"
echo "<$gnu_software_URL/m4/>"
echo "<$perl_URL>"
;;
esac
}
give_advice ()
{
# Normalize program name to check for.
normalized_program=`echo "$1" | sed '
s/^gnu-//; t
s/^gnu//; t
s/^g//; t'`
printf '%s\n' "'$1' is $msg."
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
case $normalized_program in
autoconf*)
echo "You should only need it if you modified 'configure.ac',"
echo "or m4 files included by it."
program_details 'autoconf'
;;
autoheader*)
echo "You should only need it if you modified 'acconfig.h' or"
echo "$configure_deps."
program_details 'autoheader'
;;
automake*)
echo "You should only need it if you modified 'Makefile.am' or"
echo "$configure_deps."
program_details 'automake'
;;
aclocal*)
echo "You should only need it if you modified 'acinclude.m4' or"
echo "$configure_deps."
program_details 'aclocal'
;;
autom4te*)
echo "You might have modified some maintainer files that require"
echo "the 'autom4te' program to be rebuilt."
program_details 'autom4te'
;;
bison*|yacc*)
echo "You should only need it if you modified a '.y' file."
echo "You may want to install the GNU Bison package:"
echo "<$gnu_software_URL/bison/>"
;;
lex*|flex*)
echo "You should only need it if you modified a '.l' file."
echo "You may want to install the Fast Lexical Analyzer package:"
echo "<$flex_URL>"
;;
help2man*)
echo "You should only need it if you modified a dependency" \
"of a man page."
echo "You may want to install the GNU Help2man package:"
echo "<$gnu_software_URL/help2man/>"
;;
makeinfo*)
echo "You should only need it if you modified a '.texi' file, or"
echo "any other file indirectly affecting the aspect of the manual."
echo "You might want to install the Texinfo package:"
echo "<$gnu_software_URL/texinfo/>"
echo "The spurious makeinfo call might also be the consequence of"
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
echo "want to install GNU make:"
echo "<$gnu_software_URL/make/>"
;;
*)
echo "You might have modified some files without having the proper"
echo "tools for further handling them. Check the 'README' file, it"
echo "often tells you about the needed prerequisites for installing"
echo "this package. You may also peek at any GNU archive site, in"
echo "case some other package contains this missing '$1' program."
;;
esac
}
give_advice "$1" | sed -e '1s/^/WARNING: /' \
-e '2,$s/^/ /' >&2
# Propagate the correct exit status (expected to be 127 for a program
# not found, 63 for a program that failed due to version mismatch).
exit $st
# Local variables:
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

View file

@ -1,153 +0,0 @@
#! /bin/sh
# test-driver - basic testsuite driver script.
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 2011-2021 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
# Make unconditional expansion of undefined variables an error. This
# helps a lot in preventing typo-related bugs.
set -u
usage_error ()
{
echo "$0: $*" >&2
print_usage >&2
exit 2
}
print_usage ()
{
cat <<END
Usage:
test-driver --test-name NAME --log-file PATH --trs-file PATH
[--expect-failure {yes|no}] [--color-tests {yes|no}]
[--enable-hard-errors {yes|no}] [--]
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
See the GNU Automake documentation for information.
END
}
test_name= # Used for reporting.
log_file= # Where to save the output of the test script.
trs_file= # Where to save the metadata of the test run.
expect_failure=no
color_tests=no
enable_hard_errors=yes
while test $# -gt 0; do
case $1 in
--help) print_usage; exit $?;;
--version) echo "test-driver $scriptversion"; exit $?;;
--test-name) test_name=$2; shift;;
--log-file) log_file=$2; shift;;
--trs-file) trs_file=$2; shift;;
--color-tests) color_tests=$2; shift;;
--expect-failure) expect_failure=$2; shift;;
--enable-hard-errors) enable_hard_errors=$2; shift;;
--) shift; break;;
-*) usage_error "invalid option: '$1'";;
*) break;;
esac
shift
done
missing_opts=
test x"$test_name" = x && missing_opts="$missing_opts --test-name"
test x"$log_file" = x && missing_opts="$missing_opts --log-file"
test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
if test x"$missing_opts" != x; then
usage_error "the following mandatory options are missing:$missing_opts"
fi
if test $# -eq 0; then
usage_error "missing argument"
fi
if test $color_tests = yes; then
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
red='' # Red.
grn='' # Green.
lgn='' # Light green.
blu='' # Blue.
mgn='' # Magenta.
std='' # No color.
else
red= grn= lgn= blu= mgn= std=
fi
do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
trap "st=129; $do_exit" 1
trap "st=130; $do_exit" 2
trap "st=141; $do_exit" 13
trap "st=143; $do_exit" 15
# Test script is run here. We create the file first, then append to it,
# to ameliorate tests themselves also writing to the log file. Our tests
# don't, but others can (automake bug#35762).
: >"$log_file"
"$@" >>"$log_file" 2>&1
estatus=$?
if test $enable_hard_errors = no && test $estatus -eq 99; then
tweaked_estatus=1
else
tweaked_estatus=$estatus
fi
case $tweaked_estatus:$expect_failure in
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
0:*) col=$grn res=PASS recheck=no gcopy=no;;
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
esac
# Report the test outcome and exit status in the logs, so that one can
# know whether the test passed or failed simply by looking at the '.log'
# file, without the need of also peaking into the corresponding '.trs'
# file (automake bug#11814).
echo "$res $test_name (exit status: $estatus)" >>"$log_file"
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
# Register the test result, and other relevant metadata.
echo ":test-result: $res" > $trs_file
echo ":global-test-result: $res" >> $trs_file
echo ":recheck: $recheck" >> $trs_file
echo ":copy-in-global-log: $gcopy" >> $trs_file
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

View file

@ -1,68 +0,0 @@
#!/bin/sh
PATH=/usr/local/gnu-autotools/bin/:$PATH
export PATH
# Start from one level above the build directory
if [ -f version ]; then
cd ..
fi
if [ \! -f build/version ]; then
echo "Can't find source directory"
exit 1
fi
# BSD make's "OBJDIR" support freaks out the automake-generated
# Makefile. Effectively disable it.
export MAKEOBJDIRPREFIX=/junk
# Start from the build directory, where the version file is located
if [ -f build/version ]; then
cd build
fi
if [ \! -f version ]; then
echo "Can't find version file"
exit 1
fi
# Update the build number in the 'version' file.
# Separate number from additional alpha/beta/etc marker
MARKER=`cat version | sed 's/[0-9.]//g'`
# Bump the number
VN=`cat version | sed 's/[^0-9.]//g'`
# Build out the string.
VS="$(($VN/1000000)).$(( ($VN/1000)%1000 )).$(( $VN%1000 ))$MARKER"
cd ..
# Clean up the source dir as much as we can.
/bin/sh build/clean.sh
# Substitute the versions into Libarchive's archive.h and archive_entry.h
perl -p -i -e "s/^(#define\tARCHIVE_VERSION_NUMBER).*/\$1 $VN/" libarchive/archive.h
perl -p -i -e "s/^(#define\tARCHIVE_VERSION_NUMBER).*/\$1 $VN/" libarchive/archive_entry.h
perl -p -i -e "s/^(#define\tARCHIVE_VERSION_ONLY_STRING).*/\$1 \"$VS\"/" libarchive/archive.h
# Substitute versions into configure.ac as well
perl -p -i -e 's/(m4_define\(\[LIBARCHIVE_VERSION_S\]),.*\)/$1,['"$VS"'])/' configure.ac
perl -p -i -e 's/(m4_define\(\[LIBARCHIVE_VERSION_N\]),.*\)/$1,['"$VN"'])/' configure.ac
# Remove developer CFLAGS if a release build is being made
if [ -n "${MAKE_LIBARCHIVE_RELEASE}" ]; then
perl -p -i -e "s/^(DEV_CFLAGS.*)/# \$1/" Makefile.am
perl -p -i -e 's/CMAKE_BUILD_TYPE "[A-Za-z]*"/CMAKE_BUILD_TYPE "Release"/' CMakeLists.txt
fi
set -xe
aclocal -I build/autoconf
# Note: --automake flag needed only for libtoolize from
# libtool 1.5.x; in libtool 2.2.x it is a synonym for --quiet
case `uname` in
Darwin) glibtoolize --automake -c;;
*) libtoolize --automake -c;;
esac
autoconf
autoheader
automake -a -c

View file

@ -1,36 +0,0 @@
#!/bin/sh +v
# Start from the build directory, where the version file is located
if [ -f build/version ]; then
cd build
fi
if [ \! -f version ]; then
echo "Can't find version file"
exit 1
fi
# Update the build number in the 'version' file.
# Separate number from additional alpha/beta/etc marker
MARKER=`cat version | sed 's/[0-9.]//g'`
# Bump the number
VN=`cat version | sed 's/[^0-9.]//g'`
# Reassemble and write back out
VN=$(($VN + 1))
rm -f version.old
mv version version.old
chmod +w version.old
echo $VN$MARKER > version
VS="$(($VN/1000000)).$(( ($VN/1000)%1000 )).$(( $VN%1000 ))$MARKER"
cd ..
ANNOUNCE=`date +"%b %d, %Y:"`" libarchive $VS released"
echo $ANNOUNCE
# Add a version notice to NEWS
mv NEWS NEWS.bak
chmod +w NEWS.bak
echo $ANNOUNCE >> NEWS
echo >> NEWS
cat NEWS.bak >> NEWS

View file

@ -1,99 +0,0 @@
#!/bin/sh
#
# Attempt to remove as many generated files as we can.
# Ideally, a well-used development sandbox would look like
# a pristine checkout after running this script.
#
if [ \! -f build/version ]; then
echo 'Must run the clean script from the top-level dir of the libarchive distribution' 1>&2
exit 1
fi
# If we're on BSD, blow away the build dir under /usr/obj
rm -rf /usr/obj`pwd`
#
# Try to clean up a bit more...
#
find . -name '*.So' | xargs rm -f
find . -name '*.a' | xargs rm -f
find . -name '*.la' | xargs rm -f
find . -name '*.lo' | xargs rm -f
find . -name '*.o' | xargs rm -f
find . -name '*.orig' | xargs rm -f
find . -name '*.po' | xargs rm -f
find . -name '*.rej' | xargs rm -f
find . -name '*~' | xargs rm -f
find . -name '.depend' | xargs rm -f
find . -name '.deps' | xargs rm -rf
find . -name '.dirstamp' | xargs rm -f
find . -name '.libs' | xargs rm -rf
find . -name 'CMakeFiles' | xargs rm -rf
find . -name 'cmake_install.cmake' | xargs rm -f
find . -name 'CTestTestfile.cmake' | xargs rm -f
rm -rf Testing
rm -rf autom4te.cache
rm -rf bin
rm -rf cmake.tmp
rm -rf libarchive/Testing
rm -f CMakeCache.txt
rm -f DartConfiguration.tcl
rm -f Makefile
rm -f Makefile.in
rm -f aclocal.m4
rm -f bsdcpio
rm -f bsdcpio_test
rm -f bsdtar
rm -f bsdtar_test
rm -f build/autoconf/compile
rm -f build/autoconf/config.guess
rm -f build/autoconf/config.sub
rm -f build/autoconf/depcomp
rm -f build/autoconf/install-sh
rm -f build/autoconf/libtool.m4
rm -f build/autoconf/ltmain.sh
rm -f build/autoconf/ltoptions.m4
rm -f build/autoconf/ltsugar.m4
rm -f build/autoconf/ltversion.m4
rm -f build/autoconf/lt~obsolete.m4
rm -f build/autoconf/missing
rm -f build/autoconf/test-driver
rm -f build/pkgconfig/libarchive.pc
rm -f build/version.old
rm -f cat/test/list.h
rm -f config.h
rm -f config.h.in
rm -f config.log
rm -f config.status
rm -f configure
rm -f cpio/*.1.gz
rm -f cpio/Makefile
rm -f cpio/bsdcpio
rm -f cpio/test/Makefile
rm -f cpio/test/bsdcpio_test
rm -f cpio/test/list.h
rm -f doc/html/*
rm -f doc/man/*
rm -f doc/pdf/*
rm -f doc/text/*
rm -f doc/wiki/*
rm -f libarchive/*.[35].gz
rm -f libarchive/Makefile
rm -f libarchive/libarchive.so*
rm -f libarchive/test/Makefile
rm -f libarchive/test/libarchive_test
rm -f libarchive/test/list.h
rm -f libarchive_test
rm -f libtool
rm -f stamp-h1
rm -f tar/*.1.gz
rm -f tar/Makefile
rm -f tar/bsdtar
rm -f tar/test/Makefile
rm -f tar/test/bsdtar_test
rm -f tar/test/list.h

View file

@ -1,14 +0,0 @@
#include <sys/types.h>
#define KB ((off_t)1024)
#define MB ((off_t)1024 * KB)
#define GB ((off_t)1024 * MB)
#define TB ((off_t)1024 * GB)
int t2[(((64 * GB -1) % 671088649) == 268434537)
&& (((TB - (64 * GB -1) + 255) % 1792151290) == 305159546)? 1: -1];
int main()
{
;
return 0;
}

View file

@ -1,44 +0,0 @@
# - Check if _FILE_OFFSET_BITS macro needed for large files
# CHECK_FILE_OFFSET_BITS ()
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# Copyright (c) 2009, Michihiro NAKAJIMA
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#INCLUDE(CheckCXXSourceCompiles)
GET_FILENAME_COMPONENT(_selfdir_CheckFileOffsetBits
"${CMAKE_CURRENT_LIST_FILE}" PATH)
MACRO (CHECK_FILE_OFFSET_BITS)
IF(NOT DEFINED _FILE_OFFSET_BITS)
MESSAGE(STATUS "Checking _FILE_OFFSET_BITS for large files")
TRY_COMPILE(__WITHOUT_FILE_OFFSET_BITS_64
${CMAKE_CURRENT_BINARY_DIR}
${_selfdir_CheckFileOffsetBits}/CheckFileOffsetBits.c
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
IF(NOT __WITHOUT_FILE_OFFSET_BITS_64)
TRY_COMPILE(__WITH_FILE_OFFSET_BITS_64
${CMAKE_CURRENT_BINARY_DIR}
${_selfdir_CheckFileOffsetBits}/CheckFileOffsetBits.c
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_FILE_OFFSET_BITS=64)
ENDIF(NOT __WITHOUT_FILE_OFFSET_BITS_64)
IF(NOT __WITHOUT_FILE_OFFSET_BITS_64 AND __WITH_FILE_OFFSET_BITS_64)
SET(_FILE_OFFSET_BITS 64 CACHE INTERNAL "_FILE_OFFSET_BITS macro needed for large files")
MESSAGE(STATUS "Checking _FILE_OFFSET_BITS for large files - needed")
ELSE(NOT __WITHOUT_FILE_OFFSET_BITS_64 AND __WITH_FILE_OFFSET_BITS_64)
SET(_FILE_OFFSET_BITS "" CACHE INTERNAL "_FILE_OFFSET_BITS macro needed for large files")
MESSAGE(STATUS "Checking _FILE_OFFSET_BITS for large files - not needed")
ENDIF(NOT __WITHOUT_FILE_OFFSET_BITS_64 AND __WITH_FILE_OFFSET_BITS_64)
ENDIF(NOT DEFINED _FILE_OFFSET_BITS)
ENDMACRO (CHECK_FILE_OFFSET_BITS)

View file

@ -1,49 +0,0 @@
# Check if the system has the specified function; treat glibc "stub"
# functions as nonexistent:
# CHECK_FUNCTION_EXISTS_GLIBC (FUNCTION FUNCVAR)
#
# FUNCTION - the function(s) where the prototype should be declared
# FUNCVAR - variable to define if the function does exist
#
# In particular, this understands the glibc convention of
# defining macros __stub_XXXX or __stub___XXXX if the function
# does appear in the library but is merely a stub that does nothing.
# By detecting this case, we can select alternate behavior on
# platforms that don't support this functionality.
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# Copyright (c) 2009, Michihiro NAKAJIMA
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
INCLUDE(CheckFunctionExists)
GET_FILENAME_COMPONENT(_selfdir_CheckFunctionExistsGlibc
"${CMAKE_CURRENT_LIST_FILE}" PATH)
MACRO (CHECK_FUNCTION_EXISTS_GLIBC _FUNC _FUNCVAR)
IF(NOT DEFINED ${_FUNCVAR})
SET(CHECK_STUB_FUNC_1 "__stub_${_FUNC}")
SET(CHECK_STUB_FUNC_2 "__stub___${_FUNC}")
CONFIGURE_FILE( ${_selfdir_CheckFunctionExistsGlibc}/CheckFuncs_stub.c.in
${CMAKE_CURRENT_BINARY_DIR}/cmake.tmp/CheckFuncs_stub.c IMMEDIATE)
TRY_COMPILE(__stub
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_BINARY_DIR}/cmake.tmp/CheckFuncs_stub.c
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS}
"${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}")
IF (__stub)
SET("${_FUNCVAR}" "" CACHE INTERNAL "Have function ${_FUNC}")
ELSE (__stub)
CHECK_FUNCTION_EXISTS("${_FUNC}" "${_FUNCVAR}")
ENDIF (__stub)
ENDIF(NOT DEFINED ${_FUNCVAR})
ENDMACRO (CHECK_FUNCTION_EXISTS_GLIBC)

View file

@ -1,16 +0,0 @@
#ifdef __STDC__
#include <limits.h>
#else
#include <assert.h>
#endif
int
main()
{
#if defined ${CHECK_STUB_FUNC_1} || defined ${CHECK_STUB_FUNC_2}
return 0;
#else
this system have stub
return 0;
#endif
}

View file

@ -1,32 +0,0 @@
# - Check if the system has the specified type
# CHECK_HEADER_DIRENT (HEADER1 HEARDER2 ...)
#
# HEADER - the header(s) where the prototype should be declared
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# Copyright (c) 2009, Michihiro NAKAJIMA
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
INCLUDE(CheckTypeExists)
MACRO (CHECK_HEADER_DIRENT)
CHECK_TYPE_EXISTS("DIR *" dirent.h HAVE_DIRENT_H)
IF(NOT HAVE_DIRENT_H)
CHECK_TYPE_EXISTS("DIR *" sys/ndir.h HAVE_SYS_NDIR_H)
IF(NOT HAVE_SYS_NDIR_H)
CHECK_TYPE_EXISTS("DIR *" ndir.h HAVE_NDIR_H)
IF(NOT HAVE_NDIR_H)
CHECK_TYPE_EXISTS("DIR *" sys/dir.h HAVE_SYS_DIR_H)
ENDIF(NOT HAVE_NDIR_H)
ENDIF(NOT HAVE_SYS_NDIR_H)
ENDIF(NOT HAVE_DIRENT_H)
ENDMACRO (CHECK_HEADER_DIRENT)

View file

@ -1,42 +0,0 @@
# - Check if the system has the specified type
# CHECK_TYPE_EXISTS (TYPE HEADER VARIABLE)
#
# TYPE - the name of the type or struct or class you are interested in
# HEADER - the header(s) where the prototype should be declared
# VARIABLE - variable to store the result
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# Copyright (c) 2009, Michihiro NAKAJIMA
# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
INCLUDE(CheckCSourceCompiles)
MACRO (CHECK_TYPE_EXISTS _TYPE _HEADER _RESULT)
SET(_INCLUDE_FILES)
FOREACH (it ${_HEADER})
SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n")
ENDFOREACH (it)
SET(_CHECK_TYPE_EXISTS_SOURCE_CODE "
${_INCLUDE_FILES}
int main()
{
static ${_TYPE} tmp;
if (sizeof(tmp))
return 0;
return 0;
}
")
CHECK_C_SOURCE_COMPILES("${_CHECK_TYPE_EXISTS_SOURCE_CODE}" ${_RESULT})
ENDMACRO (CHECK_TYPE_EXISTS)

View file

@ -1,33 +0,0 @@
# - Generate a libarchive.pc like autotools for pkg-config
#
# Set the required variables (we use the same input file as autotools)
SET(prefix ${CMAKE_INSTALL_PREFIX})
SET(exec_prefix \${prefix})
SET(libdir \${exec_prefix}/lib)
SET(includedir \${prefix}/include)
# Now, this is not particularly pretty, nor is it terribly accurate...
# Loop over all our additional libs
FOREACH(mylib ${ADDITIONAL_LIBS})
# Extract the filename from the absolute path
GET_FILENAME_COMPONENT(mylib_name ${mylib} NAME_WE)
# Strip the lib prefix
STRING(REGEX REPLACE "^lib" "" mylib_name ${mylib_name})
# Append it to our LIBS string
SET(LIBS "${LIBS} -l${mylib_name}")
ENDFOREACH()
# libxml2 is easier, since it's already using pkg-config
FOREACH(mylib ${PC_LIBXML_STATIC_LDFLAGS})
SET(LIBS "${LIBS} ${mylib}")
ENDFOREACH()
# FIXME: The order of the libraries doesn't take dependencies into account,
# thus there's a good chance it'll make some binutils versions unhappy...
# This only affects Libs.private (looked up for static builds) though.
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/pkgconfig/libarchive.pc.in
${CMAKE_CURRENT_BINARY_DIR}/build/pkgconfig/libarchive.pc
@ONLY)
# And install it, of course ;).
IF(ENABLE_INSTALL)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/build/pkgconfig/libarchive.pc
DESTINATION "lib/pkgconfig")
ENDIF()

View file

@ -1,22 +0,0 @@
# - Find libgcc
# Find the libgcc library.
#
# LIBGCC_LIBRARIES - List of libraries when using libgcc
# LIBGCC_FOUND - True if libgcc found.
IF (LIBGCC_LIBRARY)
# Already in cache, be silent
SET(LIBGCC_FIND_QUIETLY TRUE)
ENDIF (LIBGCC_LIBRARY)
FIND_LIBRARY(LIBGCC_LIBRARY NAMES gcc libgcc)
# handle the QUIETLY and REQUIRED arguments and set LIBGCC_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBGCC DEFAULT_MSG LIBGCC_LIBRARY)
IF(LIBGCC_FOUND)
SET(LIBGCC_LIBRARIES ${LIBGCC_LIBRARY})
SET(HAVE_LIBGCC 1)
ENDIF(LIBGCC_FOUND)

View file

@ -1,13 +0,0 @@
find_path(MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h)
find_library(MBEDTLS_LIBRARY mbedtls)
find_library(MBEDX509_LIBRARY mbedx509)
find_library(MBEDCRYPTO_LIBRARY mbedcrypto)
set(MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MBEDTLS DEFAULT_MSG
MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY)
mark_as_advanced(MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY)

View file

@ -1,23 +0,0 @@
# - Find Nettle
# Find the Nettle include directory and library
#
# NETTLE_INCLUDE_DIR - where to find <nettle/sha.h>, etc.
# NETTLE_LIBRARIES - List of libraries when using libnettle.
# NETTLE_FOUND - True if libnettle found.
IF (NETTLE_INCLUDE_DIR)
# Already in cache, be silent
SET(NETTLE_FIND_QUIETLY TRUE)
ENDIF (NETTLE_INCLUDE_DIR)
FIND_PATH(NETTLE_INCLUDE_DIR nettle/md5.h nettle/ripemd160.h nettle/sha.h)
FIND_LIBRARY(NETTLE_LIBRARY NAMES nettle libnettle)
# handle the QUIETLY and REQUIRED arguments and set NETTLE_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETTLE DEFAULT_MSG NETTLE_LIBRARY NETTLE_INCLUDE_DIR)
IF(NETTLE_FOUND)
SET(NETTLE_LIBRARIES ${NETTLE_LIBRARY})
ENDIF(NETTLE_FOUND)

View file

@ -1,34 +0,0 @@
# - Find pcreposix
# Find the native PCRE and PCREPOSIX include and libraries
#
# PCRE_INCLUDE_DIR - where to find pcreposix.h, etc.
# PCREPOSIX_LIBRARIES - List of libraries when using libpcreposix.
# PCRE_LIBRARIES - List of libraries when using libpcre.
# PCREPOSIX_FOUND - True if libpcreposix found.
# PCRE_FOUND - True if libpcre found.
IF (PCRE_INCLUDE_DIR)
# Already in cache, be silent
SET(PCRE_FIND_QUIETLY TRUE)
ENDIF (PCRE_INCLUDE_DIR)
FIND_PATH(PCRE_INCLUDE_DIR pcreposix.h)
FIND_LIBRARY(PCREPOSIX_LIBRARY NAMES pcreposix libpcreposix)
FIND_LIBRARY(PCRE_LIBRARY NAMES pcre libpcre)
# handle the QUIETLY and REQUIRED arguments and set PCREPOSIX_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCREPOSIX DEFAULT_MSG PCREPOSIX_LIBRARY PCRE_INCLUDE_DIR)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PCRE DEFAULT_MSG PCRE_LIBRARY)
IF(PCREPOSIX_FOUND)
SET(PCREPOSIX_LIBRARIES ${PCREPOSIX_LIBRARY})
SET(HAVE_LIBPCREPOSIX 1)
SET(HAVE_PCREPOSIX_H 1)
ENDIF(PCREPOSIX_FOUND)
IF(PCRE_FOUND)
SET(PCRE_LIBRARIES ${PCRE_LIBRARY})
SET(HAVE_LIBPCRE 1)
ENDIF(PCRE_FOUND)

View file

@ -1,68 +0,0 @@
#################################################################
# Adds a build target called "coverage" for code coverage.
#
# This compiles the code using special GCC flags, run the tests,
# and then generates a nice HTML output. This new "coverage" make
# target will only be available if you build using GCC in Debug
# mode. If any of the required programs (lcov and genhtml) were
# not found, a FATAL_ERROR message is printed.
#
# If not already done, this code will set ENABLE_TEST to ON.
#
# To build the code coverage and open it in your browser do this:
#
# mkdir debug
# cd debug
# cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON ..
# make -j4
# make coverage
# xdg-open coverage/index.html
#################################################################
# Find programs we need
FIND_PROGRAM(LCOV_EXECUTABLE lcov DOC "Full path to lcov executable")
FIND_PROGRAM(GENHTML_EXECUTABLE genhtml DOC "Full path to genhtml executable")
MARK_AS_ADVANCED(LCOV_EXECUTABLE GENHTML_EXECUTABLE)
# Check, compiler, build types and programs are available
IF(NOT CMAKE_COMPILER_IS_GNUCC)
MESSAGE(FATAL_ERROR "Coverage can only be built on GCC")
ELSEIF(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
MESSAGE(FATAL_ERROR "Coverage can only be built in Debug mode")
ELSEIF(NOT LCOV_EXECUTABLE)
MESSAGE(FATAL_ERROR "lcov executable not found")
ELSEIF(NOT GENHTML_EXECUTABLE)
MESSAGE(FATAL_ERROR "genhtml executable not found")
ENDIF(NOT CMAKE_COMPILER_IS_GNUCC)
# Enable testing if not already done
SET(ENABLE_TEST ON)
#################################################################
# Set special compiler and linker flags for test coverage
#################################################################
# 0. Enable debug: -g
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
# 1. Disable optimizations: -O0
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
# 2. Enable all kind of warnings:
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W")
# 3. Enable special coverage flag (HINT: --coverage is a synonym for -fprofile-arcs -ftest-coverage)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
#################################################################
ADD_CUSTOM_TARGET(coverage
COMMAND ${CMAKE_COMMAND} -E echo "Beginning test coverage. Output is written to coverage.log."
COMMAND ${CMAKE_COMMAND} -E echo "COVERAGE-STEP-1/5: Reset all execution counts to zero"
COMMAND ${LCOV_EXECUTABLE} --directory . --zerocounters > coverage.log 2>&1
COMMAND ${CMAKE_COMMAND} -E echo "COVERAGE-STEP-2/5: Run testrunner"
COMMAND ${CMAKE_CTEST_COMMAND} >> coverage.log 2>&1
COMMAND ${CMAKE_COMMAND} -E echo "COVERAGE-STEP-3/5: Collect coverage data"
COMMAND ${LCOV_EXECUTABLE} --capture --directory . --output-file "./coverage.info" >> coverage.log 2>&1
COMMAND ${CMAKE_COMMAND} -E echo "COVERAGE-STEP-4/5: Generate HTML from coverage data"
COMMAND ${GENHTML_EXECUTABLE} "coverage.info" --title="libarchive-${LIBARCHIVE_VERSION_STRING}" --show-details --legend --output-directory "./coverage" >> coverage.log 2>&1
COMMAND ${CMAKE_COMMAND} -E echo "COVERAGE-STEP-5/5: Open test coverage HTML output in browser: xdg-open ./coverage/index.html"
COMMENT "Runs testrunner and generates coverage output (formats: .info and .html)")

File diff suppressed because it is too large Load diff

View file

@ -1,13 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: libarchive
Description: library that can create and read several streaming archive formats
Version: @VERSION@
Cflags: -I${includedir}
Cflags.private: -DLIBARCHIVE_STATIC
Libs: -L${libdir} -larchive
Libs.private: @LIBS@
Requires.private: @LIBSREQUIRED@

View file

@ -1 +0,0 @@
3006002

View file

@ -1,18 +0,0 @@
DEFINE_TEST(test_0)
DEFINE_TEST(test_empty_gz)
DEFINE_TEST(test_empty_lz4)
DEFINE_TEST(test_empty_xz)
DEFINE_TEST(test_empty_zstd)
DEFINE_TEST(test_error)
DEFINE_TEST(test_error_mixed)
DEFINE_TEST(test_expand_Z)
DEFINE_TEST(test_expand_bz2)
DEFINE_TEST(test_expand_gz)
DEFINE_TEST(test_expand_lz4)
DEFINE_TEST(test_expand_mixed)
DEFINE_TEST(test_expand_plain)
DEFINE_TEST(test_expand_xz)
DEFINE_TEST(test_expand_zstd)
DEFINE_TEST(test_help)
DEFINE_TEST(test_stdin)
DEFINE_TEST(test_version)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,48 +0,0 @@
DEFINE_TEST(test_0)
DEFINE_TEST(test_basic)
DEFINE_TEST(test_cmdline)
DEFINE_TEST(test_extract_cpio_Z)
DEFINE_TEST(test_extract_cpio_bz2)
DEFINE_TEST(test_extract_cpio_grz)
DEFINE_TEST(test_extract_cpio_gz)
DEFINE_TEST(test_extract_cpio_lrz)
DEFINE_TEST(test_extract_cpio_lz)
DEFINE_TEST(test_extract_cpio_lz4)
DEFINE_TEST(test_extract_cpio_lzma)
DEFINE_TEST(test_extract_cpio_lzo)
DEFINE_TEST(test_extract_cpio_xz)
DEFINE_TEST(test_extract_cpio_zstd)
DEFINE_TEST(test_format_newc)
DEFINE_TEST(test_gcpio_compat)
DEFINE_TEST(test_missing_file)
DEFINE_TEST(test_option_0)
DEFINE_TEST(test_option_B_upper)
DEFINE_TEST(test_option_C_upper)
DEFINE_TEST(test_option_J_upper)
DEFINE_TEST(test_option_L_upper)
DEFINE_TEST(test_option_Z_upper)
DEFINE_TEST(test_option_a)
DEFINE_TEST(test_option_b64encode)
DEFINE_TEST(test_option_c)
DEFINE_TEST(test_option_d)
DEFINE_TEST(test_option_f)
DEFINE_TEST(test_option_grzip)
DEFINE_TEST(test_option_help)
DEFINE_TEST(test_option_l)
DEFINE_TEST(test_option_lrzip)
DEFINE_TEST(test_option_lz4)
DEFINE_TEST(test_option_lzma)
DEFINE_TEST(test_option_lzop)
DEFINE_TEST(test_option_m)
DEFINE_TEST(test_option_passphrase)
DEFINE_TEST(test_option_t)
DEFINE_TEST(test_option_u)
DEFINE_TEST(test_option_uuencode)
DEFINE_TEST(test_option_version)
DEFINE_TEST(test_option_xz)
DEFINE_TEST(test_option_y)
DEFINE_TEST(test_option_z)
DEFINE_TEST(test_option_zstd)
DEFINE_TEST(test_owner_parse)
DEFINE_TEST(test_passthrough_dotdot)
DEFINE_TEST(test_passthrough_reverse)

View file

@ -1,133 +0,0 @@
default: all
archive_entry.3.html: ../../libarchive/archive_entry.3
groff -mdoc -T html ../../libarchive/archive_entry.3 > archive_entry.3.html
archive_entry_acl.3.html: ../../libarchive/archive_entry_acl.3
groff -mdoc -T html ../../libarchive/archive_entry_acl.3 > archive_entry_acl.3.html
archive_entry_linkify.3.html: ../../libarchive/archive_entry_linkify.3
groff -mdoc -T html ../../libarchive/archive_entry_linkify.3 > archive_entry_linkify.3.html
archive_entry_misc.3.html: ../../libarchive/archive_entry_misc.3
groff -mdoc -T html ../../libarchive/archive_entry_misc.3 > archive_entry_misc.3.html
archive_entry_paths.3.html: ../../libarchive/archive_entry_paths.3
groff -mdoc -T html ../../libarchive/archive_entry_paths.3 > archive_entry_paths.3.html
archive_entry_perms.3.html: ../../libarchive/archive_entry_perms.3
groff -mdoc -T html ../../libarchive/archive_entry_perms.3 > archive_entry_perms.3.html
archive_entry_stat.3.html: ../../libarchive/archive_entry_stat.3
groff -mdoc -T html ../../libarchive/archive_entry_stat.3 > archive_entry_stat.3.html
archive_entry_time.3.html: ../../libarchive/archive_entry_time.3
groff -mdoc -T html ../../libarchive/archive_entry_time.3 > archive_entry_time.3.html
archive_read.3.html: ../../libarchive/archive_read.3
groff -mdoc -T html ../../libarchive/archive_read.3 > archive_read.3.html
archive_read_add_passphrase.3.html: ../../libarchive/archive_read_add_passphrase.3
groff -mdoc -T html ../../libarchive/archive_read_add_passphrase.3 > archive_read_add_passphrase.3.html
archive_read_data.3.html: ../../libarchive/archive_read_data.3
groff -mdoc -T html ../../libarchive/archive_read_data.3 > archive_read_data.3.html
archive_read_disk.3.html: ../../libarchive/archive_read_disk.3
groff -mdoc -T html ../../libarchive/archive_read_disk.3 > archive_read_disk.3.html
archive_read_extract.3.html: ../../libarchive/archive_read_extract.3
groff -mdoc -T html ../../libarchive/archive_read_extract.3 > archive_read_extract.3.html
archive_read_filter.3.html: ../../libarchive/archive_read_filter.3
groff -mdoc -T html ../../libarchive/archive_read_filter.3 > archive_read_filter.3.html
archive_read_format.3.html: ../../libarchive/archive_read_format.3
groff -mdoc -T html ../../libarchive/archive_read_format.3 > archive_read_format.3.html
archive_read_free.3.html: ../../libarchive/archive_read_free.3
groff -mdoc -T html ../../libarchive/archive_read_free.3 > archive_read_free.3.html
archive_read_header.3.html: ../../libarchive/archive_read_header.3
groff -mdoc -T html ../../libarchive/archive_read_header.3 > archive_read_header.3.html
archive_read_new.3.html: ../../libarchive/archive_read_new.3
groff -mdoc -T html ../../libarchive/archive_read_new.3 > archive_read_new.3.html
archive_read_open.3.html: ../../libarchive/archive_read_open.3
groff -mdoc -T html ../../libarchive/archive_read_open.3 > archive_read_open.3.html
archive_read_set_options.3.html: ../../libarchive/archive_read_set_options.3
groff -mdoc -T html ../../libarchive/archive_read_set_options.3 > archive_read_set_options.3.html
archive_util.3.html: ../../libarchive/archive_util.3
groff -mdoc -T html ../../libarchive/archive_util.3 > archive_util.3.html
archive_write.3.html: ../../libarchive/archive_write.3
groff -mdoc -T html ../../libarchive/archive_write.3 > archive_write.3.html
archive_write_blocksize.3.html: ../../libarchive/archive_write_blocksize.3
groff -mdoc -T html ../../libarchive/archive_write_blocksize.3 > archive_write_blocksize.3.html
archive_write_data.3.html: ../../libarchive/archive_write_data.3
groff -mdoc -T html ../../libarchive/archive_write_data.3 > archive_write_data.3.html
archive_write_disk.3.html: ../../libarchive/archive_write_disk.3
groff -mdoc -T html ../../libarchive/archive_write_disk.3 > archive_write_disk.3.html
archive_write_filter.3.html: ../../libarchive/archive_write_filter.3
groff -mdoc -T html ../../libarchive/archive_write_filter.3 > archive_write_filter.3.html
archive_write_finish_entry.3.html: ../../libarchive/archive_write_finish_entry.3
groff -mdoc -T html ../../libarchive/archive_write_finish_entry.3 > archive_write_finish_entry.3.html
archive_write_format.3.html: ../../libarchive/archive_write_format.3
groff -mdoc -T html ../../libarchive/archive_write_format.3 > archive_write_format.3.html
archive_write_free.3.html: ../../libarchive/archive_write_free.3
groff -mdoc -T html ../../libarchive/archive_write_free.3 > archive_write_free.3.html
archive_write_header.3.html: ../../libarchive/archive_write_header.3
groff -mdoc -T html ../../libarchive/archive_write_header.3 > archive_write_header.3.html
archive_write_new.3.html: ../../libarchive/archive_write_new.3
groff -mdoc -T html ../../libarchive/archive_write_new.3 > archive_write_new.3.html
archive_write_open.3.html: ../../libarchive/archive_write_open.3
groff -mdoc -T html ../../libarchive/archive_write_open.3 > archive_write_open.3.html
archive_write_set_options.3.html: ../../libarchive/archive_write_set_options.3
groff -mdoc -T html ../../libarchive/archive_write_set_options.3 > archive_write_set_options.3.html
archive_write_set_passphrase.3.html: ../../libarchive/archive_write_set_passphrase.3
groff -mdoc -T html ../../libarchive/archive_write_set_passphrase.3 > archive_write_set_passphrase.3.html
cpio.5.html: ../../libarchive/cpio.5
groff -mdoc -T html ../../libarchive/cpio.5 > cpio.5.html
libarchive-formats.5.html: ../../libarchive/libarchive-formats.5
groff -mdoc -T html ../../libarchive/libarchive-formats.5 > libarchive-formats.5.html
libarchive.3.html: ../../libarchive/libarchive.3
groff -mdoc -T html ../../libarchive/libarchive.3 > libarchive.3.html
libarchive_changes.3.html: ../../libarchive/libarchive_changes.3
groff -mdoc -T html ../../libarchive/libarchive_changes.3 > libarchive_changes.3.html
libarchive_internals.3.html: ../../libarchive/libarchive_internals.3
groff -mdoc -T html ../../libarchive/libarchive_internals.3 > libarchive_internals.3.html
mtree.5.html: ../../libarchive/mtree.5
groff -mdoc -T html ../../libarchive/mtree.5 > mtree.5.html
tar.5.html: ../../libarchive/tar.5
groff -mdoc -T html ../../libarchive/tar.5 > tar.5.html
bsdtar.1.html: ../../tar/bsdtar.1
groff -mdoc -T html ../../tar/bsdtar.1 > bsdtar.1.html
bsdcpio.1.html: ../../cpio/bsdcpio.1
groff -mdoc -T html ../../cpio/bsdcpio.1 > bsdcpio.1.html
all: archive_entry.3.html archive_entry_acl.3.html archive_entry_linkify.3.html archive_entry_misc.3.html archive_entry_paths.3.html archive_entry_perms.3.html archive_entry_stat.3.html archive_entry_time.3.html archive_read.3.html archive_read_add_passphrase.3.html archive_read_data.3.html archive_read_disk.3.html archive_read_extract.3.html archive_read_filter.3.html archive_read_format.3.html archive_read_free.3.html archive_read_header.3.html archive_read_new.3.html archive_read_open.3.html archive_read_set_options.3.html archive_util.3.html archive_write.3.html archive_write_blocksize.3.html archive_write_data.3.html archive_write_disk.3.html archive_write_filter.3.html archive_write_finish_entry.3.html archive_write_format.3.html archive_write_free.3.html archive_write_header.3.html archive_write_new.3.html archive_write_open.3.html archive_write_set_options.3.html archive_write_set_passphrase.3.html cpio.5.html libarchive-formats.5.html libarchive.3.html libarchive_changes.3.html libarchive_internals.3.html mtree.5.html tar.5.html bsdtar.1.html bsdcpio.1.html

View file

@ -1,187 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY(3) BSD Library Functions Manual
ARCHIVE_ENTRY(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_clear</b>,
<b>archive_entry_clone</b>, <b>archive_entry_free</b>,
<b>archive_entry_new</b> &mdash; functions for managing
archive entry descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive_entry *</i></p>
<p style="margin-left:12%;"><b>archive_entry_clear</b>(<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive_entry *</i></p>
<p style="margin-left:12%;"><b>archive_entry_clone</b>(<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_free</b>(<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive_entry *</i></p>
<p style="margin-left:12%;"><b>archive_entry_new</b>(<i>void</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions create and
manipulate data objects that represent entries within an
archive. You can think of a struct archive_entry as a
heavy-duty version of struct stat: it includes everything
from struct stat plus associated pathname, textual group and
user names, etc. These objects are used by libarchive(3) to
represent the metadata associated with a particular entry in
an archive.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Create and
Destroy</b> <br>
There are functions to allocate, destroy, clear, and copy
<i>archive_entry</i> objects:</p>
<p><b>archive_entry_clear</b>()</p>
<p style="margin-left:17%;">Erases the object, resetting
all internal fields to the same state as a newly-created
object. This is provided to allow you to quickly recycle
objects without thrashing the heap.</p>
<p><b>archive_entry_clone</b>()</p>
<p style="margin-left:17%;">A deep copy operation; all text
fields are duplicated.</p>
<p><b>archive_entry_free</b>()</p>
<p style="margin-left:17%;">Releases the struct
archive_entry object.</p>
<p><b>archive_entry_new</b>()</p>
<p style="margin-left:17%;">Allocate and return a blank
struct archive_entry object.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Function
groups</b> <br>
Due to high number of functions, the accessor functions can
be found in man pages grouped by the purpose.</p>
<p style="margin-top: 1em">archive_entry_acl(3)</p>
<p style="margin-left:37%; margin-top: 1em">Access Control
List manipulation</p>
<p style="margin-top: 1em">archive_entry_paths(3)</p>
<p style="margin-left:37%; margin-top: 1em">Path name
manipulation</p>
<p style="margin-top: 1em">archive_entry_perms(3)</p>
<p style="margin-left:37%; margin-top: 1em">User, group and
mode manipulation</p>
<p style="margin-top: 1em">archive_entry_stat(3)</p>
<p style="margin-left:37%; margin-top: 1em">Functions not
in the other groups and copying to/from <i>struct
stat</i>.</p>
<p style="margin-top: 1em">archive_entry_time(3)</p>
<p style="margin-left:37%; margin-top: 1em">Time field
manipulation</p>
<p style="margin-left:6%; margin-top: 1em">Most of the
functions set or read entries in an object. Such functions
have one of the following forms:</p>
<p><b>archive_entry_set_XXXX</b>()</p>
<p style="margin-left:17%;">Stores the provided data in the
object. In particular, for strings, the pointer is stored,
not the referenced string.</p>
<p><b>archive_entry_copy_XXXX</b>()</p>
<p style="margin-left:17%;">As above, except that the
referenced data is copied into the object.</p>
<p><b>archive_entry_XXXX</b>()</p>
<p style="margin-left:17%;">Returns the specified data. In
the case of strings, a const-qualified pointer to the string
is returned.</p>
<p style="margin-left:6%;">String data can be set or
accessed as wide character strings or normal <i>char</i>
strings. The functions that use wide character strings are
suffixed with <b>_w</b>. Note that these are different
representations of the same data: For example, if you store
a narrow string and read the corresponding wide string, the
object will transparently convert formats using the current
locale. Similarly, if you store a wide string and then store
a narrow string for the same data, the previously-set wide
string will be discarded in favor of the new data.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry_acl(3),
archive_entry_paths(3), archive_entry_perms(3),
archive_entry_time(3), libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,570 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_ACL(3) BSD Library Functions Manual
ARCHIVE_ENTRY_ACL(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_acl_add_entry</b>,
<b>archive_entry_acl_add_entry_w</b>,
<b>archive_entry_acl_clear</b>,
<b>archive_entry_acl_count</b>,
<b>archive_entry_acl_from_text</b>,
<b>archive_entry_acl_from_text_w</b>,
<b>archive_entry_acl_next</b>,
<b>archive_entry_acl_reset</b>,
<b>archive_entry_acl_to_text</b>,
<b>archive_entry_acl_to_text_w</b>,
<b>archive_entry_acl_types</b> &mdash; functions for
manipulating Access Control Lists in archive entry
descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_acl_add_entry</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int&nbsp;type</i>, <i>int&nbsp;permset</i>,
<i>int&nbsp;tag</i>, <i>int&nbsp;qualifier</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_acl_add_entry_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int&nbsp;type</i>, <i>int&nbsp;permset</i>,
<i>int&nbsp;tag</i>, <i>int&nbsp;qualifier</i>,
<i>const&nbsp;wchar_t&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_acl_clear</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_acl_count</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int&nbsp;type</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_entry_acl_from_text</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*text</i>,
<i>int&nbsp;type</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_entry_acl_from_text_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*text</i>,
<i>int&nbsp;type</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_entry_acl_next</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int&nbsp;type</i>, <i>int&nbsp;*ret_type</i>,
<i>int&nbsp;*ret_permset</i>, <i>int&nbsp;*ret_tag</i>,
<i>int&nbsp;*ret_qual</i>,
<i>const&nbsp;char&nbsp;**ret_name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_acl_reset</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int&nbsp;type</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>char
*</i></p>
<p><b>archive_entry_acl_to_text</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>ssize_t&nbsp;*len_p</i>, <i>int&nbsp;flags</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>wchar_t
*</i></p>
<p><b>archive_entry_acl_to_text_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>ssize_t&nbsp;*len_p</i>, <i>int&nbsp;flags</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_acl_types</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">The &ldquo;Access Control Lists
(ACLs)&rdquo; extend the standard Unix permission model. The
ACL interface of <b>libarchive</b> supports both POSIX.1e
and NFSv4 style ACLs. Use of ACLs is restricted by various
levels of ACL support in operating systems, file systems and
archive formats.</p>
<p style="margin-left:6%; margin-top: 1em"><b>POSIX.1e
Access Control Lists</b> <br>
A POSIX.1e ACL consists of a number of independent entries.
Each entry specifies the permission set as a bitmask of
basic permissions. Valid permissions in the <i>permset</i>
are:</p>
<p>ARCHIVE_ENTRY_ACL_READ (<b>r</b>) <br>
ARCHIVE_ENTRY_ACL_WRITE (<b>w</b>) <br>
ARCHIVE_ENTRY_ACL_EXECUTE (<b>x</b>)</p>
<p style="margin-left:6%;">The permissions correspond to
the normal Unix permissions.</p>
<p style="margin-left:6%; margin-top: 1em">The <i>tag</i>
specifies the principal to which the permission applies.
Valid values are:</p>
<p>ARCHIVE_ENTRY_ACL_USER</p>
<p style="margin-left:51%;">The user specified by the name
field.</p>
<p>ARCHIVE_ENTRY_ACL_USER_OBJ</p>
<p style="margin-left:51%;">The owner of the file.</p>
<p>ARCHIVE_ENTRY_ACL_GROUP</p>
<p style="margin-left:51%;">The group specified by the name
field.</p>
<p>ARCHIVE_ENTRY_ACL_GROUP_OBJ</p>
<p style="margin-left:51%;">The group which owns the
file.</p>
<p>ARCHIVE_ENTRY_ACL_MASK</p>
<p style="margin-left:51%;">The maximum permissions to be
obtained via group permissions.</p>
<p>ARCHIVE_ENTRY_ACL_OTHER</p>
<p style="margin-left:51%;">Any principal who is not the
file owner or a member of the owning group.</p>
<p style="margin-left:6%; margin-top: 1em">The principals
ARCHIVE_ENTRY_ACL_USER_OBJ, ARCHIVE_ENTRY_ACL_GROUP_OBJ and
ARCHIVE_ENTRY_ACL_OTHER are equivalent to user, group and
other in the classic Unix permission model and specify
non-extended ACL entries.</p>
<p style="margin-left:6%; margin-top: 1em">All files have
an access ACL (ARCHIVE_ENTRY_ACL_TYPE_ACCESS). This
specifies the permissions required for access to the file
itself. Directories have an additional ACL
(ARCHIVE_ENTRY_ACL_TYPE_DEFAULT), which controls the initial
access ACL for newly-created directory entries.</p>
<p style="margin-left:6%; margin-top: 1em"><b>NFSv4 Access
Control Lists</b> <br>
A NFSv4 ACL consists of multiple individual entries called
Access Control Entries (ACEs).</p>
<p style="margin-left:6%; margin-top: 1em">There are four
possible types of a NFSv4 ACE:</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_ALLOW</p>
<p style="margin-left:51%;">Allow principal to perform
actions requiring given permissions.</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_DENY</p>
<p style="margin-left:51%;">Prevent principal from
performing actions requiring given permissions.</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_AUDIT</p>
<p style="margin-left:51%;">Log access attempts by
principal which require given permissions.</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_ALARM</p>
<p style="margin-left:51%;">Trigger a system alarm on
access attempts by principal which require given
permissions.</p>
<p style="margin-left:6%; margin-top: 1em">The <i>tag</i>
specifies the principal to which the permission applies.
Valid values are:</p>
<p>ARCHIVE_ENTRY_ACL_USER</p>
<p style="margin-left:51%;">The user specified by the name
field.</p>
<p>ARCHIVE_ENTRY_ACL_USER_OBJ</p>
<p style="margin-left:51%;">The owner of the file.</p>
<p>ARCHIVE_ENTRY_ACL_GROUP</p>
<p style="margin-left:51%;">The group specified by the name
field.</p>
<p>ARCHIVE_ENTRY_ACL_GROUP_OBJ</p>
<p style="margin-left:51%;">The group which owns the
file.</p>
<p>ARCHIVE_ENTRY_ACL_EVERYONE</p>
<p style="margin-left:51%;">Any principal who is not the
file owner or a member of the owning group.</p>
<p style="margin-left:6%; margin-top: 1em">Entries with the
ARCHIVE_ENTRY_ACL_USER or ARCHIVE_ENTRY_ACL_GROUP tag store
the user and group name in the <i>name</i> string and
optionally the user or group ID in the <i>qualifier</i>
integer.</p>
<p style="margin-left:6%; margin-top: 1em">NFSv4 ACE
permissions and flags are stored in the same <i>permset</i>
bitfield. Some permissions share the same constant and
permission character but have different effect on
directories than on files. The following ACE permissions are
supported:</p>
<p>ARCHIVE_ENTRY_ACL_READ_DATA (<b>r</b>)</p>
<p style="margin-left:24%;">Read data (file).</p>
<p>ARCHIVE_ENTRY_ACL_LIST_DIRECTORY (<b>r</b>)</p>
<p style="margin-left:24%;">List entries (directory).</p>
<p>ARCHIVE_ENTRY_ACL_WRITE_DATA (<b>w</b>)</p>
<p style="margin-left:24%;">Write data (file).</p>
<p>ARCHIVE_ENTRY_ACL_ADD_FILE (<b>w</b>)</p>
<p style="margin-left:24%;">Create files (directory).</p>
<p>ARCHIVE_ENTRY_ACL_EXECUTE (<b>x</b>)</p>
<p style="margin-left:24%;">Execute file or change into a
directory.</p>
<p>ARCHIVE_ENTRY_ACL_APPEND_DATA (<b>p</b>)</p>
<p style="margin-left:24%;">Append data (file).</p>
<p>ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY (<b>p</b>)</p>
<p style="margin-left:24%;">Create subdirectories
(directory).</p>
<p>ARCHIVE_ENTRY_ACL_DELETE_CHILD (<b>D</b>)</p>
<p style="margin-left:24%;">Remove files and subdirectories
inside a directory.</p>
<p>ARCHIVE_ENTRY_ACL_DELETE (<b>d</b>)</p>
<p style="margin-left:24%;">Remove file or directory.</p>
<p>ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES (<b>a</b>)</p>
<p style="margin-left:24%;">Read file or directory
attributes.</p>
<p>ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES (<b>A</b>)</p>
<p style="margin-left:24%;">Write file or directory
attributes.</p>
<p>ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS (<b>R</b>)</p>
<p style="margin-left:24%;">Read named file or directory
attributes.</p>
<p>ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS (<b>W</b>)</p>
<p style="margin-left:24%;">Write named file or directory
attributes.</p>
<p>ARCHIVE_ENTRY_ACL_READ_ACL (<b>c</b>)</p>
<p style="margin-left:24%;">Read file or directory ACL.</p>
<p>ARCHIVE_ENTRY_ACL_WRITE_ACL (<b>C</b>)</p>
<p style="margin-left:24%;">Write file or directory
ACL.</p>
<p>ARCHIVE_ENTRY_ACL_WRITE_OWNER (<b>o</b>)</p>
<p style="margin-left:24%;">Change owner of a file or
directory.</p>
<p>ARCHIVE_ENTRY_ACL_SYNCHRONIZE (<b>s</b>)</p>
<p style="margin-left:24%;">Use synchronous I/O.</p>
<p style="margin-left:6%; margin-top: 1em">The following
NFSv4 ACL inheritance flags are supported:</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT (<b>f</b>)</p>
<p style="margin-left:24%;">Inherit parent directory ACE to
files.</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT (<b>d</b>)</p>
<p style="margin-left:24%;">Inherit parent directory ACE to
subdirectories.</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY (<b>i</b>)</p>
<p style="margin-left:24%;">Only inherit, do not apply the
permission on the directory itself.</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT
(<b>n</b>)</p>
<p style="margin-left:24%;">Do not propagate inherit flags.
Only first-level entries inherit ACLs.</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS (<b>S</b>)</p>
<p style="margin-left:24%;">Trigger alarm or audit on
successful access.</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS (<b>F</b>)</p>
<p style="margin-left:24%;">Trigger alarm or audit on
failed access.</p>
<p>ARCHIVE_ENTRY_ACL_ENTRY_INHERITED (<b>I</b>)</p>
<p style="margin-left:24%;">Mark that ACE was
inherited.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Functions
<br>
archive_entry_acl_add_entry</b>() and
<b>archive_entry_acl_add_entry_w</b>() add a single ACL
entry. For the access ACL and non-extended principals, the
classic Unix permissions are updated. An archive entry
cannot contain both POSIX.1e and NFSv4 ACL entries.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_clear</b>()
removes all ACL entries and resets the enumeration
pointer.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_count</b>()
counts the ACL entries that have the given type mask.
<i>type</i> can be the bitwise-or of</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_ACCESS <br>
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT</p>
<p style="margin-left:6%; margin-top: 1em">for POSIX.1e
ACLs and</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_ALLOW <br>
ARCHIVE_ENTRY_ACL_TYPE_DENY <br>
ARCHIVE_ENTRY_ACL_TYPE_AUDIT <br>
ARCHIVE_ENTRY_ACL_TYPE_ALARM</p>
<p style="margin-left:6%; margin-top: 1em">for NFSv4 ACLs.
For POSIX.1e ACLs if ARCHIVE_ENTRY_ACL_TYPE_ACCESS is
included and at least one extended ACL entry is found, the
three non-extended ACLs are added.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_from_text</b>()
and <b>archive_entry_acl_from_text_w</b>() add new (or merge
with existing) ACL entries from (wide) text. The argument
<i>type</i> may take one of the following values:</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_ACCESS <br>
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT <br>
ARCHIVE_ENTRY_ACL_TYPE_NFS4</p>
<p style="margin-left:6%; margin-top: 1em">Supports all
formats that can be created with
<b>archive_entry_acl_to_text</b>() or respectively
<b>archive_entry_acl_to_text_w</b>(). Existing ACL entries
are preserved. To get a clean new ACL from text
<b>archive_entry_acl_clear</b>() must be called first.
Entries prefixed with &ldquo;default:&rdquo; are treated as
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT unless <i>type</i> is
ARCHIVE_ENTRY_ACL_TYPE_NFS4. Invalid entries, non-parseable
ACL entries and entries beginning with the &rsquo;#&rsquo;
character (comments) are skipped.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_next</b>()
return the next entry of the ACL list. This functions may
only be called after <b>archive_entry_acl_reset</b>() has
indicated the presence of extended ACL entries.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_reset</b>()
prepare reading the list of ACL entries with
<b>archive_entry_acl_next</b>(). The function returns 0 if
no non-extended ACLs are found. In this case, the access
permissions should be obtained by archive_entry_mode(3) or
set using chmod(2). Otherwise, the function returns the same
value as <b>archive_entry_acl_count</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_to_text</b>()
and <b>archive_entry_acl_to_text_w</b>() convert the ACL
entries for the given type into a (wide) string of ACL
entries separated by newline. If the pointer <i>len_p</i> is
not NULL, then the function shall return the length of the
string (not including the NULL terminator) in the location
pointed to by <i>len_p</i>. The <i>flag</i> argument is a
bitwise-or.</p>
<p style="margin-left:6%; margin-top: 1em">The following
flags are effective only on POSIX.1e ACL:</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_ACCESS</p>
<p style="margin-left:24%;">Output access ACLs.</p>
<p>ARCHIVE_ENTRY_ACL_TYPE_DEFAULT</p>
<p style="margin-left:24%;">Output POSIX.1e default
ACLs.</p>
<p>ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT</p>
<p style="margin-left:24%;">Prefix each default ACL entry
with the word &ldquo;default:&rdquo;.</p>
<p>ARCHIVE_ENTRY_ACL_STYLE_SOLARIS</p>
<p style="margin-left:24%;">The mask and other ACLs don not
contain a double colon.</p>
<p style="margin-left:6%; margin-top: 1em">The following
flags are effecive only on NFSv4 ACL:</p>
<p>ARCHIVE_ENTRY_ACL_STYLE_COMPACT</p>
<p style="margin-left:24%;">Do not output minus characters
for unset permissions and flags in NFSv4 ACL permission and
flag fields.</p>
<p style="margin-left:6%; margin-top: 1em">The following
flags are effective on both POSIX.1e and NFSv4 ACL:</p>
<p>ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID</p>
<p style="margin-left:24%;">Add an additional
colon-separated field containing the user or group id.</p>
<p>ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA</p>
<p style="margin-left:24%;">Separate ACL entries with comma
instead of newline.</p>
<p style="margin-left:6%; margin-top: 1em">If the archive
entry contains NFSv4 ACLs, all types of NFSv4 ACLs are
returned. It the entry contains POSIX.1e ACLs and none of
the flags ARCHIVE_ENTRY_ACL_TYPE_ACCESS or
ARCHIVE_ENTRY_ACL_TYPE_DEFAULT are specified, both access
and default entries are returned and default entries are
prefixed with &ldquo;default:&rdquo;.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_types</b>()
get ACL entry types contained in an archive entry&rsquo;s
ACL. As POSIX.1e and NFSv4 ACL entries cannot be mixed, this
function is a very efficient way to detect if an ACL already
contains POSIX.1e or NFSv4 ACL entries.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;"><b>archive_entry_acl_count</b>()
and <b>archive_entry_acl_reset</b>() returns the number of
ACL entries that match the given type mask. For POSIX.1e
ACLS if the type mask includes ARCHIVE_ENTRY_ACL_TYPE_ACCESS
and at least one extended ACL entry exists, the three
classic Unix permissions are counted.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_from_text</b>()
and <b>archive_entry_acl_from_text_w</b>() return ARCHIVE_OK
if all entries were successfully parsed and ARCHIVE_WARN if
one or more entries were invalid or non-parseable.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_next</b>()
returns ARCHIVE_OK on success, ARCHIVE_EOF if no more ACL
entries exist and ARCHIVE_WARN if
<b>archive_entry_acl_reset</b>() has not been called
first.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_to_text</b>()
returns a string representing the ACL entries matching the
given type and flags on success or NULL on error.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_to_text_w</b>()
returns a wide string representing the ACL entries matching
the given type and flags on success or NULL on error.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_acl_types</b>()
returns a bitmask of ACL entry types or 0 if archive entry
has no ACL entries.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;15, 2017 BSD</p>
<hr>
</body>
</html>

View file

@ -1,212 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_LINKIFY(3) BSD Library Functions Manual
ARCHIVE_ENTRY_LINKIFY(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_linkresolver</b>,
<b>archive_entry_linkresolver_new</b>,
<b>archive_entry_linkresolver_set_strategy</b>,
<b>archive_entry_linkresolver_free</b>,
<b>archive_entry_linkify</b> &mdash; hardlink resolver
functions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive_entry_linkresolver *</i></p>
<p style="margin-left:12%;"><b>archive_entry_linkresolver_new</b>(<i>void</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_linkresolver_set_strategy</b>(<i>struct&nbsp;archive_entry_linkresolver&nbsp;*resolver</i>,
<i>int&nbsp;format</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_linkresolver_free</b>(<i>struct&nbsp;archive_entry_linkresolver&nbsp;*resolver</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_linkify</b>(<i>struct&nbsp;archive_entry_linkresolver&nbsp;*resolver</i>,
<i>struct&nbsp;archive_entry&nbsp;**entry</i>,
<i>struct&nbsp;archive_entry&nbsp;**sparse</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Programs that want to create
archives have to deal with hardlinks. Hardlinks are handled
in different ways by the archive formats. The basic
strategies are:</p>
<p style="margin-top: 1em">1.</p>
<p style="margin-left:13%;">Ignore hardlinks and store the
body for each reference (old cpio, zip).</p>
<p style="margin-top: 1em">2.</p>
<p style="margin-left:13%;">Store the body the first time
an inode is seen (ustar, pax).</p>
<p style="margin-top: 1em">3.</p>
<p style="margin-left:13%;">Store the body the last time an
inode is seen (new cpio).</p>
<p style="margin-left:6%; margin-top: 1em">The
<b>archive_entry_linkresolver</b> functions help by
providing a unified interface and handling the complexity
behind the scene.</p>
<p style="margin-left:6%; margin-top: 1em">The
<b>archive_entry_linkresolver</b> functions assume that
<i>archive_entry</i> instances have valid nlinks, inode and
device values. The inode and device value is used to match
entries. The nlinks value is used to determined if all
references have been found and if the internal references
can be recycled.</p>
<p style="margin-left:6%; margin-top: 1em">The
<b>archive_entry_linkresolver_new</b>() function allocates a
new link resolver. The instance can be freed using
<b>archive_entry_linkresolver_free</b>(). All deferred
entries are flushed and the internal storage is freed.</p>
<p style="margin-left:6%; margin-top: 1em">The
<b>archive_entry_linkresolver_set_strategy</b>() function
selects the optimal hardlink strategy for the given format.
The format code can be obtained from archive_format(3). The
function can be called more than once, but it is recommended
to flush all deferred entries first.</p>
<p style="margin-left:6%; margin-top: 1em">The
<b>archive_entry_linkify</b>() function is the core of
<b>archive_entry_linkresolver</b>. The <b>entry</b>()
argument points to the <i>archive_entry</i> that should be
written. Depending on the strategy one of the following
actions is taken:</p>
<p style="margin-top: 1em">1.</p>
<p style="margin-left:13%;">For the simple archive formats
<i>*entry</i> is left unmodified and <i>*sparse</i> is set
to NULL.</p>
<p style="margin-top: 1em">2.</p>
<p style="margin-left:13%;">For tar like archive formats,
<i>*sparse</i> is set to NULL. If <i>*entry</i> is NULL, no
action is taken. If the hardlink count of <i>*entry</i> is
larger than 1 and the file type is a regular file or
symbolic link, the internal list is searched for a matching
inode. If such an inode is found, the link count is
decremented and the file size of <i>*entry</i> is set to 0
to notify that no body should be written. If no such inode
is found, a copy of the entry is added to the internal cache
with a link count reduced by one.</p>
<p style="margin-top: 1em">3.</p>
<p style="margin-left:13%;">For new cpio like archive
formats a value for <i>*entry</i> of NULL is used to flush
deferred entries. In that case <i>*entry</i> is set to an
arbitrary deferred entry and the entry itself is removed
from the internal list. If the internal list is empty,
<i>*entry</i> is set to NULL. In either case, <i>*sparse</i>
is set to NULL and the function returns. If the hardlink
count of <i>*entry</i> is one or the file type is a
directory or device, <i>*sparse</i> is set to NULL and no
further action is taken. Otherwise, the internal list is
searched for a matching inode. If such an inode is not
found, the entry is added to the internal list, both
<i>*entry</i> and <i>*sparse</i> are set to NULL and the
function returns. If such an inode is found, the link count
is decremented. If it remains larger than one, the existing
entry on the internal list is swapped with <i>*entry</i>
after retaining the link count. The existing entry is
returned in <i>*entry</i>. If the link count reached one,
the new entry is also removed from the internal list and
returned in <i>*sparse</i>. Otherwise <i>*sparse</i> is set
to NULL.</p>
<p style="margin-left:6%; margin-top: 1em">The general
usage is therefore:</p>
<p style="margin-top: 1em">1.</p>
<p style="margin-left:13%;">For each new archive entry,
call <b>archive_entry_linkify</b>().</p>
<p style="margin-top: 1em">2.</p>
<p style="margin-left:13%;">Keep in mind that the entries
returned may have a size of 0 now.</p>
<p style="margin-top: 1em">3.</p>
<p style="margin-left:13%;">If <i>*entry</i> is not NULL,
archive it.</p>
<p style="margin-top: 1em">4.</p>
<p style="margin-left:13%;">If <i>*sparse</i> is not NULL,
archive it.</p>
<p style="margin-top: 1em">5.</p>
<p style="margin-left:13%;">After all entries have been
written to disk, call <b>archive_entry_linkify</b>() with
<i>*entry</i> set to NULL and archive the returned entry as
long as it is not NULL.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;"><b>archive_entry_linkresolver_new</b>()
returns NULL on malloc(3) failures.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,91 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_MISC(3) BSD Library Functions Manual
ARCHIVE_ENTRY_MISC(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_symlink_type</b>,
<b>archive_entry_set_symlink_type</b> &mdash; miscellaneous
functions for manipulating properties of archive_entry</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_symlink_type</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_symlink_type</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">The function
<b>archive_entry_symlink_type</b>() returns and the function
<b>archive_entry_set_symlink_type</b>() sets the type of the
symbolic link stored in an archive entry. These functions
have special meaning on operating systems that support
multiple symbolic link types (e.g. Microsoft Windows).</p>
<p style="margin-left:6%; margin-top: 1em">Supported values
are:</p>
<p>AE_SYMLINK_TYPE_UNDEFINED</p>
<p style="margin-left:41%; margin-top: 1em">Symbolic link
target type is not defined (default on unix systems)</p>
<p>AE_SYMLINK_TYPE_FILE</p>
<p style="margin-left:41%; margin-top: 1em">Symbolic link
points to a file</p>
<p>AE_SYMLINK_TYPE_DIRECTORY</p>
<p style="margin-left:41%; margin-top: 1em">Symbolic link
points to a directory</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
archive_entry_paths(3), archive_entry_stat(3),
libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
April&nbsp;15, 2019 BSD</p>
<hr>
</body>
</html>

View file

@ -1,284 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_PATHS(3) BSD Library Functions Manual
ARCHIVE_ENTRY_PATHS(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_hardlink</b>,
<b>archive_entry_hardlink_w</b>,
<b>archive_entry_set_hardlink</b>,
<b>archive_entry_copy_hardlink</b>,
<b>archive_entry_copy_hardlink_w</b>,
<b>archive_entry_update_hardlink_utf8</b>,
<b>archive_entry_set_link</b>,
<b>archive_entry_copy_link</b>,
<b>archive_entry_copy_link_w</b>,
<b>archive_entry_update_link_utf8</b>,
<b>archive_entry_pathname</b>,
<b>archive_entry_pathname_w</b>,
<b>archive_entry_set_pathname</b>,
<b>archive_entry_copy_pathname</b>,
<b>archive_entry_copy_pathname_w</b>,
<b>archive_entry_update_pathname_utf8</b>,
<b>archive_entry_sourcepath</b>,
<b>archive_entry_copy_sourcepath</b>,
<b>archive_entry_symlink</b>,
<b>archive_entry_symlink_w</b>,
<b>archive_entry_set_symlink</b>,
<b>archive_entry_copy_symlink</b>,
<b>archive_entry_copy_symlink_w</b>,
<b>archive_entry_update_symlink_utf8</b> &mdash; functions
for manipulating path names in archive entry
descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_hardlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const wchar_t
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_hardlink_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_hardlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_hardlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_hardlink_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const</i>, <i>wchar_t</i>, <i>*path&quot;</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_update_hardlink_utf8</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_link</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_link</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_link_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_update_link_utf8</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_pathname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const wchar_t
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_pathname_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_pathname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_pathname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_pathname_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_update_pathname_utf8</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_sourcepath</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_sourcepath</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_symlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const wchar_t
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_symlink_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_symlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_symlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_symlink_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*path</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_update_symlink_utf8</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*path</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Path names supported by
archive_entry(3):</p>
<p>hardlink</p>
<p style="margin-left:22%; margin-top: 1em">Destination of
the hardlink.</p>
<p>link</p>
<p style="margin-left:22%; margin-top: 1em">Update only.
For a symlink, update the destination. Otherwise, make the
entry a hardlink and alter the destination for that.</p>
<p>pathname</p>
<p style="margin-left:22%; margin-top: 1em">Path in the
archive</p>
<p>sourcepath</p>
<p style="margin-left:22%; margin-top: 1em">Path on the
disk for use by archive_read_disk(3).</p>
<p>symlink</p>
<p style="margin-left:22%; margin-top: 1em">Destination of
the symbolic link.</p>
<p style="margin-left:6%; margin-top: 1em">Path names can
be provided in one of three different ways:</p>
<p style="margin-top: 1em">char *</p>
<p style="margin-left:21%; margin-top: 1em">Multibyte
strings in the current locale.</p>
<p style="margin-top: 1em">wchar_t *</p>
<p style="margin-left:21%; margin-top: 1em">Wide character
strings in the current locale. The accessor functions are
named <b>XXX_w</b>().</p>
<p style="margin-top: 1em">UTF-8</p>
<p style="margin-left:21%; margin-top: 1em">Unicode strings
encoded as UTF-8. These are convenience functions to update
both the multibyte and wide character strings at the same
time.</p>
<p style="margin-left:6%; margin-top: 1em">The sourcepath
is a pure filesystem concept and never stored in an archive
directly.</p>
<p style="margin-left:6%; margin-top: 1em">For that reason,
it is only available as multibyte string. The link path is a
convenience function for conditionally setting hardlink or
symlink destination. It doesn&rsquo;t have a corresponding
get accessor function.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_set_XXX</b>()
is an alias for <b>archive_entry_copy_XXX</b>().</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,315 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_PERMS(3) BSD Library Functions Manual
ARCHIVE_ENTRY_PERMS(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_gid</b>,
<b>archive_entry_set_gid</b>, <b>archive_entry_uid</b>,
<b>archive_entry_set_uid</b>, <b>archive_entry_perm</b>,
<b>archive_entry_set_perm</b>, <b>archive_entry_strmode</b>,
<b>archive_entry_uname</b>, <b>archive_entry_uname_w</b>,
<b>archive_entry_set_uname</b>,
<b>archive_entry_copy_uname</b>,
<b>archive_entry_copy_uname_w</b>,
<b>archive_entry_update_uname_utf8</b>,
<b>archive_entry_gname</b>, <b>archive_entry_gname_w</b>,
<b>archive_entry_set_gname</b>,
<b>archive_entry_copy_gname</b>,
<b>archive_entry_copy_gname_w</b>,
<b>archive_entry_update_gname_utf8</b>,
<b>archive_entry_fflags</b>,
<b>archive_entry_fflags_text</b>,
<b>archive_entry_set_fflags</b>,
<b>archive_entry_copy_fflags_text</b>,
<b>archive_entry_copy_fflags_text_w</b> &mdash; functions
for manipulating ownership and permissions in archive entry
descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>gid_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_gid</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_gid</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>gid_t&nbsp;gid</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>uid_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_uid</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_uid</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>uid_t&nbsp;uid</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>mode_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_perm</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_perm</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>mode_t&nbsp;mode</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_strmode</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_gname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const wchar_t
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_gname_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_gname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_gname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_gname_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_update_gname_utf8</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_uname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const wchar_t
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_uname_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_uname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_uname</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_uname_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_update_uname_utf8</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_fflags</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>unsigned&nbsp;long&nbsp;*set_bits</i>,
<i>unsigned&nbsp;long&nbsp;*clear_bits</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_fflags_text</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_entry_set_fflags</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>unsigned&nbsp;long&nbsp;set_bits</i>,
<i>unsigned&nbsp;long&nbsp;clear_bits</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_fflags_text</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;char&nbsp;*text</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const wchar_t
*</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_fflags_text_w</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;wchar_t&nbsp;*text</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;"><b>User id, group id and
mode</b> <br>
The functions <b>archive_entry_uid</b>(),
<b>archive_entry_gid</b>(), and <b>archive_entry_perm</b>()
can be used to extract the user id, group id and permission
from the given entry. The corresponding functions
<b>archive_entry_set_uid</b>(),
<b>archive_entry_set_gid</b>(), and
<b>archive_entry_set_perm</b>() store the given user id,
group id and permission in the entry. The permission is also
set as a side effect of calling
<b>archive_entry_set_mode</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_strmode</b>()
returns a string representation of the permission as used by
the long mode of ls(1).</p>
<p style="margin-left:6%; margin-top: 1em"><b>User and
group name</b> <br>
User and group names can be provided in one of three
different ways:</p>
<p style="margin-top: 1em">char *</p>
<p style="margin-left:21%; margin-top: 1em">Multibyte
strings in the current locale.</p>
<p style="margin-top: 1em">wchar_t *</p>
<p style="margin-left:21%; margin-top: 1em">Wide character
strings in the current locale. The accessor functions are
named <b>XXX_w</b>().</p>
<p style="margin-top: 1em">UTF-8</p>
<p style="margin-left:21%; margin-top: 1em">Unicode strings
encoded as UTF-8. These are convenience functions to update
both the multibyte and wide character strings at the same
time.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_entry_set_XXX</b>()
is an alias for <b>archive_entry_copy_XXX</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>File
Flags</b> <br>
File flags are transparently converted between a bitmap
representation and a textual format. For example, if you set
the bitmap and ask for text, the library will build a
canonical text format. However, if you set a text format and
request a text format, you will get back the same text, even
if it is ill-formed. If you need to canonicalize a textual
flags string, you should first set the text form, then
request the bitmap form, then use that to set the bitmap
form. Setting the bitmap format will clear the internal text
representation and force it to be reconstructed when you
next request the text form.</p>
<p style="margin-left:6%; margin-top: 1em">The bitmap
format consists of two integers, one containing bits that
should be set, the other specifying bits that should be
cleared. Bits not mentioned in either bitmap will be
ignored. Usually, the bitmap of bits to be cleared will be
set to zero. In unusual circumstances, you can force a
fully-specified set of file flags by setting the bitmap of
flags to clear to the complement of the bitmap of flags to
set. (This differs from fflagstostr(3), which only includes
names for set bits.) Converting a bitmap to a textual string
is a platform-specific operation; bits that are not
meaningful on the current platform will be ignored.</p>
<p style="margin-left:6%; margin-top: 1em">The canonical
text format is a comma-separated list of flag names. The
<b>archive_entry_copy_fflags_text</b>() and
<b>archive_entry_copy_fflags_text_w</b>() functions parse
the provided text and set the internal bitmap values. This
is a platform-specific operation; names that are not
meaningful on the current platform will be ignored. The
function returns a pointer to the start of the first name
that was not recognized, or NULL if every name was
recognized. Note that every name &mdash; including names
that follow an unrecognized name &mdash; will be evaluated,
and the bitmaps will be set to reflect every name that is
recognized. (In particular, this differs from
strtofflags(3), which stops parsing at the first
unrecognized name.)</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
archive_entry_acl(3), archive_read_disk(3),
archive_write_disk(3), libarchive(3)</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">The platform types <i>uid_t</i>
and <i>gid_t</i> are often 16 or 32 bit wide. In this case
it is possible that the ids can not be correctly restored
from archives and get truncated.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,381 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_STAT(3) BSD Library Functions Manual
ARCHIVE_ENTRY_STAT(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_stat</b>,
<b>archive_entry_copy_stat</b>,
<b>archive_entry_filetype</b>,
<b>archive_entry_set_filetype</b>,
<b>archive_entry_mode</b>, <b>archive_entry_set_mode</b>,
<b>archive_entry_size</b>, <b>archive_entry_size_is_set</b>,
<b>archive_entry_set_size</b>,
<b>archive_entry_unset_size</b>, <b>archive_entry_dev</b>,
<b>archive_entry_set_dev</b>,
<b>archive_entry_dev_is_set</b>,
<b>archive_entry_devmajor</b>,
<b>archive_entry_set_devmajor</b>,
<b>archive_entry_devminor</b>,
<b>archive_entry_set_devminor</b>, <b>archive_entry_ino</b>,
<b>archive_entry_set_ino</b>,
<b>archive_entry_ino_is_set</b>, <b>archive_entry_ino64</b>,
<b>archive_entry_set_ino64</b>, <b>archive_entry_nlink</b>,
<b>archive_entry_rdev</b>, <b>archive_entry_set_rdev</b>,
<b>archive_entry_rdevmajor</b>,
<b>archive_entry_set_rdevmajor</b>,
<b>archive_entry_rdevminor</b>,
<b>archive_entry_set_rdevminor</b> &mdash; accessor
functions for manipulating archive entry descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>const struct
stat *</i></p>
<p style="margin-left:12%;"><b>archive_entry_stat</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_copy_stat</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>const&nbsp;struct&nbsp;stat&nbsp;*sb</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>mode_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_filetype</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_filetype</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>unsigned&nbsp;int&nbsp;type</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>mode_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_mode</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_mode</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>mode_t&nbsp;mode</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int64_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_size</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_size_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_size</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int64_t&nbsp;size</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_unset_size</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>dev_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_dev</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_dev</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>dev_t&nbsp;dev</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_dev_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>dev_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_devmajor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_devmajor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>dev_t&nbsp;major</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>dev_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_devminor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_devminor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>dev_t&nbsp;minor</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>ino_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_ino</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_ino</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>unsigned&nbsp;long&nbsp;ino</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_ino_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int64_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_ino64</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_ino64</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>int64_t&nbsp;ino</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>unsigned
int</i></p>
<p style="margin-left:12%;"><b>archive_entry_nlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_nlink</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>unsigned&nbsp;int&nbsp;count</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>dev_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_rdev</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>dev_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_rdevmajor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>dev_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_rdevminor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_rdev</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>dev_t&nbsp;dev</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_rdevmajor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>dev_t&nbsp;major</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_rdevminor</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>dev_t&nbsp;minor</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;"><b>Copying to and from</b>
<i>struct stat</i> <br>
The function <b>archive_entry_stat</b>() converts the
various fields stored in the archive entry to the format
used by stat(2). The return value remains valid until either
<b>archive_entry_clear</b>() or <b>archive_entry_free</b>()
is called. It is not affected by calls to the set accessor
functions. It currently sets the following values in
<i>struct stat</i>: <i>st_atime</i>, <i>st_ctime</i>,
<i>st_dev</i>, <i>st_gid</i>, <i>st_ino</i>, <i>st_mode</i>,
<i>st_mtime</i>, <i>st_nlink</i>, <i>st_rdev</i>,
<i>st_size</i>, <i>st_uid</i>. In addition,
<i>st_birthtime</i> and high-precision information for
time-related fields will be included on platforms that
support it.</p>
<p style="margin-left:6%; margin-top: 1em">The function
<b>archive_entry_copy_stat</b>() copies fields from the
platform&rsquo;s <i>struct stat</i>. Fields not provided by
<i>struct stat</i> are unchanged.</p>
<p style="margin-left:6%; margin-top: 1em"><b>General
accessor functions</b> <br>
The functions <b>archive_entry_filetype</b>() and
<b>archive_entry_set_filetype</b>() get respectively set the
filetype. The file type is one of the following
constants:</p>
<p>AE_IFREG</p>
<p style="margin-left:28%; margin-top: 1em">Regular
file</p>
<p>AE_IFLNK</p>
<p style="margin-left:28%; margin-top: 1em">Symbolic
link</p>
<p>AE_IFSOCK</p>
<p style="margin-left:28%; margin-top: 1em">Socket</p>
<p>AE_IFCHR</p>
<p style="margin-left:28%; margin-top: 1em">Character
device</p>
<p>AE_IFBLK</p>
<p style="margin-left:28%; margin-top: 1em">Block
device</p>
<p>AE_IFDIR</p>
<p style="margin-left:28%; margin-top: 1em">Directory</p>
<p>AE_IFIFO</p>
<p style="margin-left:28%; margin-top: 1em">Named pipe
(fifo)</p>
<p style="margin-left:6%;">Not all file types are supported
by all platforms. The constants used by stat(2) may have
different numeric values from the corresponding constants
above.</p>
<p style="margin-left:6%; margin-top: 1em">The functions
<b>archive_entry_mode</b>() and
<b>archive_entry_set_mode</b>() get/set a combination of
file type and permissions and provide the equivalent of
<i>st_mode</i>. Use of <b>archive_entry_filetype</b>() and
<b>archive_entry_perm</b>() for getting and
<b>archive_entry_set_filetype</b>() and
<b>archive_entry_set_perm</b>() for setting is
recommended.</p>
<p style="margin-left:6%; margin-top: 1em">The function
<b>archive_entry_size</b>() returns the file size, if it has
been set, and 0 otherwise. <b>archive_entry_size</b>() can
be used to query that status.
<b>archive_entry_set_size</b>() and
<b>archive_entry_unset_size</b>() set and unset the size,
respectively.</p>
<p style="margin-left:6%; margin-top: 1em">The number of
references (hardlinks) can be obtained by calling
<b>archive_entry_nlink</b>() and set with
<b>archive_entry_set_nlink</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>Identifying
unique files</b> <br>
The functions <b>archive_entry_dev</b>() and
<b>archive_entry_ino64</b>() are used by
archive_entry_linkify(3) to find hardlinks. The pair of
device and inode is supposed to identify hardlinked
files.</p>
<p style="margin-left:6%; margin-top: 1em">The device major
and minor number can be obtained independently using
<b>archive_entry_devmajor</b>() and
<b>archive_entry_devminor</b>(). The device can be set
either via <b>archive_entry_set_dev</b>() or by the
combination of major and minor number using
<b>archive_entry_set_devmajor</b>() and
<b>archive_entry_set_devminor</b>().</p>
<p style="margin-left:6%; margin-top: 1em">The inode number
can be obtained using <b>archive_entry_ino</b>(). This is a
legacy interface that uses the platform <i>ino_t</i>, which
may be very small. To set the inode number,
<b>archive_entry_set_ino64</b>() is the preferred
interface.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Accessor
functions for block and character devices</b> <br>
Block and character devices are characterised either using a
device number or a pair of major and minor number. The
combined device number can be obtained with
<b>archive_device_rdev</b>() and set with
<b>archive_device_set_rdev</b>(). The major and minor
numbers are accessed by <b>archive_device_rdevmajor</b>(),
<b>archive_device_rdevminor</b>()
<b>archive_device_set_rdevmajor</b>() and
<b>archive_device_set_rdevminor</b>().</p>
<p style="margin-left:6%; margin-top: 1em">The process of
splitting the combined device number into major and minor
number and the reverse process of combing them differs
between platforms. Some archive formats use the combined
form, while other formats use the split form.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">stat(2), archive_entry_acl(3),
archive_entry_perms(3), archive_entry_time(3),
libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,205 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:21 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_ENTRY_TIME(3) BSD Library Functions Manual
ARCHIVE_ENTRY_TIME(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_entry_atime</b>,
<b>archive_entry_atime_nsec</b>,
<b>archive_entry_atime_is_set</b>,
<b>archive_entry_set_atime</b>,
<b>archive_entry_unset_atime</b>,
<b>archive_entry_birthtime</b>,
<b>archive_entry_birthtime_nsec</b>,
<b>archive_entry_birthtime_is_set</b>,
<b>archive_entry_set_birthtime</b>,
<b>archive_entry_unset_birthtime</b>,
<b>archive_entry_ctime</b>, <b>archive_entry_ctime_nsec</b>,
<b>archive_entry_ctime_is_set</b>,
<b>archive_entry_set_ctime</b>,
<b>archive_entry_unset_ctime</b>,
<b>archive_entry_mtime</b>, <b>archive_entry_mtime_nsec</b>,
<b>archive_entry_mtime_is_set</b>,
<b>archive_entry_set_mtime</b>,
<b>archive_entry_unset_mtime</b> &mdash; functions for
manipulating times in archive entry descriptions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive_entry.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>time_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_atime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>long</i></p>
<p style="margin-left:12%;"><b>archive_entry_atime_nsec</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_atime_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_atime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>time_t&nbsp;sec</i>, <i>long&nbsp;nanosec</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_unset_atime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>time_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_birthtime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>long</i></p>
<p style="margin-left:12%;"><b>archive_entry_birthtime_nsec</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_birthtime_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_birthtime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>time_t&nbsp;sec</i>, <i>long&nbsp;nanosec</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_unset_birthtime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>time_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_ctime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>long</i></p>
<p style="margin-left:12%;"><b>archive_entry_ctime_nsec</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_ctime_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_ctime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>time_t&nbsp;sec</i>, <i>long&nbsp;nanosec</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_unset_ctime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>time_t</i></p>
<p style="margin-left:12%;"><b>archive_entry_mtime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>long</i></p>
<p style="margin-left:12%;"><b>archive_entry_mtime_nsec</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_entry_mtime_is_set</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_set_mtime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>,
<i>time_t&nbsp;sec</i>, <i>long&nbsp;nanosec</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_entry_unset_mtime</b>(<i>struct&nbsp;archive_entry&nbsp;*a</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions create and
manipulate the time fields in an <i>archive_entry</i>.
Supported time fields are atime (access time), birthtime
(creation time), ctime (last time an inode property was
changed) and mtime (modification time).</p>
<p style="margin-left:6%; margin-top: 1em">libarchive(3)
provides a high-resolution interface. The timestamps are
truncated automatically depending on the archive format (for
archiving) or the filesystem capabilities (for
restoring).</p>
<p style="margin-left:6%; margin-top: 1em">All timestamp
fields are optional. The <b>XXX_unset</b>() functions can be
used to mark the corresponding field as missing. The current
state can be queried using <b>XXX_is_set</b>(). Unset time
fields have a second and nanosecond field of 0.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,233 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ(3) BSD Library Functions Manual
ARCHIVE_READ(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read</b> &mdash;
functions for reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide a
complete API for reading streaming archives. The general
process is to first create the struct archive object, set
options, initialize the reader, iterate over the archive
headers and associated data, then close the archive and
release all resources.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Create
archive object</b> <br>
See archive_read_new(3).</p>
<p style="margin-left:6%; margin-top: 1em">To read an
archive, you must first obtain an initialized struct archive
object from <b>archive_read_new</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>Enable
filters and formats</b> <br>
See archive_read_filter(3) and archive_read_format(3).</p>
<p style="margin-left:6%; margin-top: 1em">You can then
modify this object for the desired operations with the
various <b>archive_read_set_XXX</b>() and
<b>archive_read_support_XXX</b>() functions. In particular,
you will need to invoke appropriate
<b>archive_read_support_XXX</b>() functions to enable the
corresponding compression and format support. Note that
these latter functions perform two distinct operations: they
cause the corresponding support code to be linked into your
program, and they enable the corresponding auto-detect code.
Unless you have specific constraints, you will generally
want to invoke <b>archive_read_support_filter_all</b>() and
<b>archive_read_support_format_all</b>() to enable
auto-detect for all formats and compression types currently
supported by the library.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Set
options</b> <br>
See archive_read_set_options(3).</p>
<p style="margin-left:6%; margin-top: 1em"><b>Open
archive</b> <br>
See archive_read_open(3).</p>
<p style="margin-left:6%; margin-top: 1em">Once you have
prepared the struct archive object, you call
<b>archive_read_open</b>() to actually open the archive and
prepare it for reading. There are several variants of this
function; the most basic expects you to provide pointers to
several functions that can provide blocks of bytes from the
archive. There are convenience forms that allow you to
specify a filename, file descriptor, <i>FILE *</i> object,
or a block of memory from which to read the archive data.
Note that the core library makes no assumptions about the
size of the blocks read; callback functions are free to read
whatever block size is most appropriate for the medium.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Consume
archive</b> <br>
See archive_read_header(3), archive_read_data(3) and
archive_read_extract(3).</p>
<p style="margin-left:6%; margin-top: 1em">Each archive
entry consists of a header followed by a certain amount of
data. You can obtain the next header with
<b>archive_read_next_header</b>(), which returns a pointer
to an struct archive_entry structure with information about
the current archive element. If the entry is a regular file,
then the header will be followed by the file data. You can
use <b>archive_read_data</b>() (which works much like the
read(2) system call) to read this data from the archive, or
<b>archive_read_data_block</b>() which provides a slightly
more efficient interface. You may prefer to use the
higher-level <b>archive_read_data_skip</b>(), which reads
and discards the data for this entry,
<b>archive_read_data_into_fd</b>(), which copies the data to
the provided file descriptor, or
<b>archive_read_extract</b>(), which recreates the specified
entry on disk and copies data from the archive. In
particular, note that <b>archive_read_extract</b>() uses the
struct archive_entry structure that you provide it, which
may differ from the entry just read from the archive. In
particular, many applications will want to override the
pathname, file permissions, or ownership.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Release
resources</b> <br>
See archive_read_free(3).</p>
<p style="margin-left:6%; margin-top: 1em">Once you have
finished reading data from the archive, you should call
<b>archive_read_close</b>() to close the archive, then call
<b>archive_read_free</b>() to release all resources,
including all memory allocated by the library.</p>
<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following illustrates basic
usage of the library. In this example, the callback
functions are simply wrappers around the standard open(2),
read(2), and close(2) system calls.</p>
<p style="margin-left:14%; margin-top: 1em">void <br>
list_archive(const char *name) <br>
{ <br>
struct mydata *mydata; <br>
struct archive *a; <br>
struct archive_entry *entry;</p>
<p style="margin-left:14%; margin-top: 1em">mydata =
malloc(sizeof(struct mydata)); <br>
a = archive_read_new(); <br>
mydata-&gt;name = name; <br>
archive_read_support_filter_all(a); <br>
archive_read_support_format_all(a); <br>
archive_read_open(a, mydata, myopen, myread, myclose); <br>
while (archive_read_next_header(a, &amp;entry) ==
ARCHIVE_OK) { <br>
printf(&quot;%s\n&quot;,archive_entry_pathname(entry)); <br>
archive_read_data_skip(a); <br>
} <br>
archive_read_free(a); <br>
free(mydata); <br>
}</p>
<p style="margin-left:14%; margin-top: 1em">la_ssize_t <br>
myread(struct archive *a, void *client_data, const void
**buff) <br>
{ <br>
struct mydata *mydata = client_data;</p>
<p style="margin-left:14%; margin-top: 1em">*buff =
mydata-&gt;buff; <br>
return (read(mydata-&gt;fd, mydata-&gt;buff, 10240)); <br>
}</p>
<p style="margin-left:14%; margin-top: 1em">int <br>
myopen(struct archive *a, void *client_data) <br>
{ <br>
struct mydata *mydata = client_data;</p>
<p style="margin-left:14%; margin-top: 1em">mydata-&gt;fd =
open(mydata-&gt;name, O_RDONLY); <br>
return (mydata-&gt;fd &gt;= 0 ? ARCHIVE_OK : ARCHIVE_FATAL);
<br>
}</p>
<p style="margin-left:14%; margin-top: 1em">int <br>
myclose(struct archive *a, void *client_data) <br>
{ <br>
struct mydata *mydata = client_data;</p>
<p style="margin-left:14%; margin-top: 1em">if
(mydata-&gt;fd &gt; 0) <br>
close(mydata-&gt;fd); <br>
return (ARCHIVE_OK); <br>
}</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read_data(3),
archive_read_extract(3), archive_read_filter(3),
archive_read_format(3), archive_read_header(3),
archive_read_new(3), archive_read_open(3),
archive_read_set_options(3), archive_util(3), libarchive(3),
tar(5)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">Many traditional archiver
programs treat empty files as valid empty archives. For
example, many implementations of tar(1) allow you to append
entries to an empty file. Of course, it is impossible to
determine the format of an empty file by inspecting the
contents, so this library treats empty files as having a
special &ldquo;empty&rdquo; format.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,82 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_ADD_PASS... BSD Library Functions Manual
ARCHIVE_READ_ADD_PASS...</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_add_passphrase</b>,
<b>archive_read_set_passphrase_callback</b> &mdash;
functions for reading encrypted archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_add_passphrase</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*passphrase</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_set_passphrase_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>archive_passphrase_callback&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_add_passphrase</b>()</p>
<p style="margin-left:17%;">Register passphrases for
reading an encryption archive. If <i>passphrase</i> is NULL
or empty, this function will do nothing and
<b>ARCHIVE_FAILED</b> will be returned. Otherwise,
<b>ARCHIVE_OK</b> will be returned.</p>
<p style="margin-top: 1em"><b>archive_read_set_passphrase_callback</b>()</p>
<p style="margin-left:17%;">Register a callback function
that will be invoked to get a passphrase for decryption
after trying all the passphrases registered by the
<b>archive_read_add_passphrase</b>() function failed.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_read_set_options(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
September&nbsp;14, 2014 BSD</p>
<hr>
</body>
</html>

View file

@ -1,142 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_DATA(3) BSD Library Functions Manual
ARCHIVE_READ_DATA(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_data</b>,
<b>archive_read_data_block</b>,
<b>archive_read_data_skip</b>,
<b>archive_read_data_into_fd</b> &mdash; functions for
reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>
<p style="margin-left:12%;"><b>archive_read_data</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*buff</i>, <i>size_t&nbsp;len</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_data_block</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;**buff</i>, <i>size_t&nbsp;*len</i>,
<i>off_t&nbsp;*offset</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_data_skip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_data_into_fd</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;fd</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_data</b>()</p>
<p style="margin-left:17%;">Read data associated with the
header just read. Internally, this is a convenience function
that calls <b>archive_read_data_block</b>() and fills any
gaps with nulls so that callers see a single continuous
stream of data.</p>
<p><b>archive_read_data_block</b>()</p>
<p style="margin-left:17%;">Return the next available block
of data for this entry. Unlike <b>archive_read_data</b>(),
the <b>archive_read_data_block</b>() function avoids copying
data and allows you to correctly handle sparse files, as
supported by some archive formats. The library guarantees
that offsets will increase and that blocks will not overlap.
Note that the blocks returned from this function can be much
larger than the block size read from disk, due to
compression and internal buffer optimizations.</p>
<p><b>archive_read_data_skip</b>()</p>
<p style="margin-left:17%;">A convenience function that
repeatedly calls <b>archive_read_data_block</b>() to skip
all of the data for this archive entry. Note that this
function is invoked automatically by
<b>archive_read_next_header2</b>() if the previous entry was
not completely consumed.</p>
<p><b>archive_read_data_into_fd</b>()</p>
<p style="margin-left:17%;">A convenience function that
repeatedly calls <b>archive_read_data_block</b>() to copy
the entire entry to the provided file descriptor.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">Most functions return zero on
success, non-zero on error. The possible return codes
include: <b>ARCHIVE_OK</b> (the operation succeeded),
<b>ARCHIVE_WARN</b> (the operation succeeded but a
non-critical error was encountered), <b>ARCHIVE_EOF</b>
(end-of-archive was encountered), <b>ARCHIVE_RETRY</b> (the
operation failed but can be retried), and
<b>ARCHIVE_FATAL</b> (there was a fatal error; the archive
should be closed immediately).</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_read_data</b>()
returns a count of bytes actually read or zero at the end of
the entry. On error, a value of <b>ARCHIVE_FATAL</b>,
<b>ARCHIVE_WARN</b>, or <b>ARCHIVE_RETRY</b> is
returned.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_read_extract(3), archive_read_filter(3),
archive_read_format(3), archive_read_header(3),
archive_read_open(3), archive_read_set_options(3),
archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,518 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_DISK(3) BSD Library Functions Manual
ARCHIVE_READ_DISK(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_disk_new</b>,
<b>archive_read_disk_open</b>,
<b>archive_read_disk_open_w</b>,
<b>archive_read_disk_set_behavior</b>,
<b>archive_read_disk_set_symlink_logical</b>,
<b>archive_read_disk_set_symlink_physical</b>,
<b>archive_read_disk_set_symlink_hybrid</b>,
<b>archive_read_disk_entry_from_file</b>,
<b>archive_read_disk_gname</b>,
<b>archive_read_disk_uname</b>,
<b>archive_read_disk_set_uname_lookup</b>,
<b>archive_read_disk_set_gname_lookup</b>,
<b>archive_read_disk_set_standard_lookup</b>,
<b>archive_read_disk_descend</b>,
<b>archive_read_disk_can_descend</b>,
<b>archive_read_disk_current_filesystem</b>,
<b>archive_read_disk_current_filesystem_is_synthetic</b>,
<b>archive_read_disk_current_filesystem_is_remote</b>,
<b>archive_read_disk_set_matching</b>,
<b>archive_read_disk_set_metadata_filter_callback</b>,
&mdash; functions for reading objects from disk</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive *</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_new</b>(<i>void</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_open</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_open_w</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;wchar_t&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_set_behavior</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_set_symlink_logical</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_set_symlink_physical</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_set_symlink_hybrid</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_gname</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>gid_t</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_uname</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>uid_t</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_disk_set_gname_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*(*lookup)(void&nbsp;*,&nbsp;gid_t)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_disk_set_uname_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*(*lookup)(void&nbsp;*,&nbsp;uid_t)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_disk_entry_from_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>, <i>int&nbsp;fd</i>,
<i>const&nbsp;struct&nbsp;stat&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_descend</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_can_descend</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_current_filesystem</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_current_filesystem_is_synthetic</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_disk_current_filesystem_is_remote</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_disk_set_matching</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;(*excluded_func)(struct&nbsp;archive&nbsp;*,&nbsp;void&nbsp;*,&nbsp;struct&nbsp;archive&nbsp;entry&nbsp;*)</i>,
<i>void&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_disk_set_metadata_filter_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;(*metadata_filter_func)(struct&nbsp;archive&nbsp;*,&nbsp;void*,&nbsp;struct&nbsp;archive_entry&nbsp;*)</i>,
<i>void&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide an API
for reading information about objects on disk. In
particular, they provide an interface for populating struct
archive_entry objects.</p>
<p style="margin-top: 1em"><b>archive_read_disk_new</b>()</p>
<p style="margin-left:17%;">Allocates and initializes a
struct archive object suitable for reading object
information from disk.</p>
<p style="margin-top: 1em"><b>archive_read_disk_open</b>()</p>
<p style="margin-left:17%;">Opens the file or directory
from the given path and prepares the struct archive to read
it from disk.</p>
<p style="margin-top: 1em"><b>archive_read_disk_open_w</b>()</p>
<p style="margin-left:17%;">Opens the file or directory
from the given path as a wide character string and prepares
the struct archive to read it from disk.</p>
<p style="margin-top: 1em"><b>archive_read_disk_set_behavior</b>()</p>
<p style="margin-left:17%;">Configures various behavior
options when reading entries from disk. The flags field
consists of a bitwise OR of one or more of the following
values:</p>
<p><b>ARCHIVE_READDISK_HONOR_NODUMP</b></p>
<p style="margin-left:27%;">Skip files and directories with
the nodump file attribute (file flag) set. By default, the
nodump file attribute is ignored.</p>
<p><b>ARCHIVE_READDISK_MAC_COPYFILE</b></p>
<p style="margin-left:27%;">Mac OS X specific. Read
metadata (ACLs and extended attributes) with copyfile(3). By
default, metadata is read using copyfile(3).</p>
<p><b>ARCHIVE_READDISK_NO_ACL</b></p>
<p style="margin-left:27%;">Do not read Access Control
Lists. By default, ACLs are read from disk.</p>
<p><b>ARCHIVE_READDISK_NO_FFLAGS</b></p>
<p style="margin-left:27%;">Do not read file attributes
(file flags). By default, file attributes are read from
disk. See chattr(1) (Linux) or chflags(1) (FreeBSD, Mac OS
X) for more information on file attributes.</p>
<p><b>ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS</b></p>
<p style="margin-left:27%;">Do not traverse mount points.
By default, mount points are traversed.</p>
<p><b>ARCHIVE_READDISK_NO_XATTR</b></p>
<p style="margin-left:27%;">Do not read extended file
attributes (xattrs). By default, extended file attributes
are read from disk. See xattr(7) (Linux), xattr(2) (Mac OS
X), or getextattr(8) (FreeBSD) for more information on
extended file attributes.</p>
<p><b>ARCHIVE_READDISK_RESTORE_ATIME</b></p>
<p style="margin-left:27%;">Restore access time of
traversed files. By default, access time of traversed files
is not restored.</p>
<p><b>ARCHIVE_READDISK_NO_SPARSE</b></p>
<p style="margin-left:27%;">Do not read sparse file
information. By default, sparse file information is read
from disk.</p>
<p style="margin-top: 1em"><b>archive_read_disk_set_symlink_logical</b>(),
<b>archive_read_disk_set_symlink_physical</b>(),
<b>archive_read_disk_set_symlink_hybrid</b>()</p>
<p style="margin-left:17%;">This sets the mode used for
handling symbolic links. The &ldquo;logical&rdquo; mode
follows all symbolic links. The &ldquo;physical&rdquo; mode
does not follow any symbolic links. The &ldquo;hybrid&rdquo;
mode currently behaves identically to the
&ldquo;logical&rdquo; mode.</p>
<p style="margin-top: 1em"><b>archive_read_disk_gname</b>(),
<b>archive_read_disk_uname</b>()</p>
<p style="margin-left:17%;">Returns a user or group name
given a gid or uid value. By default, these always return a
NULL string.</p>
<p style="margin-top: 1em"><b>archive_read_disk_set_gname_lookup</b>(),
<b>archive_read_disk_set_uname_lookup</b>()</p>
<p style="margin-left:17%;">These allow you to override the
functions used for user and group name lookups. You may also
provide a void * pointer to a private data structure and a
cleanup function for that data. The cleanup function will be
invoked when the struct archive object is destroyed or when
new lookup functions are registered.</p>
<p style="margin-top: 1em"><b>archive_read_disk_set_standard_lookup</b>()</p>
<p style="margin-left:17%;">This convenience function
installs a standard set of user and group name lookup
functions. These functions use getpwuid(3) and getgrgid(3)
to convert ids to names, defaulting to NULL if the names
cannot be looked up. These functions also implement a simple
memory cache to reduce the number of calls to getpwuid(3)
and getgrgid(3).</p>
<p style="margin-top: 1em"><b>archive_read_disk_entry_from_file</b>()</p>
<p style="margin-left:17%;">Populates a struct
archive_entry object with information about a particular
file. The archive_entry object must have already been
created with archive_entry_new(3) and at least one of the
source path or path fields must already be set. (If both are
set, the source path will be used.)</p>
<p style="margin-left:17%; margin-top: 1em">Information is
read from disk using the path name from the struct
archive_entry object. If a file descriptor is provided, some
information will be obtained using that file descriptor, on
platforms that support the appropriate system calls.</p>
<p style="margin-left:17%; margin-top: 1em">If a pointer to
a struct stat is provided, information from that structure
will be used instead of reading from the disk where
appropriate. This can provide performance benefits in
scenarios where struct stat information has already been
read from the disk as a side effect of some other operation.
(For example, directory traversal libraries often provide
this information.)</p>
<p style="margin-left:17%; margin-top: 1em">Where
necessary, user and group ids are converted to user and
group names using the currently-registered lookup functions
above. This affects the file ownership fields and ACL values
in the struct archive_entry object.</p>
<p style="margin-top: 1em"><b>archive_read_disk_descend</b>()</p>
<p style="margin-left:17%;">If the current entry can be
descended, this function will mark the directory as the next
entry for archive_read_header(3) to visit.</p>
<p style="margin-top: 1em"><b>archive_read_disk_can_descend</b>()</p>
<p style="margin-left:17%;">Returns 1 if the current entry
is an unvisited directory and 0 otherwise.</p>
<p style="margin-top: 1em"><b>archive_read_disk_current_filesystem</b>()</p>
<p style="margin-left:17%;">Returns the index of the most
recent filesystem entry that has been visited through
archive_read_disk</p>
<p style="margin-top: 1em"><b>archive_read_disk_current_filesystem_is_synthetic</b>()</p>
<p style="margin-left:17%;">Returns 1 if the current
filesystem is a virtual filesystem. Returns 0 if the current
filesystem is not a virtual filesystem. Returns -1 if it is
unknown.</p>
<p style="margin-top: 1em"><b>archive_read_disk_current_filesystem_is_remote</b>()</p>
<p style="margin-left:17%;">Returns 1 if the current
filesystem is a remote filesystem. Returns 0 if the current
filesystem is not a remote filesystem. Returns -1 if it is
unknown.</p>
<p style="margin-top: 1em"><b>archive_read_disk_set_matching</b>()</p>
<p style="margin-left:17%;">Allows the caller to set struct
archive *_ma to compare each entry during
archive_read_header(3) calls. If matched based on calls to
archive_match_path_excluded, archive_match_time_excluded, or
archive_match_owner_excluded, then the callback function
specified by the _excluded_func parameter will execute. This
function will recieve data provided to the fourth parameter,
void *_client_data.</p>
<p style="margin-top: 1em"><b>archive_read_disk_set_metadata_filter_callback</b>()</p>
<p style="margin-left:17%;">Allows the caller to set a
callback function during calls to archive_read_header(3) to
filter out metadata for each entry. The callback function
recieves the struct archive object, void* custom filter
data, and the struct archive_entry. If the callback function
returns an error, ARCHIVE_RETRY will be returned and the
entry will not be further processed.</p>
<p style="margin-left:6%;">More information about the
<i>struct archive</i> object and the overall design of the
library can be found in the libarchive(3) overview.</p>
<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following illustrates basic
usage of the library by showing how to use it to copy an
item on disk into an archive.</p>
<p style="margin-left:14%; margin-top: 1em">void <br>
file_to_archive(struct archive *a, const char *name) <br>
{ <br>
char buff[8192]; <br>
size_t bytes_read; <br>
struct archive *ard; <br>
struct archive_entry *entry; <br>
int fd;</p>
<p style="margin-left:14%; margin-top: 1em">ard =
archive_read_disk_new(); <br>
archive_read_disk_set_standard_lookup(ard); <br>
entry = archive_entry_new(); <br>
fd = open(name, O_RDONLY); <br>
if (fd &lt; 0) <br>
return; <br>
archive_entry_copy_pathname(entry, name); <br>
archive_read_disk_entry_from_file(ard, entry, fd, NULL);
<br>
archive_write_header(a, entry); <br>
while ((bytes_read = read(fd, buff, sizeof(buff))) &gt; 0)
<br>
archive_write_data(a, buff, bytes_read); <br>
archive_write_finish_entry(a); <br>
archive_read_free(ard); <br>
archive_entry_free(entry); <br>
}</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">Most functions return
<b>ARCHIVE_OK</b> (zero) on success, or one of several
negative error codes for errors. Specific error codes
include: <b>ARCHIVE_RETRY</b> for operations that might
succeed if retried, <b>ARCHIVE_WARN</b> for unusual
conditions that do not prevent further operations, and
<b>ARCHIVE_FATAL</b> for serious errors that make remaining
operations impossible.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_read_disk_new</b>()
returns a pointer to a newly-allocated struct archive object
or NULL if the allocation failed for any reason.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_read_disk_gname</b>()
and <b>archive_read_disk_uname</b>() return const char *
pointers to the textual name or NULL if the lookup failed
for any reason. The returned pointer points to internal
storage that may be reused on the next call to either of
these functions; callers should copy the string if they need
to continue accessing it.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_util(3), archive_write(3), archive_write_disk(3),
libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3. The
<b>archive_read_disk</b> interface was added to
<b>libarchive 2.6</b> and first appeared in
FreeBSD&nbsp;8.0.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle
&lt;kientzle@FreeBSD.org&gt;.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">The &ldquo;standard&rdquo; user
name and group name lookup functions are not the defaults
because getgrgid(3) and getpwuid(3) are sometimes too large
for particular applications. The current design allows the
application author to use a more compact implementation when
appropriate.</p>
<p style="margin-left:6%; margin-top: 1em">The full list of
metadata read from disk by
<b>archive_read_disk_entry_from_file</b>() is necessarily
system-dependent.</p>
<p style="margin-left:6%; margin-top: 1em">The
<b>archive_read_disk_entry_from_file</b>() function reads as
much information as it can from disk. Some method should be
provided to limit this so that clients who do not need ACLs,
for instance, can avoid the extra work needed to look up
such information.</p>
<p style="margin-left:6%; margin-top: 1em">This API should
provide a set of methods for walking a directory tree. That
would make it a direct parallel of the archive_read(3) API.
When such methods are implemented, the &ldquo;hybrid&rdquo;
symbolic link mode will make sense.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
April&nbsp;3, 2017 BSD</p>
<hr>
</body>
</html>

View file

@ -1,134 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_EXTRACT(3) BSD Library Functions Manual
ARCHIVE_READ_EXTRACT(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_extract</b>,
<b>archive_read_extract2</b>,
<b>archive_read_extract_set_progress_callback</b> &mdash;
functions for reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_extract</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>,
<i>int&nbsp;flags</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_extract2</b>(<i>struct&nbsp;archive&nbsp;*src</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>,
<i>struct&nbsp;archive&nbsp;*dest</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_read_extract_set_progress_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;(*func)(void&nbsp;*)</i>,
<i>void&nbsp;*user_data</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_extract</b>(),
<b>archive_read_extract_set_skip_file</b>()</p>
<p style="margin-left:17%;">A convenience function that
wraps the corresponding archive_write_disk(3) interfaces.
The first call to <b>archive_read_extract</b>() creates a
restore object using archive_write_disk_new(3) and
archive_write_disk_set_standard_lookup(3), then
transparently invokes archive_write_disk_set_options(3),
archive_write_header(3), archive_write_data(3), and
archive_write_finish_entry(3) to create the entry on disk
and copy data into it. The <i>flags</i> argument is passed
unmodified to archive_write_disk_set_options(3).</p>
<p><b>archive_read_extract2</b>()</p>
<p style="margin-left:17%;">This is another version of
<b>archive_read_extract</b>() that allows you to provide
your own restore object. In particular, this allows you to
override the standard lookup functions using
archive_write_disk_set_group_lookup(3), and
archive_write_disk_set_user_lookup(3). Note that
<b>archive_read_extract2</b>() does not accept a
<i>flags</i> argument; you should use
<b>archive_write_disk_set_options</b>() to set the restore
options yourself.</p>
<p><b>archive_read_extract_set_progress_callback</b>()</p>
<p style="margin-left:17%;">Sets a pointer to a
user-defined callback that can be used for updating progress
displays during extraction. The progress function will be
invoked during the extraction of large regular files. The
progress function will be invoked with the pointer provided
to this call. Generally, the data pointed to should include
a reference to the archive object and the archive_entry
object so that various statistics can be retrieved for the
progress display.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">Most functions return zero on
success, non-zero on error. The possible return codes
include: <b>ARCHIVE_OK</b> (the operation succeeded),
<b>ARCHIVE_WARN</b> (the operation succeeded but a
non-critical error was encountered), <b>ARCHIVE_EOF</b>
(end-of-archive was encountered), <b>ARCHIVE_RETRY</b> (the
operation failed but can be retried), and
<b>ARCHIVE_FATAL</b> (there was a fatal error; the archive
should be closed immediately).</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_read_data(3), archive_read_filter(3),
archive_read_format(3), archive_read_open(3),
archive_read_set_options(3), archive_util(3), libarchive(3),
tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,223 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_FILTER(3) BSD Library Functions Manual
ARCHIVE_READ_FILTER(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_support_filter_all</b>,
<b>archive_read_support_filter_bzip2</b>,
<b>archive_read_support_filter_compress</b>,
<b>archive_read_support_filter_gzip</b>,
<b>archive_read_support_filter_lz4</b>,
<b>archive_read_support_filter_lzma</b>,
<b>archive_read_support_filter_none</b>,
<b>archive_read_support_filter_rpm</b>,
<b>archive_read_support_filter_uu</b>,
<b>archive_read_support_filter_xz</b>,
<b>archive_read_support_filter_zstd</b>,
<b>archive_read_support_filter_program</b>,
<b>archive_read_support_filter_program_signature</b> &mdash;
functions for reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_all</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_by_code</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_bzip2</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_compress</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_grzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_gzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_lrzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_lz4</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_lzma</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_lzop</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_none</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_rpm</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_uu</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_xz</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_filter_zstd</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_support_filter_program</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*cmd</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_support_filter_program_signature</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*cmd</i>,
<i>const&nbsp;void&nbsp;*signature</i>,
<i>size_t&nbsp;signature_length</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_support_filter_bzip2</b>(),
<b>archive_read_support_filter_compress</b>(),
<b>archive_read_support_filter_grzip</b>(),
<b>archive_read_support_filter_gzip</b>(),
<b>archive_read_support_filter_lrzip</b>(),
<b>archive_read_support_filter_lz4</b>(),
<b>archive_read_support_filter_lzma</b>(),
<b>archive_read_support_filter_lzop</b>(),
<b>archive_read_support_filter_none</b>(),
<b>archive_read_support_filter_rpm</b>(),
<b>archive_read_support_filter_uu</b>(),
<b>archive_read_support_filter_xz</b>(),
<b>archive_read_support_filter_zstd</b>(),</p>
<p style="margin-left:17%;">Enables auto-detection code and
decompression support for the specified compression. These
functions may fall back on external programs if an
appropriate library was not available at build time.
Decompression using an external program is usually slower
than decompression through built-in libraries. Note that
&ldquo;none&rdquo; is always enabled by default.</p>
<p><b>archive_read_support_filter_all</b>()</p>
<p style="margin-left:17%;">Enables all available
decompression filters.</p>
<p><b>archive_read_support_filter_by_code</b>()</p>
<p style="margin-left:17%;">Enables a single filter
specified by the filter code. This function does not work
with <b>ARCHIVE_FILTER_PROGRAM</b>. Note: In
statically-linked executables, this will cause your program
to include support for every filter. If executable size is a
concern, you may wish to avoid using this function.</p>
<p><b>archive_read_support_filter_program</b>()</p>
<p style="margin-left:17%;">Data is fed through the
specified external program before being dearchived. Note
that this disables automatic detection of the compression
format, so it makes no sense to specify this in conjunction
with any other decompression option.</p>
<p><b>archive_read_support_filter_program_signature</b>()</p>
<p style="margin-left:17%;">This feeds data through the
specified external program but only if the initial bytes of
the data match the specified signature value.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> if the compression is fully supported,
<b>ARCHIVE_WARN</b> if the compression is supported only
through an external program.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_read_support_filter_none</b>()
always succeeds.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_read(3),
archive_read_data(3), archive_read_format(3),
archive_read_format(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD June&nbsp;9,
2020 BSD</p>
<hr>
</body>
</html>

View file

@ -1,225 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_FORMAT(3) BSD Library Functions Manual
ARCHIVE_READ_FORMAT(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_support_format_7zip</b>,
<b>archive_read_support_format_all</b>,
<b>archive_read_support_format_ar</b>,
<b>archive_read_support_format_by_code</b>,
<b>archive_read_support_format_cab</b>,
<b>archive_read_support_format_cpio</b>,
<b>archive_read_support_format_empty</b>,
<b>archive_read_support_format_iso9660</b>,
<b>archive_read_support_format_lha</b>,
<b>archive_read_support_format_mtree</b>,
<b>archive_read_support_format_rar</b>,
<b>archive_read_support_format_raw</b>,
<b>archive_read_support_format_tar</b>,
<b>archive_read_support_format_xar</b>,
<b>archive_read_support_format_zip</b> &mdash; functions for
reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_7zip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_all</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_ar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_by_code</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_cab</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_cpio</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_empty</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_iso9660</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_lha</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_mtree</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_rar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_raw</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_tar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_xar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_support_format_zip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_support_format_7zip</b>(),
<b>archive_read_support_format_ar</b>(),
<b>archive_read_support_format_cab</b>(),
<b>archive_read_support_format_cpio</b>(),
<b>archive_read_support_format_iso9660</b>(),
<b>archive_read_support_format_lha</b>(),
<b>archive_read_support_format_mtree</b>(),
<b>archive_read_support_format_rar</b>(),
<b>archive_read_support_format_raw</b>(),
<b>archive_read_support_format_tar</b>(),
<b>archive_read_support_format_xar</b>(),
<b>archive_read_support_format_zip</b>()</p>
<p style="margin-left:17%;">Enables support---including
auto-detection code---for the specified archive format. For
example, <b>archive_read_support_format_tar</b>() enables
support for a variety of standard tar formats, old-style
tar, ustar, pax interchange format, and many common
variants.</p>
<p><b>archive_read_support_format_all</b>()</p>
<p style="margin-left:17%;">Enables support for all
available formats except the &ldquo;raw&rdquo; format (see
below).</p>
<p><b>archive_read_support_format_by_code</b>()</p>
<p style="margin-left:17%;">Enables a single format
specified by the format code. This can be useful when
reading a single archive twice; use <b>archive_format</b>()
after reading the first time and pass the resulting code to
this function to selectively enable only the necessary
format support. Note: In statically-linked executables, this
will cause your program to include support for every format.
If executable size is a concern, you may wish to avoid using
this function.</p>
<p><b>archive_read_support_format_empty</b>()</p>
<p style="margin-left:17%;">Enables support for treating
empty files as empty archives. Because empty files are valid
for several different formats, it is not possible to
accurately determine a format for an empty file based purely
on contents. So empty files are treated by libarchive as a
distinct format.</p>
<p><b>archive_read_support_format_raw</b>()</p>
<p style="margin-left:17%;">The &ldquo;raw&rdquo; format
handler allows libarchive to be used to read arbitrary data.
It treats any data stream as an archive with a single entry.
The pathname of this entry is &ldquo;data&rdquo;; all other
entry fields are unset. This is not enabled by
<b>archive_read_support_format_all</b>() in order to avoid
erroneous handling of damaged archives.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read_data(3),
archive_read_filter(3), archive_read_set_options(3),
archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">Many traditional archiver
programs treat empty files as valid empty archives. For
example, many implementations of tar(1) allow you to append
entries to an empty file. Of course, it is impossible to
determine the format of an empty file by inspecting the
contents, so this library treats empty files as having a
special &ldquo;empty&rdquo; format.</p>
<p style="margin-left:6%; margin-top: 1em">Using the
&ldquo;raw&rdquo; handler together with any other handler
will often work but can produce surprising results.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,107 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_FREE(3) BSD Library Functions Manual
ARCHIVE_READ_FREE(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_close</b>,
<b>archive_read_finish</b>, <b>archive_read_free</b> &mdash;
functions for reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_close</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_finish</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_free</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_close</b>()</p>
<p style="margin-left:17%;">Complete the archive and invoke
the close callback.</p>
<p><b>archive_read_finish</b>()</p>
<p style="margin-left:17%;">This is a deprecated synonym
for <b>archive_read_free</b>(). The new name was introduced
with libarchive 3.0. Applications that need to compile with
either libarchive 2 or libarchive 3 should continue to use
the <b>archive_read_finish</b>() name. Both names will be
supported until libarchive 4.0 is released, which is not
expected to occur earlier than 2013.</p>
<p><b>archive_read_free</b>()</p>
<p style="margin-left:17%;">Invokes
<b>archive_read_close</b>() if it was not invoked manually,
then release all resources. Note: In libarchive 1.x, this
function was declared to return <i>void</i>, which made it
impossible to detect certain errors when
<b>archive_read_close</b>() was invoked implicitly from this
function. The declaration is corrected beginning with
libarchive 2.0.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_read_data(3),
archive_read_filter(3), archive_read_format(3),
archive_read_new(3), archive_read_open(3),
archive_read_set_options(3), archive_util(3),
libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,98 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_HEADER(3) BSD Library Functions Manual
ARCHIVE_READ_HEADER(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_next_header</b>,
<b>archive_read_next_header2</b> &mdash; functions for
reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_next_header</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;**</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_next_header2</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_next_header</b>()</p>
<p style="margin-left:17%;">Read the header for the next
entry and return a pointer to a struct archive_entry. This
is a convenience wrapper around
<b>archive_read_next_header2</b>() that reuses an internal
struct archive_entry object for each request.</p>
<p><b>archive_read_next_header2</b>()</p>
<p style="margin-left:17%;">Read the header for the next
entry and populate the provided struct archive_entry.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> (the operation succeeded),
<b>ARCHIVE_WARN</b> (the operation succeeded but a
non-critical error was encountered), <b>ARCHIVE_EOF</b>
(end-of-archive was encountered), <b>ARCHIVE_RETRY</b> (the
operation failed but can be retried), and
<b>ARCHIVE_FATAL</b> (there was a fatal error; the archive
should be closed immediately).</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_read_data(3), archive_read_extract(3),
archive_read_filter(3), archive_read_format(3),
archive_read_open(3), archive_read_set_options(3),
archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,68 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_NEW(3) BSD Library Functions Manual
ARCHIVE_READ_NEW(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_new</b> &mdash;
functions for reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive *</i></p>
<p style="margin-left:12%;"><b>archive_read_new</b>(<i>void</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Allocates and initializes a
struct archive object suitable for reading from an archive.
NULL is returned on error.</p>
<p style="margin-left:6%; margin-top: 1em">A complete
description of the struct archive object can be found in the
overview manual page for libarchive(3).</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read_data(3),
archive_read_filter(3), archive_read_format(3),
archive_read_set_options(3), archive_util(3), libarchive(3),
tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,240 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_OPEN(3) BSD Library Functions Manual
ARCHIVE_READ_OPEN(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_open</b>,
<b>archive_read_open2</b>, <b>archive_read_open_fd</b>,
<b>archive_read_open_FILE</b>,
<b>archive_read_open_filename</b>,
<b>archive_read_open_memory</b> &mdash; functions for
reading streaming archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_open</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>archive_open_callback&nbsp;*</i>,
<i>archive_read_callback&nbsp;*</i>,
<i>archive_close_callback&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_open2</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>archive_open_callback&nbsp;*</i>,
<i>archive_read_callback&nbsp;*</i>,
<i>archive_skip_callback&nbsp;*</i>,
<i>archive_close_callback&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_open_FILE</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>FILE&nbsp;*file</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_open_fd</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;fd</i>, <i>size_t&nbsp;block_size</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_open_filename</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*filename</i>,
<i>size_t&nbsp;block_size</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_read_open_memory</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*buff</i>,
<i>size_t&nbsp;size</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_read_open</b>()</p>
<p style="margin-left:17%;">The same as
<b>archive_read_open2</b>(), except that the skip callback
is assumed to be NULL.</p>
<p><b>archive_read_open2</b>()</p>
<p style="margin-left:17%;">Freeze the settings, open the
archive, and prepare for reading entries. This is the most
generic version of this call, which accepts four callback
functions. Most clients will want to use
<b>archive_read_open_filename</b>(),
<b>archive_read_open_FILE</b>(),
<b>archive_read_open_fd</b>(), or
<b>archive_read_open_memory</b>() instead. The library
invokes the client-provided functions to obtain raw bytes
from the archive.</p>
<p><b>archive_read_open_FILE</b>()</p>
<p style="margin-left:17%;">Like
<b>archive_read_open</b>(), except that it accepts a <i>FILE
*</i> pointer. This function should not be used with tape
drives or other devices that require strict I/O
blocking.</p>
<p><b>archive_read_open_fd</b>()</p>
<p style="margin-left:17%;">Like
<b>archive_read_open</b>(), except that it accepts a file
descriptor and block size rather than a set of function
pointers. Note that the file descriptor will not be
automatically closed at end-of-archive. This function is
safe for use with tape drives or other blocked devices.</p>
<p><b>archive_read_open_file</b>()</p>
<p style="margin-left:17%;">This is a deprecated synonym
for <b>archive_read_open_filename</b>().</p>
<p><b>archive_read_open_filename</b>()</p>
<p style="margin-left:17%;">Like
<b>archive_read_open</b>(), except that it accepts a simple
filename and a block size. A NULL filename represents
standard input. This function is safe for use with tape
drives or other blocked devices.</p>
<p><b>archive_read_open_memory</b>()</p>
<p style="margin-left:17%;">Like
<b>archive_read_open</b>(), except that it accepts a pointer
and size of a block of memory containing the archive
data.</p>
<p style="margin-left:6%; margin-top: 1em">A complete
description of the struct archive and struct archive_entry
objects can be found in the overview manual page for
libarchive(3).</p>
<p style="margin-top: 1em"><b>CLIENT CALLBACKS</b></p>
<p style="margin-left:6%;">The callback functions must
match the following prototypes:</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
la_ssize_t</i></p>
<p><b>archive_read_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>const&nbsp;void&nbsp;**buffer</i>)</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
la_int64_t</i></p>
<p><b>archive_skip_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>off_t&nbsp;request</i>)</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
int</i> <b>archive_open_callback</b>(<i>struct archive
*</i>, <i>void *client_data</i>)</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
int</i> <b>archive_close_callback</b>(<i>struct archive
*</i>, <i>void *client_data</i>)</p>
<p style="margin-left:6%; margin-top: 1em">The open
callback is invoked by <b>archive_open</b>(). It should
return <b>ARCHIVE_OK</b> if the underlying file or data
source is successfully opened. If the open fails, it should
call <b>archive_set_error</b>() to register an error code
and message and return <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-left:6%; margin-top: 1em">The read
callback is invoked whenever the library requires raw bytes
from the archive. The read callback should read data into a
buffer, set the const void **buffer argument to point to the
available data, and return a count of the number of bytes
available. The library will invoke the read callback again
only after it has consumed this data. The library imposes no
constraints on the size of the data blocks returned. On
end-of-file, the read callback should return zero. On error,
the read callback should invoke <b>archive_set_error</b>()
to register an error code and message and return -1.</p>
<p style="margin-left:6%; margin-top: 1em">The skip
callback is invoked when the library wants to ignore a block
of data. The return value is the number of bytes actually
skipped, which may differ from the request. If the callback
cannot skip data, it should return zero. If the skip
callback is not provided (the function pointer is NULL ),
the library will invoke the read function instead and simply
discard the result. A skip callback can provide significant
performance gains when reading uncompressed archives from
slow disk drives or other media that can skip quickly.</p>
<p style="margin-left:6%; margin-top: 1em">The close
callback is invoked by archive_close when the archive
processing is complete. The callback should return
<b>ARCHIVE_OK</b> on success. On failure, the callback
should invoke <b>archive_set_error</b>() to register an
error code and message and return <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_read_data(3), archive_read_filter(3),
archive_read_format(3), archive_read_set_options(3),
archive_util(3), libarchive(3), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,266 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_READ_OPTIONS(3) BSD Library Functions Manual
ARCHIVE_READ_OPTIONS(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_read_set_filter_option</b>,
<b>archive_read_set_format_option</b>,
<b>archive_read_set_option</b>,
<b>archive_read_set_options</b> &mdash; functions
controlling options for reading archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><i>int</i></p>
<p><b>archive_read_set_filter_option</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*module</i>,
<i>const&nbsp;char&nbsp;*option</i>,
<i>const&nbsp;char&nbsp;*value</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_set_format_option</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*module</i>,
<i>const&nbsp;char&nbsp;*option</i>,
<i>const&nbsp;char&nbsp;*value</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_set_option</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*module</i>,
<i>const&nbsp;char&nbsp;*option</i>,
<i>const&nbsp;char&nbsp;*value</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_read_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*options</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide a way
for libarchive clients to configure specific read
modules.</p>
<p style="margin-top: 1em"><b>archive_read_set_filter_option</b>(),
<b>archive_read_set_format_option</b>()</p>
<p style="margin-left:17%;">Specifies an option that will
be passed to currently-registered filters (including
decompression filters) or format readers.</p>
<p style="margin-left:17%; margin-top: 1em">If
<i>option</i> and <i>value</i> are both NULL, these
functions will do nothing and <b>ARCHIVE_OK</b> will be
returned. If <i>option</i> is NULL but <i>value</i> is not,
these functions will do nothing and <b>ARCHIVE_FAILED</b>
will be returned.</p>
<p style="margin-left:17%; margin-top: 1em">If
<i>module</i> is not NULL, <i>option</i> and <i>value</i>
will be provided to the filter or reader named
<i>module</i>. The return value will be that of the module.
If there is no such module, <b>ARCHIVE_FAILED</b> will be
returned.</p>
<p style="margin-left:17%; margin-top: 1em">If
<i>module</i> is NULL, <i>option</i> and <i>value</i> will
be provided to every registered module. If any module
returns <b>ARCHIVE_FATAL</b>, this value will be returned
immediately. Otherwise, <b>ARCHIVE_OK</b> will be returned
if any module accepts the option, and <b>ARCHIVE_FAILED</b>
in all other cases.</p>
<p style="margin-top: 1em"><b>archive_read_set_option</b>()</p>
<p style="margin-left:17%;">Calls
<b>archive_read_set_format_option</b>(), then
<b>archive_read_set_filter_option</b>(). If either function
returns <b>ARCHIVE_FATAL</b>, <b>ARCHIVE_FATAL</b> will be
returned immediately. Otherwise, greater of the two values
will be returned.</p>
<p style="margin-top: 1em"><b>archive_read_set_options</b>()</p>
<p style="margin-left:17%;"><i>options</i> is a
comma-separated list of options. If <i>options</i> is NULL
or empty, <b>ARCHIVE_OK</b> will be returned
immediately.</p>
<p style="margin-left:17%; margin-top: 1em">Calls
<b>archive_read_set_option</b>() with each option in turn.
If any <b>archive_read_set_option</b>() call returns
<b>ARCHIVE_FATAL</b>, <b>ARCHIVE_FATAL</b> will be returned
immediately.</p>
<p style="margin-left:17%; margin-top: 1em">Individual
options have one of the following forms:</p>
<p><i>option=value</i></p>
<p style="margin-left:27%;">The option/value pair will be
provided to every module. Modules that do not accept an
option with this name will ignore it.</p>
<p><i>option</i></p>
<p style="margin-left:27%; margin-top: 1em">The option will
be provided to every module with a value of
&ldquo;1&rdquo;.</p>
<p><i>!option</i></p>
<p style="margin-left:27%;">The option will be provided to
every module with a NULL value.</p>
<p><i>module:option=value</i>, <i>module:option</i>,
<i>module:!option</i></p>
<p style="margin-left:27%;">As above, but the corresponding
option and value will be provided only to modules whose name
matches <i>module</i>.</p>
<p style="margin-top: 1em"><b>OPTIONS</b> <br>
Format cab <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format cpio <b><br>
compat-2x</b></p>
<p style="margin-left:27%;">Libarchive 2.x incorrectly
encoded Unicode filenames on some platforms. This option
mimics the libarchive 2.x filename handling so that such
archives can be read correctly.</p>
<p><b>hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p><b>pwb</b></p>
<p style="margin-left:27%; margin-top: 1em">When reading a
binary CPIO archive, assume that it is in the original PWB
cpio format, and handle file mode bits accordingly. The
default is to assume v7 format.</p>
<p>Format iso9660 <b><br>
joliet</b></p>
<p style="margin-left:27%; margin-top: 1em">Support Joliet
extensions. Defaults to enabled, use <b>!joliet</b> to
disable.</p>
<p><b>rockridge</b></p>
<p style="margin-left:27%;">Support RockRidge extensions.
Defaults to enabled, use <b>!rockridge</b> to disable.</p>
<p>Format lha <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format mtree <b><br>
checkfs</b></p>
<p style="margin-left:27%;">Allow reading information
missing from the mtree from the file system. Disabled by
default.</p>
<p>Format rar <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format tar <b><br>
compat-2x</b></p>
<p style="margin-left:27%;">Libarchive 2.x incorrectly
encoded Unicode filenames on some platforms. This option
mimics the libarchive 2.x filename handling so that such
archives can be read correctly.</p>
<p><b>hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p><b>mac-ext</b></p>
<p style="margin-left:27%;">Support Mac OS metadata
extension that records data in special files beginning with
a period and underscore. Defaults to enabled on Mac OS,
disabled on other platforms. Use <b>!mac-ext</b> to
disable.</p>
<p><b>read_concatenated_archives</b></p>
<p style="margin-left:27%;">Ignore zeroed blocks in the
archive, which occurs when multiple tar archives have been
concatenated together. Without this option, only the
contents of the first concatenated archive would be
read.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_write_set_options(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
January&nbsp;31, 2020 BSD</p>
<hr>
</body>
</html>

View file

@ -1,284 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:22 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_UTIL(3) BSD Library Functions Manual
ARCHIVE_UTIL(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_clear_error</b>,
<b>archive_compression</b>, <b>archive_compression_name</b>,
<b>archive_copy_error</b>, <b>archive_errno</b>,
<b>archive_error_string</b>, <b>archive_file_count</b>,
<b>archive_filter_code</b>, <b>archive_filter_count</b>,
<b>archive_filter_name</b>, <b>archive_format</b>,
<b>archive_format_name</b>, <b>archive_position</b>,
<b>archive_set_error</b> &mdash; libarchive utility
functions</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_clear_error</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_compression</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_compression_name</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p style="margin-left:12%;"><b>archive_copy_error</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_errno</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_error_string</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_file_count</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_filter_code</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_filter_count</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_filter_name</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_format</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>const char
*</i></p>
<p style="margin-left:12%;"><b>archive_format_name</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int64_t</i></p>
<p style="margin-left:12%;"><b>archive_position</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>void</i></p>
<p><b>archive_set_error</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;error_code</i>,
<i>const&nbsp;char&nbsp;*fmt</i>, <i>...</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide access
to various information about the struct archive object used
in the libarchive(3) library.</p>
<p><b>archive_clear_error</b>()</p>
<p style="margin-left:17%;">Clears any error information
left over from a previous call. Not generally used in client
code.</p>
<p><b>archive_compression</b>()</p>
<p style="margin-left:17%;">Synonym for
<b>archive_filter_code</b>(<i>a</i>, <i>0</i>).</p>
<p><b>archive_compression_name</b>()</p>
<p style="margin-left:17%;">Synonym for
<b>archive_filter_name</b>(<i>a</i>, <i>0</i>).</p>
<p><b>archive_copy_error</b>()</p>
<p style="margin-left:17%;">Copies error information from
one archive to another.</p>
<p><b>archive_errno</b>()</p>
<p style="margin-left:17%;">Returns a numeric error code
(see errno(2)) indicating the reason for the most recent
error return. Note that this can not be reliably used to
detect whether an error has occurred. It should be used only
after another libarchive function has returned an error
status.</p>
<p><b>archive_error_string</b>()</p>
<p style="margin-left:17%;">Returns a textual error message
suitable for display. The error message here is usually more
specific than that obtained from passing the result of
<b>archive_errno</b>() to strerror(3).</p>
<p><b>archive_file_count</b>()</p>
<p style="margin-left:17%;">Returns a count of the number
of files processed by this archive object. The count is
incremented by calls to archive_write_header(3) or
archive_read_next_header(3).</p>
<p><b>archive_filter_code</b>()</p>
<p style="margin-left:17%;">Returns a numeric code
identifying the indicated filter. See
<b>archive_filter_count</b>() for details of the
numbering.</p>
<p><b>archive_filter_count</b>()</p>
<p style="margin-left:17%;">Returns the number of filters
in the current pipeline. For read archive handles, these
filters are added automatically by the automatic format
detection. For write archive handles, these filters are
added by calls to the various
<b>archive_write_add_filter_XXX</b>() functions. Filters in
the resulting pipeline are numbered so that filter 0 is the
filter closest to the format handler. As a convenience,
functions that expect a filter number will accept -1 as a
synonym for the highest-numbered filter.</p>
<p style="margin-left:17%; margin-top: 1em">For example,
when reading a uuencoded gzipped tar archive, there are
three filters: filter 0 is the gunzip filter, filter 1 is
the uudecode filter, and filter 2 is the pseudo-filter that
wraps the archive read functions. In this case, requesting
<b>archive_position</b>(<i>a</i>, <i>-1</i>) would be a
synonym for <b>archive_position</b>(<i>a</i>, <i>2</i>)
which would return the number of bytes currently read from
the archive, while <b>archive_position</b>(<i>a</i>,
<i>1</i>) would return the number of bytes after uudecoding,
and <b>archive_position</b>(<i>a</i>, <i>0</i>) would return
the number of bytes after decompression.</p>
<p><b>archive_filter_name</b>()</p>
<p style="margin-left:17%;">Returns a textual name
identifying the indicated filter. See
<b>archive_filter_count</b>() for details of the
numbering.</p>
<p><b>archive_format</b>()</p>
<p style="margin-left:17%;">Returns a numeric code
indicating the format of the current archive entry. This
value is set by a successful call to
<b>archive_read_next_header</b>(). Note that it is common
for this value to change from entry to entry. For example, a
tar archive might have several entries that utilize GNU tar
extensions and several entries that do not. These entries
will have different format codes.</p>
<p><b>archive_format_name</b>()</p>
<p style="margin-left:17%;">A textual description of the
format of the current entry.</p>
<p><b>archive_position</b>()</p>
<p style="margin-left:17%;">Returns the number of bytes
read from or written to the indicated filter. In particular,
<b>archive_position</b>(<i>a</i>, <i>0</i>) returns the
number of bytes read or written by the format handler, while
<b>archive_position</b>(<i>a</i>, <i>-1</i>) returns the
number of bytes read or written to the archive. See
<b>archive_filter_count</b>() for details of the numbering
here.</p>
<p><b>archive_set_error</b>()</p>
<p style="margin-left:17%;">Sets the numeric error code and
error description that will be returned by
<b>archive_errno</b>() and <b>archive_error_string</b>().
This function should be used within I/O callbacks to set
system-specific error codes and error descriptions. This
function accepts a printf-like format string and arguments.
However, you should be careful to use only the following
printf format specifiers: &ldquo;%c&rdquo;,
&ldquo;%d&rdquo;, &ldquo;%jd&rdquo;, &ldquo;%jo&rdquo;,
&ldquo;%ju&rdquo;, &ldquo;%jx&rdquo;, &ldquo;%ld&rdquo;,
&ldquo;%lo&rdquo;, &ldquo;%lu&rdquo;, &ldquo;%lx&rdquo;,
&ldquo;%o&rdquo;, &ldquo;%u&rdquo;, &ldquo;%s&rdquo;,
&ldquo;%x&rdquo;, &ldquo;%%&rdquo;. Field-width specifiers
and other printf features are not uniformly supported and
should not be used.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_read(3),
archive_write(3), libarchive(3), printf(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,290 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE(3) BSD Library Functions Manual
ARCHIVE_WRITE(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write</b> &mdash;
functions for creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide a
complete API for creating streaming archive files. The
general process is to first create the struct archive
object, set any desired options, initialize the archive,
append entries, then close the archive and release all
resources.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Create
archive object</b> <br>
See archive_write_new(3).</p>
<p style="margin-left:6%; margin-top: 1em">To write an
archive, you must first obtain an initialized struct archive
object from <b>archive_write_new</b>().</p>
<p style="margin-left:6%; margin-top: 1em"><b>Enable
filters and formats, configure block size and padding</b>
<br>
See archive_write_filter(3), archive_write_format(3) and
archive_write_blocksize(3).</p>
<p style="margin-left:6%; margin-top: 1em">You can then
modify this object for the desired operations with the
various <b>archive_write_set_XXX</b>() functions. In
particular, you will need to invoke appropriate
<b>archive_write_add_XXX</b>() and
<b>archive_write_set_XXX</b>() functions to enable the
corresponding compression and format support.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Set
options</b> <br>
See archive_write_set_options(3).</p>
<p style="margin-left:6%; margin-top: 1em"><b>Open
archive</b> <br>
See archive_write_open(3).</p>
<p style="margin-left:6%; margin-top: 1em">Once you have
prepared the struct archive object, you call
<b>archive_write_open</b>() to actually open the archive and
prepare it for writing. There are several variants of this
function; the most basic expects you to provide pointers to
several functions that can provide blocks of bytes from the
archive. There are convenience forms that allow you to
specify a filename, file descriptor, <i>FILE *</i> object,
or a block of memory from which to write the archive
data.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Produce
archive</b> <br>
See archive_write_header(3) and archive_write_data(3).</p>
<p style="margin-left:6%; margin-top: 1em">Individual
archive entries are written in a three-step process: You
first initialize a struct archive_entry structure with
information about the new entry. At a minimum, you should
set the pathname of the entry and provide a <i>struct
stat</i> with a valid <i>st_mode</i> field, which specifies
the type of object and <i>st_size</i> field, which specifies
the size of the data portion of the object.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Release
resources</b> <br>
See archive_write_free(3).</p>
<p style="margin-left:6%; margin-top: 1em">After all
entries have been written, use the
<b>archive_write_free</b>() function to release all
resources.</p>
<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following sketch illustrates
basic usage of the library. In this example, the callback
functions are simply wrappers around the standard open(2),
write(2), and close(2) system calls.</p>
<p style="margin-left:14%; margin-top: 1em">#ifdef
__linux__</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="10%">
<p>#define</p></td>
<td width="11%">
<p>_FILE_OFFSET_BITS 64</p></td>
<td width="65%">
</td></tr>
</table>
<p style="margin-left:14%;">#endif <br>
#include &lt;sys/stat.h&gt; <br>
#include &lt;archive.h&gt; <br>
#include &lt;archive_entry.h&gt; <br>
#include &lt;fcntl.h&gt; <br>
#include &lt;stdlib.h&gt; <br>
#include &lt;unistd.h&gt;</p>
<p style="margin-left:14%; margin-top: 1em">struct mydata {
<br>
const char *name; <br>
int fd; <br>
};</p>
<p style="margin-left:14%; margin-top: 1em">int <br>
myopen(struct archive *a, void *client_data) <br>
{ <br>
struct mydata *mydata = client_data;</p>
<p style="margin-left:14%; margin-top: 1em">mydata-&gt;fd =
open(mydata-&gt;name, O_WRONLY | O_CREAT, 0644); <br>
if (mydata-&gt;fd &gt;= 0) <br>
return (ARCHIVE_OK); <br>
else <br>
return (ARCHIVE_FATAL); <br>
}</p>
<p style="margin-left:14%; margin-top: 1em">la_ssize_t <br>
mywrite(struct archive *a, void *client_data, const void
*buff, size_t n) <br>
{ <br>
struct mydata *mydata = client_data;</p>
<p style="margin-left:14%; margin-top: 1em">return
(write(mydata-&gt;fd, buff, n)); <br>
}</p>
<p style="margin-left:14%; margin-top: 1em">int <br>
myclose(struct archive *a, void *client_data) <br>
{ <br>
struct mydata *mydata = client_data;</p>
<p style="margin-left:14%; margin-top: 1em">if
(mydata-&gt;fd &gt; 0) <br>
close(mydata-&gt;fd); <br>
return (0); <br>
}</p>
<p style="margin-left:14%; margin-top: 1em">void <br>
write_archive(const char *outname, const char **filename)
<br>
{ <br>
struct mydata *mydata = malloc(sizeof(struct mydata)); <br>
struct archive *a; <br>
struct archive_entry *entry; <br>
struct stat st; <br>
char buff[8192]; <br>
int len; <br>
int fd;</p>
<p style="margin-left:14%; margin-top: 1em">a =
archive_write_new(); <br>
mydata-&gt;name = outname; <br>
/* Set archive format and filter according to output file
extension. <br>
* If it fails, set default format. Platform depended
function. <br>
* See supported formats in
archive_write_set_format_filter_by_ext.c */ <br>
if (archive_write_set_format_filter_by_ext(a, outname) !=
ARCHIVE_OK) { <br>
archive_write_add_filter_gzip(a); <br>
archive_write_set_format_ustar(a); <br>
} <br>
archive_write_open(a, mydata, myopen, mywrite, myclose);
<br>
while (*filename) { <br>
stat(*filename, &amp;st); <br>
entry = archive_entry_new(); <br>
archive_entry_copy_stat(entry, &amp;st); <br>
archive_entry_set_pathname(entry, *filename); <br>
archive_write_header(a, entry); <br>
if ((fd = open(*filename, O_RDONLY)) != -1) { <br>
len = read(fd, buff, sizeof(buff)); <br>
while (len &gt; 0) { <br>
archive_write_data(a, buff, len); <br>
len = read(fd, buff, sizeof(buff)); <br>
} <br>
close(fd); <br>
} <br>
archive_entry_free(entry); <br>
filename++; <br>
} <br>
archive_write_free(a); <br>
}</p>
<p style="margin-left:14%; margin-top: 1em">int main(int
argc, const char **argv) <br>
{ <br>
const char *outname; <br>
argv++; <br>
outname = *argv++; <br>
write_archive(outname, argv); <br>
return 0; <br>
}</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">There are many peculiar bugs in
historic tar implementations that may cause certain programs
to reject archives written by this library. For example,
several historic implementations calculated header checksums
incorrectly and will thus reject valid archives; GNU tar
does not fully support pax interchange format; some old tar
implementations required specific field terminations.</p>
<p style="margin-left:6%; margin-top: 1em">The default pax
interchange format eliminates most of the historic tar
limitations and provides a generic key/value attribute
facility for vendor-defined extensions. One oversight in
POSIX is the failure to provide a standard attribute for
large device numbers. This library uses
&ldquo;SCHILY.devminor&rdquo; and
&ldquo;SCHILY.devmajor&rdquo; for device numbers that exceed
the range supported by the backwards-compatible ustar
header. These keys are compatible with Joerg
Schilling&rsquo;s <b>star</b> archiver. Other
implementations may not recognize these keys and will thus
be unable to correctly restore device nodes with large
device numbers from archives created by this library.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,141 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_BLOCKSI... BSD Library Functions Manual
ARCHIVE_WRITE_BLOCKSI...</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_get_bytes_per_block</b>,
<b>archive_write_set_bytes_per_block</b>,
<b>archive_write_get_bytes_in_last_block</b>,
<b>archive_write_set_bytes_in_last_block</b> &mdash;
functions for creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_get_bytes_per_block</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_bytes_per_block</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;bytes_per_block</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_get_bytes_in_last_block</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_bytes_in_last_block</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_write_set_bytes_per_block</b>()</p>
<p style="margin-left:17%;">Sets the block size used for
writing the archive data. Every call to the write callback
function, except possibly the last one, will use this value
for the length. The default is to use a block size of 10240
bytes. Note that a block size of zero will suppress internal
blocking and cause writes to be sent directly to the write
callback as they occur.</p>
<p style="margin-top: 1em"><b>archive_write_get_bytes_per_block</b>()</p>
<p style="margin-left:17%;">Retrieve the block size to be
used for writing. A value of -1 here indicates that the
library should use default values. A value of zero indicates
that internal blocking is suppressed.</p>
<p style="margin-top: 1em"><b>archive_write_set_bytes_in_last_block</b>()</p>
<p style="margin-left:17%;">Sets the block size used for
writing the last block. If this value is zero, the last
block will be padded to the same size as the other blocks.
Otherwise, the final block will be padded to a multiple of
this size. In particular, setting it to 1 will cause the
final block to not be padded. For compressed output, any
padding generated by this option is applied only after the
compression. The uncompressed data is always unpadded. The
default is to pad the last block to the full block size
(note that <b>archive_write_open_filename</b>() will set
this based on the file type). Unlike the other
&ldquo;set&rdquo; functions, this function can be called
after the archive is opened.</p>
<p style="margin-top: 1em"><b>archive_write_get_bytes_in_last_block</b>()</p>
<p style="margin-left:17%;">Retrieve the currently-set
value for last block size. A value of -1 here indicates that
the library should use default values.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;"><b>archive_write_set_bytes_per_block</b>()
and <b>archive_write_set_bytes_in_last_block</b>() return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_write_get_bytes_per_block</b>()
and <b>archive_write_get_bytes_in_last_block</b>() return
currently configured block size (</p>
<p>-1 indicates the default block size ), or
<b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,107 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_DATA(3) BSD Library Functions Manual
ARCHIVE_WRITE_DATA(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_data</b>,
<b>archive_write_data_block</b> &mdash; functions for
creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>
<p style="margin-left:12%;"><b>archive_write_data</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>la_ssize_t</i></p>
<p style="margin-left:12%;"><b>archive_write_data_block</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;void&nbsp;*</i>, <i>size_t&nbsp;size</i>,
<i>int64_t&nbsp;offset</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_write_data</b>()</p>
<p style="margin-left:17%;">Write data corresponding to the
header just written.</p>
<p style="margin-top: 1em"><b>archive_write_data_block</b>()</p>
<p style="margin-left:17%;">Write data corresponding to the
header just written. This is like
<b>archive_write_data</b>() except that it performs a seek
on the file being written to the specified offset before
writing the data. This is useful when restoring sparse files
from archive formats that support sparse files. Returns
number of bytes written or -1 on error. (Note: This is
currently not supported for archive_write handles, only for
archive_write_disk handles.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">This function returns the number
of bytes actually written, or a negative error code on
error.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">In libarchive 3.x, this function
sometimes returns zero on success instead of returning the
number of bytes written. Specifically, this occurs when
writing to an <i>archive_write_disk</i> handle. Clients
should treat any value less than zero as an error and
consider any non-negative value as success.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1),
archive_write_finish_entry(3), archive_write_set_options(3),
libarchive(3), cpio(5), mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;28, 2017 BSD</p>
<hr>
</body>
</html>

View file

@ -1,376 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_DISK(3) BSD Library Functions Manual
ARCHIVE_WRITE_DISK(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_disk_new</b>,
<b>archive_write_disk_set_options</b>,
<b>archive_write_disk_set_skip_file</b>,
<b>archive_write_disk_set_group_lookup</b>,
<b>archive_write_disk_set_standard_lookup</b>,
<b>archive_write_disk_set_user_lookup</b> &mdash; functions
for creating objects on disk</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive *</i></p>
<p style="margin-left:12%;"><b>archive_write_disk_new</b>(<i>void</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_disk_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;flags</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_disk_set_skip_file</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>dev_t</i>, <i>ino_t</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_disk_set_group_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>gid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*gname,&nbsp;gid_t&nbsp;gid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_disk_set_standard_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_disk_set_user_lookup</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*</i>,
<i>uid_t&nbsp;(*)(void&nbsp;*,&nbsp;const&nbsp;char&nbsp;*uname,&nbsp;uid_t&nbsp;uid)</i>,
<i>void&nbsp;(*cleanup)(void&nbsp;*)</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide a
complete API for creating objects on disk from struct
archive_entry descriptions. They are most naturally used
when extracting objects from an archive using the
<b>archive_read</b>() interface. The general process is to
read struct archive_entry objects from an archive, then
write those objects to a struct archive object created using
the <b>archive_write_disk</b>() family functions. This
interface is deliberately very similar to the
<b>archive_write</b>() interface used to write objects to a
streaming archive.</p>
<p style="margin-top: 1em"><b>archive_write_disk_new</b>()</p>
<p style="margin-left:17%;">Allocates and initializes a
struct archive object suitable for writing objects to
disk.</p>
<p style="margin-top: 1em"><b>archive_write_disk_set_skip_file</b>()</p>
<p style="margin-left:17%;">Records the device and inode
numbers of a file that should not be overwritten. This is
typically used to ensure that an extraction process does not
overwrite the archive from which objects are being read.
This capability is technically unnecessary but can be a
significant performance optimization in practice.</p>
<p style="margin-top: 1em"><b>archive_write_disk_set_options</b>()</p>
<p style="margin-left:17%;">The options field consists of a
bitwise OR of one or more of the following values:</p>
<p><b>ARCHIVE_EXTRACT_ACL</b></p>
<p style="margin-left:27%;">Attempt to restore Access
Control Lists. By default, extended ACLs are ignored.</p>
<p><b>ARCHIVE_EXTRACT_CLEAR_NOCHANGE_FFLAGS</b></p>
<p style="margin-left:27%;">Before removing a file system
object prior to replacing it, clear platform-specific file
flags which might prevent its removal.</p>
<p><b>ARCHIVE_EXTRACT_FFLAGS</b></p>
<p style="margin-left:27%;">Attempt to restore file
attributes (file flags). By default, file attributes are
ignored. See chattr(1) (Linux) or chflags(1) (FreeBSD, Mac
OS X) for more information on file attributes.</p>
<p><b>ARCHIVE_EXTRACT_MAC_METADATA</b></p>
<p style="margin-left:27%;">Mac OS X specific. Restore
metadata using copyfile(3). By default, copyfile(3) metadata
is ignored.</p>
<p><b>ARCHIVE_EXTRACT_NO_OVERWRITE</b></p>
<p style="margin-left:27%;">Existing files on disk will not
be overwritten. By default, existing regular files are
truncated and overwritten; existing directories will have
their permissions updated; other pre-existing objects are
unlinked and recreated from scratch.</p>
<p><b>ARCHIVE_EXTRACT_OWNER</b></p>
<p style="margin-left:27%;">The user and group IDs should
be set on the restored file. By default, the user and group
IDs are not restored.</p>
<p><b>ARCHIVE_EXTRACT_PERM</b></p>
<p style="margin-left:27%;">Full permissions (including
SGID, SUID, and sticky bits) should be restored exactly as
specified, without obeying the current umask. Note that SUID
and SGID bits can only be restored if the user and group ID
of the object on disk are correct. If
<b>ARCHIVE_EXTRACT_OWNER</b> is not specified, then SUID and
SGID bits will only be restored if the default user and
group IDs of newly-created objects on disk happen to match
those specified in the archive entry. By default, only basic
permissions are restored, and umask is obeyed.</p>
<p><b>ARCHIVE_EXTRACT_SAFE_WRITES</b></p>
<p style="margin-left:27%;">Extract files atomically, by
first creating a unique temporary file and then renaming it
to its required destination name. This avoids a race where
an application might see a partial file (or no file) during
extraction.</p>
<p><b>ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS</b></p>
<p style="margin-left:27%;">Refuse to extract an absolute
path. The default is to not refuse such paths.</p>
<p><b>ARCHIVE_EXTRACT_SECURE_NODOTDOT</b></p>
<p style="margin-left:27%;">Refuse to extract a path that
contains a <i>..</i> element anywhere within it. The default
is to not refuse such paths. Note that paths ending in
<i>..</i> always cause an error, regardless of this
flag.</p>
<p><b>ARCHIVE_EXTRACT_SECURE_SYMLINKS</b></p>
<p style="margin-left:27%;">Refuse to extract any object
whose final location would be altered by a symlink on disk.
This is intended to help guard against a variety of mischief
caused by archives that (deliberately or otherwise) extract
files outside of the current directory. The default is not
to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
specified together with this option, the library will remove
any intermediate symlinks it finds and return an error only
if such symlink could not be removed.</p>
<p><b>ARCHIVE_EXTRACT_SPARSE</b></p>
<p style="margin-left:27%;">Scan data for blocks of NUL
bytes and try to recreate them with holes. This results in
sparse files, independent of whether the archive format
supports or uses them.</p>
<p><b>ARCHIVE_EXTRACT_TIME</b></p>
<p style="margin-left:27%;">The timestamps (mtime, ctime,
and atime) should be restored. By default, they are ignored.
Note that restoring of atime is not currently supported.</p>
<p><b>ARCHIVE_EXTRACT_UNLINK</b></p>
<p style="margin-left:27%;">Existing files on disk will be
unlinked before any attempt to create them. In some cases,
this can prove to be a significant performance improvement.
By default, existing files are truncated and rewritten, but
the file is not recreated. In particular, the default
behavior does not break existing hard links.</p>
<p><b>ARCHIVE_EXTRACT_XATTR</b></p>
<p style="margin-left:27%;">Attempt to restore extended
file attributes. By default, they are ignored. See xattr(7)
(Linux), xattr(2) (Mac OS X), or getextattr(8) (FreeBSD) for
more information on extended file attributes.</p>
<p style="margin-top: 1em"><b>archive_write_disk_set_group_lookup</b>(),
<b>archive_write_disk_set_user_lookup</b>()</p>
<p style="margin-left:17%;">The struct archive_entry
objects contain both names and ids that can be used to
identify users and groups. These names and ids describe the
ownership of the file itself and also appear in ACL lists.
By default, the library uses the ids and ignores the names,
but this can be overridden by registering user and group
lookup functions. To register, you must provide a lookup
function which accepts both a name and id and returns a
suitable id. You may also provide a void * pointer to a
private data structure and a cleanup function for that data.
The cleanup function will be invoked when the struct archive
object is destroyed.</p>
<p style="margin-top: 1em"><b>archive_write_disk_set_standard_lookup</b>()</p>
<p style="margin-left:17%;">This convenience function
installs a standard set of user and group lookup functions.
These functions use getpwnam(3) and getgrnam(3) to convert
names to ids, defaulting to the ids if the names cannot be
looked up. These functions also implement a simple memory
cache to reduce the number of calls to getpwnam(3) and
getgrnam(3).</p>
<p style="margin-left:6%;">More information about the
<i>struct archive</i> object and the overall design of the
library can be found in the libarchive(3) overview. Many of
these functions are also documented under
archive_write(3).</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">Most functions return
<b>ARCHIVE_OK</b> (zero) on success, or one of several
non-zero error codes for errors. Specific error codes
include: <b>ARCHIVE_RETRY</b> for operations that might
succeed if retried, <b>ARCHIVE_WARN</b> for unusual
conditions that do not prevent further operations, and
<b>ARCHIVE_FATAL</b> for serious errors that make remaining
operations impossible.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_write_disk_new</b>()
returns a pointer to a newly-allocated struct archive
object.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_write_data</b>()
returns a count of the number of bytes actually written, or
-1 on error.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_read(3),
archive_write(3), libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3. The
<b>archive_write_disk</b> interface was added to
<b>libarchive 2.0</b> and first appeared in
FreeBSD&nbsp;6.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">Directories are actually
extracted in two distinct phases. Directories are created
during <b>archive_write_header</b>(), but final permissions
are not set until <b>archive_write_close</b>(). This
separation is necessary to correctly handle borderline cases
such as a non-writable directory containing files, but can
cause unexpected results. In particular, directory
permissions are not fully restored until the archive is
closed. If you use chdir(2) to change the current directory
between calls to <b>archive_read_extract</b>() or before
calling <b>archive_read_close</b>(), you may confuse the
permission-setting logic with the result that directory
permissions are restored incorrectly.</p>
<p style="margin-left:6%; margin-top: 1em">The library
attempts to create objects with filenames longer than
<b>PATH_MAX</b> by creating prefixes of the full path and
changing the current directory. Currently, this logic is
limited in scope; the fixup pass does not work correctly for
such objects and the symlink security check option disables
the support for very long pathnames.</p>
<p style="margin-left:6%; margin-top: 1em">Restoring the
path <i>aa/../bb</i> does create each intermediate
directory. In particular, the directory <i>aa</i> is created
as well as the final object <i>bb</i>. In theory, this can
be exploited to create an entire directory hierarchy with a
single request. Of course, this does not work if the
<b>ARCHIVE_EXTRACT_NODOTDOT</b> option is specified.</p>
<p style="margin-left:6%; margin-top: 1em">Implicit
directories are always created obeying the current umask.
Explicit objects are created obeying the current umask
unless <b>ARCHIVE_EXTRACT_PERM</b> is specified, in which
case they current umask is ignored.</p>
<p style="margin-left:6%; margin-top: 1em">SGID and SUID
bits are restored only if the correct user and group could
be set. If <b>ARCHIVE_EXTRACT_OWNER</b> is not specified,
then no attempt is made to set the ownership. In this case,
SGID and SUID bits are restored only if the user and group
of the final object happen to match those specified in the
entry.</p>
<p style="margin-left:6%; margin-top: 1em">The
&ldquo;standard&rdquo; user-id and group-id lookup functions
are not the defaults because getgrnam(3) and getpwnam(3) are
sometimes too large for particular applications. The current
design allows the application author to use a more compact
implementation when appropriate.</p>
<p style="margin-left:6%; margin-top: 1em">There should be
a corresponding <b>archive_read_disk</b> interface that
walks a directory hierarchy and returns archive entry
objects.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
January&nbsp;19, 2020 BSD</p>
<hr>
</body>
</html>

View file

@ -1,193 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_FILTER(3) BSD Library Functions Manual
ARCHIVE_WRITE_FILTER(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_add_filter_b64encode</b>,
<b>archive_write_add_filter_by_name</b>,
<b>archive_write_add_filter_bzip2</b>,
<b>archive_write_add_filter_compress</b>,
<b>archive_write_add_filter_grzip</b>,
<b>archive_write_add_filter_gzip</b>,
<b>archive_write_add_filter_lrzip</b>,
<b>archive_write_add_filter_lz4</b>,
<b>archive_write_add_filter_lzip</b>,
<b>archive_write_add_filter_lzma</b>,
<b>archive_write_add_filter_lzop</b>,
<b>archive_write_add_filter_none</b>,
<b>archive_write_add_filter_program</b>,
<b>archive_write_add_filter_uuencode</b>,
<b>archive_write_add_filter_xz</b>,
<b>archive_write_add_filter_zstd</b> &mdash; functions
enabling output filters</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_b64encode</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_bzip2</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_compress</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_grzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_gzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_lrzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_lz4</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_lzip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_lzma</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_lzop</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_none</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_program</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*&nbsp;cmd</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_uuencode</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_xz</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_add_filter_zstd</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_write_add_filter_bzip2</b>(),
<b>archive_write_add_filter_compress</b>(),
<b>archive_write_add_filter_grzip</b>(),
<b>archive_write_add_filter_gzip</b>(),
<b>archive_write_add_filter_lrzip</b>(),
<b>archive_write_add_filter_lz4</b>(),
<b>archive_write_add_filter_lzip</b>(),
<b>archive_write_add_filter_lzma</b>(),
<b>archive_write_add_filter_lzop</b>(),
<b>archive_write_add_filter_xz</b>(),
<b>archive_write_add_filter_zstd</b>(),</p>
<p style="margin-left:17%;">The resulting archive will be
compressed as specified. Note that the compressed output is
always properly blocked.</p>
<p style="margin-top: 1em"><b>archive_write_add_filter_b64encode</b>(),
<b>archive_write_add_filter_uuencode</b>(),</p>
<p style="margin-left:17%;">The output will be encoded as
specified. The encoded output is always properly
blocked.</p>
<p style="margin-top: 1em"><b>archive_write_add_filter_none</b>()</p>
<p style="margin-left:17%;">This is never necessary. It is
provided only for backwards compatibility.</p>
<p style="margin-top: 1em"><b>archive_write_add_filter_program</b>()</p>
<p style="margin-left:17%;">The archive will be fed into
the specified compression program. The output of that
program is blocked and written to the client write
callbacks.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_write(3),
archive_write_format(3), archive_write_set_options(3),
libarchive(3), cpio(5), mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
August&nbsp;14, 2014 BSD</p>
<hr>
</body>
</html>

View file

@ -1,85 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_FINISH_... BSD Library Functions Manual
ARCHIVE_WRITE_FINISH_...</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_finish_entry</b>
&mdash; functions for creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_finish_entry</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Close out the entry just
written. In particular, this writes out the final padding
required by some formats. Ordinarily, clients never need to
call this, as it is called automatically by
<b>archive_write_header</b>() and
<b>archive_write_close</b>() as needed. For
archive_write_disk handles, this flushes pending file
attribute changes like modification time.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">This function returns
<b>ARCHIVE_OK</b> on success, or one of several non-zero
error codes for errors. Specific error codes include:
<b>ARCHIVE_RETRY</b> for operations that might succeed if
retried, <b>ARCHIVE_WARN</b> for unusual conditions that do
not prevent further operations, and <b>ARCHIVE_FATAL</b> for
serious errors that make remaining operations
impossible.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_write_data(3),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;28, 2017 BSD</p>
<hr>
</body>
</html>

View file

@ -1,285 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_FORMAT(3) BSD Library Functions Manual
ARCHIVE_WRITE_FORMAT(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_set_format</b>,
<b>archive_write_set_format_7zip</b>,
<b>archive_write_set_format_ar</b>,
<b>archive_write_set_format_ar_bsd</b>,
<b>archive_write_set_format_ar_svr4</b>,
<b>archive_write_set_format_by_name</b>,
<b>archive_write_set_format_cpio</b>,
<b>archive_write_set_format_cpio_bin</b>,
<b>archive_write_set_format_cpio_newc</b>,
<b>archive_write_set_format_cpio_odc</b>,
<b>archive_write_set_format_cpio_pwb</b>,
<b>archive_write_set_format_filter_by_ext</b>,
<b>archive_write_set_format_filter_by_ext_def</b>,
<b>archive_write_set_format_gnutar</b>,
<b>archive_write_set_format_iso9660</b>,
<b>archive_write_set_format_mtree</b>,
<b>archive_write_set_format_mtree_classic</b>,
<b>archive_write_set_format_mtree_default</b>,
<b>archive_write_set_format_pax</b>,
<b>archive_write_set_format_pax_restricted</b>,
<b>archive_write_set_format_raw</b>,
<b>archive_write_set_format_shar</b>,
<b>archive_write_set_format_shar_dump</b>,
<b>archive_write_set_format_ustar</b>,
<b>archive_write_set_format_v7tar</b>,
<b>archive_write_set_format_warc</b>,
<b>archive_write_set_format_xar</b>,
<b>archive_write_set_format_zip</b> &mdash; functions for
creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;code</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_7zip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_ar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_ar_bsd</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_ar_svr4</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_by_name</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*name</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_cpio</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_cpio_bin</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_cpio_newc</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_cpio_odc</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_cpio_pwb</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_filter_by_ext</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*filename</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_filter_by_ext_def</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*filename</i>,
<i>const&nbsp;char&nbsp;*def_ext</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_gnutar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_iso9660</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_mtree</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_pax</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_pax_restricted</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_raw</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_shar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_shar_dump</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_ustar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_v7tar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_warc</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_xar</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_set_format_zip</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions set the format
that will be used for the archive.</p>
<p style="margin-left:6%; margin-top: 1em">The library can
write a variety of common archive formats.</p>
<p style="margin-top: 1em"><b>archive_write_set_format</b>()</p>
<p style="margin-left:17%;">Sets the format based on the
format code (see <i>archive.h</i> for the full list of
format codes). In particular, this can be used in
conjunction with <b>archive_format</b>() to create a new
archive with the same format as an existing archive.</p>
<p style="margin-top: 1em"><b>archive_write_set_format_by_name</b>()</p>
<p style="margin-left:17%;">Sets the corresponding format
based on the common name.</p>
<p style="margin-top: 1em"><b>archive_write_set_format_filter_by_ext</b>()
<b>archive_write_set_format_filter_by_ext_def</b>()</p>
<p style="margin-left:17%;">Sets both filters and format
based on the output filename. Supported extensions: .7z,
.zip, .jar, .cpio, .iso, .a, .ar, .tar, .tgz, .tar.gz,
.tar.bz2, .tar.xz</p>
<p style="margin-top: 1em"><b>archive_write_set_format_7zip</b>()
<b>archive_write_set_format_ar_bsd</b>()
<b>archive_write_set_format_ar_svr4</b>()
<b>archive_write_set_format_cpio</b>()
<b>archive_write_set_format_cpio_bin</b>()
<b>archive_write_set_format_cpio_newc</b>()
<b>archive_write_set_format_cpio_odc</b>()
<b>archive_write_set_format_cpio_pwb</b>()
<b>archive_write_set_format_gnutar</b>()
<b>archive_write_set_format_iso9660</b>()
<b>archive_write_set_format_mtree</b>()
<b>archive_write_set_format_mtree_classic</b>()
<b>archive_write_set_format_pax</b>()
<b>archive_write_set_format_pax_restricted</b>()
<b>archive_write_set_format_raw</b>()
<b>archive_write_set_format_shar</b>()
<b>archive_write_set_format_shar_dump</b>()
<b>archive_write_set_format_ustar</b>()
<b>archive_write_set_format_v7tar</b>()
<b>archive_write_set_format_warc</b>()
<b>archive_write_set_format_xar</b>()
<b>archive_write_set_format_zip</b>()</p>
<p style="margin-left:17%;">Set the format as specified.
More details on the formats supported by libarchive can be
found in the libarchive-formats(5) manual page.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_write(3),
archive_write_set_options(3), libarchive(3), cpio(5),
libarchive-formats(5), mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;14, 2013 BSD</p>
<hr>
</body>
</html>

View file

@ -1,116 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_FREE(3) BSD Library Functions Manual
ARCHIVE_WRITE_FREE(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_fail</b>,
<b>archive_write_close</b>, <b>archive_write_finish</b>,
<b>archive_write_free</b> &mdash; functions for creating
archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_fail</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_close</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_finish</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_free</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_write_fail</b>()</p>
<p style="margin-left:17%;">Always returns
<b>ARCHIVE_FATAL</b>. This marks the archive object as being
unusable; after calling this function, the only call that
can succeed is <b>archive_write_free</b>() to release the
resources. This can be used to speed recovery when the
archive creation must be aborted. Note that the created
archive is likely to be malformed in this case;</p>
<p style="margin-top: 1em"><b>archive_write_close</b>()</p>
<p style="margin-left:17%;">Complete the archive and invoke
the close callback.</p>
<p style="margin-top: 1em"><b>archive_write_finish</b>()</p>
<p style="margin-left:17%;">This is a deprecated synonym
for <b>archive_write_free</b>().</p>
<p style="margin-top: 1em"><b>archive_write_free</b>()</p>
<p style="margin-left:17%;">Invokes
<b>archive_write_close</b>() if necessary, then releases all
resources. If you need detailed information about
<b>archive_write_close</b>() failures, you should be careful
to call it separately, as you cannot obtain error
information after <b>archive_write_free</b>() returns.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,80 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_HEADER(3) BSD Library Functions Manual
ARCHIVE_WRITE_HEADER(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_header</b>
&mdash; functions for creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_header</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>struct&nbsp;archive_entry&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Build and write a header using
the data in the provided struct archive_entry structure. See
archive_entry(3) for information on creating and populating
struct archive_entry objects.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">This function returns
<b>ARCHIVE_OK</b> on success, or one of the following on
error: <b>ARCHIVE_RETRY</b> for operations that might
succeed if retried, <b>ARCHIVE_WARN</b> for unusual
conditions that do not prevent further operations, and
<b>ARCHIVE_FATAL</b> for serious errors that make remaining
operations impossible.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,67 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_NEW(3) BSD Library Functions Manual
ARCHIVE_WRITE_NEW(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_new</b> &mdash;
functions for creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>struct
archive *</i></p>
<p style="margin-left:12%;"><b>archive_write_new</b>(<i>void</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Allocates and initializes a
struct archive object suitable for writing a tar archive.
NULL is returned on error.</p>
<p style="margin-left:6%; margin-top: 1em">A complete
description of the struct archive object can be found in the
overview manual page for libarchive(3).</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_write(3),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
February&nbsp;2, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,269 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:23 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_OPEN(3) BSD Library Functions Manual
ARCHIVE_WRITE_OPEN(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_open</b>,
<b>archive_write_open2</b>, <b>archive_write_open_fd</b>,
<b>archive_write_open_FILE</b>,
<b>archive_write_open_filename</b>,
<b>archive_write_open_memory</b> &mdash; functions for
creating archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_open</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>archive_open_callback&nbsp;*</i>,
<i>archive_write_callback&nbsp;*</i>,
<i>archive_close_callback&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_open2</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>archive_open_callback&nbsp;*</i>,
<i>archive_write_callback&nbsp;*</i>,
<i>archive_close_callback&nbsp;*</i>,
<i>archive_free_callback&nbsp;*</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_open_fd</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>int&nbsp;fd</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_open_FILE</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>FILE&nbsp;*file</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p style="margin-left:12%;"><b>archive_write_open_filename</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*filename</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_open_memory</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*buffer</i>, <i>size_t&nbsp;bufferSize</i>,
<i>size_t&nbsp;*outUsed</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_write_open</b>()</p>
<p style="margin-left:17%;">Freeze the settings, open the
archive, and prepare for writing entries. This is the most
generic form of this function, which accepts pointers to
three callback functions which will be invoked by the
compression layer to write the constructed archive. This
does not alter the default archive padding.</p>
<p style="margin-top: 1em"><b>archive_write_open2</b>()</p>
<p style="margin-left:17%;">Same as
<b>archive_write_open</b>() with an additional fourth free
callback. This function should be preferred to
<b>archive_write_open</b>().</p>
<p style="margin-top: 1em"><b>archive_write_open_fd</b>()</p>
<p style="margin-left:17%;">A convenience form of
<b>archive_write_open</b>() that accepts a file descriptor.
The <b>archive_write_open_fd</b>() function is safe for use
with tape drives or other block-oriented devices.</p>
<p style="margin-top: 1em"><b>archive_write_open_FILE</b>()</p>
<p style="margin-left:17%;">A convenience form of
<b>archive_write_open</b>() that accepts a <i>FILE *</i>
pointer. Note that <b>archive_write_open_FILE</b>() is not
safe for writing to tape drives or other devices that
require correct blocking.</p>
<p style="margin-top: 1em"><b>archive_write_open_file</b>()</p>
<p style="margin-left:17%;">A deprecated synonym for
<b>archive_write_open_filename</b>().</p>
<p style="margin-top: 1em"><b>archive_write_open_filename</b>()</p>
<p style="margin-left:17%;">A convenience form of
<b>archive_write_open</b>() that accepts a filename. A NULL
argument indicates that the output should be written to
standard output; an argument of &ldquo;-&rdquo; will open a
file with that name. If you have not invoked
<b>archive_write_set_bytes_in_last_block</b>(), then
<b>archive_write_open_filename</b>() will adjust the
last-block padding depending on the file: it will enable
padding when writing to standard output or to a character or
block device node, it will disable padding otherwise. You
can override this by manually invoking
<b>archive_write_set_bytes_in_last_block</b>() before
calling <b>archive_write_open2</b>(). The
<b>archive_write_open_filename</b>() function is safe for
use with tape drives or other block-oriented devices.</p>
<p style="margin-top: 1em"><b>archive_write_open_memory</b>()</p>
<p style="margin-left:17%;">A convenience form of
<b>archive_write_open2</b>() that accepts a pointer to a
block of memory that will receive the archive. The final
<i>size_t *</i> argument points to a variable that will be
updated after each write to reflect how much of the buffer
is currently in use. You should be careful to ensure that
this variable remains allocated until after the archive is
closed. This function will disable padding unless you have
specifically set the block size.</p>
<p style="margin-left:6%;">More information about the
<i>struct archive</i> object and the overall design of the
library can be found in the libarchive(3) overview.</p>
<p style="margin-left:6%; margin-top: 1em">Note that the
convenience forms above vary in how they block the output.
See archive_write_blocksize(3) if you need to control the
block size used for writes or the end-of-file padding
behavior.</p>
<p style="margin-top: 1em"><b>CLIENT CALLBACKS</b></p>
<p style="margin-left:6%;">To use this library, you will
need to define and register callback functions that will be
invoked to write data to the resulting archive. These
functions are registered by calling
<b>archive_write_open2</b>():</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
int</i> <b>archive_open_callback</b>(<i>struct archive
*</i>, <i>void *client_data</i>)</p>
<p style="margin-left:6%; margin-top: 1em">The open
callback is invoked by <b>archive_write_open</b>(). It
should return <b>ARCHIVE_OK</b> if the underlying file or
data source is successfully opened. If the open fails, it
should call <b>archive_set_error</b>() to register an error
code and message and return <b>ARCHIVE_FATAL</b>. Please
note that if open fails, close is not called and resources
must be freed inside the open callback or with the free
callback.</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
la_ssize_t</i></p>
<p><b>archive_write_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>const&nbsp;void&nbsp;*buffer</i>,
<i>size_t&nbsp;length</i>)</p>
<p style="margin-left:6%; margin-top: 1em">The write
callback is invoked whenever the library needs to write raw
bytes to the archive. For correct blocking, each call to the
write callback function should translate into a single
write(2) system call. This is especially critical when
writing archives to tape drives. On success, the write
callback should return the number of bytes actually written.
On error, the callback should invoke
<b>archive_set_error</b>() to register an error code and
message and return -1.</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
int</i> <b>archive_close_callback</b>(<i>struct archive
*</i>, <i>void *client_data</i>)</p>
<p style="margin-left:6%; margin-top: 1em">The close
callback is invoked by archive_close when the archive
processing is complete. If the open callback fails, the
close callback is not invoked. The callback should return
<b>ARCHIVE_OK</b> on success. On failure, the callback
should invoke <b>archive_set_error</b>() to register an
error code and message and return <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-left:14%; margin-top: 1em"><i>typedef
int</i> <b>archive_free_callback</b>(<i>struct archive
*</i>, <i>void *client_data</i>)</p>
<p style="margin-left:6%; margin-top: 1em">The free
callback is always invoked on archive_free. The return code
of this callback is not processed.</p>
<p style="margin-left:6%; margin-top: 1em">Note that if the
client-provided write callback function returns a non-zero
value, that error will be propagated back to the caller
through whatever API function resulted in that call, which
may include <b>archive_write_header</b>(),
<b>archive_write_data</b>(), <b>archive_write_close</b>(),
<b>archive_write_finish</b>(), or
<b>archive_write_free</b>(). The client callback can call
<b>archive_set_error</b>() to provide values that can then
be retrieved by <b>archive_errno</b>() and
<b>archive_error_string</b>().</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">These functions return
<b>ARCHIVE_OK</b> on success, or <b>ARCHIVE_FATAL</b>.</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">Detailed error codes and textual
descriptions are available from the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_write(3),
archive_write_blocksize(3), archive_write_filter(3),
archive_write_format(3), archive_write_new(3),
archive_write_set_options(3), libarchive(3), cpio(5),
mtree(5), tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
November&nbsp;12, 2020 BSD</p>
<hr>
</body>
</html>

View file

@ -1,824 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_OPTIONS(3) BSD Library Functions Manual
ARCHIVE_WRITE_OPTIONS(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_set_filter_option</b>,
<b>archive_write_set_format_option</b>,
<b>archive_write_set_option</b>,
<b>archive_write_set_options</b> &mdash; functions
controlling options for writing archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><i>int</i></p>
<p><b>archive_write_set_filter_option</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*module</i>,
<i>const&nbsp;char&nbsp;*option</i>,
<i>const&nbsp;char&nbsp;*value</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_set_format_option</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*module</i>,
<i>const&nbsp;char&nbsp;*option</i>,
<i>const&nbsp;char&nbsp;*value</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_set_option</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*module</i>,
<i>const&nbsp;char&nbsp;*option</i>,
<i>const&nbsp;char&nbsp;*value</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_set_options</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*options</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">These functions provide a way
for libarchive clients to configure specific write
modules.</p>
<p style="margin-top: 1em"><b>archive_write_set_filter_option</b>(),
<b>archive_write_set_format_option</b>()</p>
<p style="margin-left:17%;">Specifies an option that will
be passed to the currently-registered filters (including
decompression filters) or format readers.</p>
<p style="margin-left:17%; margin-top: 1em">If
<i>option</i> and <i>value</i> are both NULL, these
functions will do nothing and <b>ARCHIVE_OK</b> will be
returned. If <i>option</i> is NULL but <i>value</i> is not,
these functions will do nothing and <b>ARCHIVE_FAILED</b>
will be returned.</p>
<p style="margin-left:17%; margin-top: 1em">If
<i>module</i> is not NULL, <i>option</i> and <i>value</i>
will be provided to the filter or reader named
<i>module</i>. The return value will be either
<b>ARCHIVE_OK</b> if the option was successfully handled or
<b>ARCHIVE_WARN</b> if the option was unrecognized by the
module or could otherwise not be handled. If there is no
such module, <b>ARCHIVE_FAILED</b> will be returned.</p>
<p style="margin-left:17%; margin-top: 1em">If
<i>module</i> is NULL, <i>option</i> and <i>value</i> will
be provided to every registered module. If any module
returns <b>ARCHIVE_FATAL</b>, this value will be returned
immediately. Otherwise, <b>ARCHIVE_OK</b> will be returned
if any module accepts the option, and <b>ARCHIVE_FAILED</b>
in all other cases.</p>
<p style="margin-top: 1em"><b>archive_write_set_option</b>()</p>
<p style="margin-left:17%;">Calls
<b>archive_write_set_format_option</b>(), then
<b>archive_write_set_filter_option</b>(). If either function
returns <b>ARCHIVE_FATAL</b>, <b>ARCHIVE_FATAL</b> will be
returned immediately. Otherwise, the greater of the two
values will be returned.</p>
<p style="margin-top: 1em"><b>archive_write_set_options</b>()</p>
<p style="margin-left:17%;"><i>options</i> is a
comma-separated list of options. If <i>options</i> is NULL
or empty, <b>ARCHIVE_OK</b> will be returned
immediately.</p>
<p style="margin-left:17%; margin-top: 1em">Individual
options have one of the following forms:</p>
<p><i>option=value</i></p>
<p style="margin-left:27%;">The option/value pair will be
provided to every module. Modules that do not accept an
option with this name will ignore it.</p>
<p><i>option</i></p>
<p style="margin-left:27%; margin-top: 1em">The option will
be provided to every module with a value of
&ldquo;1&rdquo;.</p>
<p><i>!option</i></p>
<p style="margin-left:27%;">The option will be provided to
every module with a NULL value.</p>
<p><i>module:option=value</i>, <i>module:option</i>,
<i>module:!option</i></p>
<p style="margin-left:27%;">As above, but the corresponding
option and value will be provided only to modules whose name
matches <i>module</i>.</p>
<p style="margin-top: 1em"><b>OPTIONS</b> <br>
Filter b64encode <b><br>
mode</b></p>
<p style="margin-left:27%; margin-top: 1em">The value is
interpreted as octal digits specifying the file mode.</p>
<p><b>name</b></p>
<p style="margin-left:27%; margin-top: 1em">The value
specifies the file name.</p>
<p>Filter bzip2 <b><br>
compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the bzip2 compression level.
Supported values are from 1 to 9.</p>
<p>Filter gzip <b><br>
compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the gzip compression level.
Supported values are from 0 to 9.</p>
<p><b>timestamp</b></p>
<p style="margin-left:27%;">Store timestamp. This is
enabled by default.</p>
<p>Filter lrzip <b><br>
compression</b>=<i>type</i></p>
<p style="margin-left:27%;">Use <i>type</i> as compression
method. Supported values are &ldquo;bzip2&rdquo;,
&ldquo;gzipi&rdquo;, &ldquo;lzo&rdquo; (ultra fast), and
&ldquo;zpaq&rdquo; (best, extremely slow).</p>
<p><b>compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the lrzip compression level.
Supported values are from 1 to 9.</p>
<p>Filter lz4 <b><br>
compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the lz4 compression level.
Supported values are from 0 to 9.</p>
<p><b>stream-checksum</b></p>
<p style="margin-left:27%;">Enable stream checksum. This is
enabled by default.</p>
<p><b>block-checksum</b></p>
<p style="margin-left:27%;">Enable block checksum. This is
disabled by default.</p>
<p><b>block-size</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the lz4 compression block size.
Supported values are from 4 to 7 (default).</p>
<p><b>block-dependence</b></p>
<p style="margin-left:27%;">Use the previous block of the
block being compressed for a compression dictionary to
improve compression ratio. This is disabled by default.</p>
<p>Filter lzop <b><br>
compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the lzop compression level.
Supported values are from 1 to 9.</p>
<p>Filter uuencode <b><br>
mode</b></p>
<p style="margin-left:27%; margin-top: 1em">The value is
interpreted as octal digits specifying the file mode.</p>
<p><b>name</b></p>
<p style="margin-left:27%; margin-top: 1em">The value
specifies the file name.</p>
<p>Filter xz <b><br>
compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the compression level. Supported
values are from 0 to 9.</p>
<p><b>threads</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the number of threads for
multi-threaded lzma compression. If supported, the default
value is read from <b>lzma_cputhreads</b>().</p>
<p>Filter zstd <b><br>
compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the compression level. Supported
values depend on the library version, common values are from
1 to 22.</p>
<p>Format 7zip <b><br>
compression</b></p>
<p style="margin-left:27%;">The value is one of
&ldquo;store&rdquo;, &ldquo;deflate&rdquo;,
&ldquo;bzip2&rdquo;, &ldquo;lzma1&rdquo;,
&ldquo;lzma2&rdquo; or &ldquo;ppmd&rdquo; to indicate how
the following entries should be compressed. Note that this
setting is ignored for directories, symbolic links, and
other special entries.</p>
<p><b>compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the compression level. Values
between 0 and 9 are supported. The interpretation of the
compression level depends on the chosen compression
method.</p>
<p>Format bin <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format gnutar <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file,
group and user names.</p>
<p>Format iso9660 - volume metadata</p>
<p style="margin-left:17%;">These options are used to set
standard ISO9660 metadata.</p>
<p><b>abstract-file</b>=<i>filename</i></p>
<p style="margin-left:27%;">The file with the specified
name will be identified in the ISO9660 metadata as holding
the abstract for this volume. Default: none.</p>
<p><b>application-id</b>=<i>filename</i></p>
<p style="margin-left:27%;">The file with the specified
name will be identified in the ISO9660 metadata as holding
the application identifier for this volume. Default:
none.</p>
<p><b>biblio-file</b>=<i>filename</i></p>
<p style="margin-left:27%;">The file with the specified
name will be identified in the ISO9660 metadata as holding
the bibliography for this volume. Default: none.</p>
<p><b>copyright-file</b>=<i>filename</i></p>
<p style="margin-left:27%;">The file with the specified
name will be identified in the ISO9660 metadata as holding
the copyright for this volume. Default: none.</p>
<p><b>publisher</b>=<i>filename</i></p>
<p style="margin-left:27%;">The file with the specified
name will be identified in the ISO9660 metadata as holding
the publisher information for this volume. Default:
none.</p>
<p><b>volume-id</b>=<i>string</i></p>
<p style="margin-left:27%;">The specified string will be
used as the Volume Identifier in the ISO9660 metadata. It is
limited to 32 bytes. Default: none.</p>
<p>Format iso9660 - boot support</p>
<p style="margin-left:17%;">These options are used to make
an ISO9660 image that can be directly booted on various
systems.</p>
<p><b>boot</b>=<i>filename</i></p>
<p style="margin-left:27%;">The file matching this name
will be used as the El Torito boot image file.</p>
<p><b>boot-catalog</b>=<i>name</i></p>
<p style="margin-left:27%;">The name that will be used for
the El Torito boot catalog. Default: <i>boot.catalog</i></p>
<p><b>boot-info-table</b></p>
<p style="margin-left:27%;">The boot image file provided by
the <b>boot</b>=<i>filename</i> option will be edited with
appropriate boot information in bytes 8 through 64. Default:
disabled</p>
<p><b>boot-load-seg</b>=<i>hexadecimal-number</i></p>
<p style="margin-left:27%;">The load segment for a
no-emulation boot image.</p>
<p><b>boot-load-size</b>=<i>decimal-number</i></p>
<p style="margin-left:27%;">The number of
&quot;virtual&quot; 512-byte sectors to be loaded from a
no-emulation boot image. Some very old BIOSes can only load
very small images, setting this value to 4 will often allow
such BIOSes to load the first part of the boot image (which
will then need to be intelligent enough to load the rest of
itself). This should not be needed unless you are trying to
support systems with very old BIOSes. This defaults to the
full size of the image.</p>
<p><b>boot-type</b>=<i>value</i></p>
<p style="margin-left:27%;">Specifies the boot semantics
used by the El Torito boot image: If the <i>value</i> is
<b>fd</b>, then the boot image is assumed to be a bootable
floppy image. If the <i>value</i> is <b>hd</b>, then the
boot image is assumed to be a bootable hard disk image. If
the <i>value</i> is <b>no-emulation</b>, the boot image is
used without floppy or hard disk emulation. If the boot
image is exactly 1.2MB, 1.44MB, or 2.88MB, then the default
is <b>fd</b>, otherwise the default is
<b>no-emulation</b>.</p>
<p>Format iso9660 - filename and size extensions</p>
<p style="margin-left:17%;">Various extensions to the base
ISO9660 format.</p>
<p><b>allow-ldots</b></p>
<p style="margin-left:27%;">If enabled, allows filenames to
begin with a leading period. If disabled, filenames that
begin with a leading period will have that period replaced
by an underscore character in the standard ISO9660
namespace. This does not impact names stored in the
Rockridge or Joliet extension area. Default: disabled.</p>
<p><b>allow-lowercase</b></p>
<p style="margin-left:27%;">If enabled, allows filenames to
contain lowercase characters. If disabled, filenames will be
forced to uppercase. This does not impact names stored in
the Rockridge or Joliet extension area. Default:
disabled.</p>
<p><b>allow-multidot</b></p>
<p style="margin-left:27%;">If enabled, allows filenames to
contain multiple period characters, in violation of the
ISO9660 specification. If disabled, additional periods will
be converted to underscore characters. This does not impact
names stored in the Rockridge or Joliet extension area.
Default: disabled.</p>
<p><b>allow-period</b></p>
<p style="margin-left:27%;">If enabled, allows filenames to
contain trailing period characters, in violation of the
ISO9660 specification. If disabled, trailing periods will be
converted to underscore characters. This does not impact
names stored in the Rockridge or Joliet extension area.
Default: disabled.</p>
<p><b>allow-pvd-lowercase</b></p>
<p style="margin-left:27%;">If enabled, the Primary Volume
Descriptor may contain lowercase ASCII characters, in
violation of the ISO9660 specification. If disabled,
characters will be converted to uppercase ASCII. Default:
disabled.</p>
<p><b>allow-sharp-tilde</b></p>
<p style="margin-left:27%;">If enabled, sharp and tilde
characters will be permitted in filenames, in violation if
the ISO9660 specification. If disabled, such characters will
be converted to underscore characters. Default:
disabled.</p>
<p><b>allow-vernum</b></p>
<p style="margin-left:27%;">If enabled, version numbers
will be included with files. If disabled, version numbers
will be suppressed, in violation of the ISO9660 standard.
This does not impact names stored in the Rockridge or Joliet
extension area. Default: enabled.</p>
<p><b>iso-level</b></p>
<p style="margin-left:27%;">This enables support for file
size and file name extensions in the core ISO9660 area. The
name extensions specified here do not affect the names
stored in the Rockridge or Joliet extension areas.</p>
<p><b>iso-level=1</b></p>
<p style="margin-left:37%;">The most compliant form of
ISO9660 image. Filenames are limited to 8.3 uppercase
format, directory names are limited to 8 uppercase
characters, files are limited to 4 GiB, the complete ISO9660
image cannot exceed 4 GiB.</p>
<p><b>iso-level=2</b></p>
<p style="margin-left:37%;">Filenames are limited to 30
uppercase characters with a 30-character extension,
directory names are limited to 30 characters, files are
limited to 4 GiB.</p>
<p><b>iso-level=3</b></p>
<p style="margin-left:37%;">As with <b>iso-level=2</b>,
except that files may exceed 4 GiB.</p>
<p><b>iso-level=4</b></p>
<p style="margin-left:37%;">As with <b>iso-level=3</b>,
except that filenames may be up to 193 characters and may
include arbitrary 8-bit characters.</p>
<p><b>joliet</b></p>
<p style="margin-left:27%; margin-top: 1em">Microsoft&rsquo;s
Joliet extensions store a completely separate set of
directory information about each file. In particular, this
information includes Unicode filenames of up to 255
characters. Default: enabled.</p>
<p><b>limit-depth</b></p>
<p style="margin-left:27%;">If enabled, libarchive will use
directory relocation records to ensure that no pathname
exceeds the ISO9660 limit of 8 directory levels. If
disabled, no relocation will occur. Default: enabled.</p>
<p><b>limit-dirs</b></p>
<p style="margin-left:27%;">If enabled, libarchive will
cause an error if there are more than 65536 directories. If
disabled, there is no limit on the number of directories.
Default: enabled</p>
<p><b>pad</b></p>
<p style="margin-left:27%; margin-top: 1em">If enabled, 300
kiB of zero bytes will be appended to the end of the
archive. Default: enabled</p>
<p><b>relaxed-filenames</b></p>
<p style="margin-left:27%;">If enabled, all 7-bit ASCII
characters are permitted in filenames (except lowercase
characters unless <b>allow-lowercase</b> is also specified).
This violates ISO9660 standards. This does not impact names
stored in the Rockridge or Joliet extension area. Default:
disabled.</p>
<p><b>rockridge</b></p>
<p style="margin-left:27%;">The Rockridge extensions store
an additional set of POSIX-style file information with each
file, including mtime, atime, ctime, permissions, and long
filenames with arbitrary 8-bit characters. These extensions
also support symbolic links and other POSIX file types.
Default: enabled.</p>
<p>Format iso9660 - zisofs support</p>
<p style="margin-left:17%;">The zisofs extensions permit
each file to be independently compressed using a
gzip-compatible compression. This can provide significant
size savings, but requires the reading system to have
support for these extensions. These extensions are disabled
by default.</p>
<p><b>compression-level</b>=number</p>
<p style="margin-left:27%;">The compression level used by
the deflate compressor. Ranges from 0 (least effort) to 9
(most effort). Default: 6</p>
<p><b>zisofs</b></p>
<p style="margin-left:27%; margin-top: 1em">Synonym for
<b>zisofs=direct</b>.</p>
<p><b>zisofs=direct</b></p>
<p style="margin-left:27%;">Compress each file in the
archive. Unlike <b>zisofs=indirect</b>, this is handled
entirely within libarchive and does not require a separate
utility. For best results, libarchive tests each file and
will store the file uncompressed if the compression does not
actually save any space. In particular, files under 2k will
never be compressed. Note that boot image files are never
compressed.</p>
<p><b>zisofs=indirect</b></p>
<p style="margin-left:27%;">Recognizes files that have
already been compressed with the <b>mkzftree</b> utility and
sets up the necessary file metadata so that readers will
correctly identify these as zisofs-compressed files.</p>
<p><b>zisofs-exclude</b>=<i>filename</i></p>
<p style="margin-left:27%;">Specifies a filename that
should not be compressed when using <b>zisofs=direct</b>.
This option can be provided multiple times to suppress
compression on many files.</p>
<p>Format mtree <b><br>
cksum</b>, <b>device</b>, <b>flags</b>, <b>gid</b>,
<b>gname</b>, <b>indent</b>, <b>link</b>, <b>md5</b>,
<b>mode</b>, <b>nlink</b>, <b>rmd160</b>, <b>sha1</b>,
<b>sha256</b>, <b>sha384</b>, <b>sha512</b>, <b>size</b>,
<b>time</b>, <b>uid</b>, <b>uname</b></p>
<p style="margin-left:27%;">Enable a particular keyword in
the mtree output. Prefix with an exclamation mark to disable
the corresponding keyword. The default is equivalent to
&ldquo;device, flags, gid, gname, link, mode, nlink, size,
time, type, uid, uname&rdquo;.</p>
<p><b>all</b></p>
<p style="margin-left:27%; margin-top: 1em">Enables all of
the above keywords.</p>
<p><b>use-set</b></p>
<p style="margin-left:27%;">Enables generation of
<b>/set</b> lines that specify default values for the
following files and/or directories.</p>
<p><b>indent</b></p>
<p style="margin-left:27%; margin-top: 1em">XXX needs
explanation XXX</p>
<p>Format newc <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format odc <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format pwb <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p>Format pax <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file,
group and user names. The value is one of
&ldquo;BINARY&rdquo; or &ldquo;UTF-8&rdquo;. With
&ldquo;BINARY&rdquo; there is no character conversion, with
&ldquo;UTF-8&rdquo; names are converted to UTF-8.</p>
<p><b>xattrheader</b></p>
<p style="margin-left:27%;">When storing extended
attributes, this option configures which headers should be
written. The value is one of &ldquo;all&rdquo;,
&ldquo;LIBARCHIVE&rdquo;, or &ldquo;SCHILY&rdquo;. By
default, both &ldquo;LIBARCHIVE.xattr&rdquo; and
&ldquo;SCHILY.xattr&rdquo; headers are written.</p>
<p>Format ustar <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file,
group and user names.</p>
<p>Format v7tar <b><br>
hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file,
group and user names.</p>
<p>Format warc <b><br>
omit-warcinfo</b></p>
<p style="margin-left:27%;">Set to &ldquo;true&rdquo; to
disable output of the warcinfo record.</p>
<p>Format xar <b><br>
checksum</b>=<i>type</i></p>
<p style="margin-left:27%;">Use <i>type</i> as file
checksum method. Supported values are &ldquo;none&rdquo;,
&ldquo;md5&rdquo;, and &ldquo;sha1&rdquo; (default).</p>
<p><b>compression</b>=<i>type</i></p>
<p style="margin-left:27%;">Use <i>type</i> as compression
method. Supported values are &ldquo;none&rdquo;,
&ldquo;bzip2&rdquo;, &ldquo;gzip&rdquo; (default),
&ldquo;lzma&rdquo; and &ldquo;xz&rdquo;.</p>
<p><b>compression_level</b></p>
<p style="margin-left:27%;">The value is a decimal integer
from 1 to 9 specifying the compression level.</p>
<p><b>toc-checksum</b>=<i>type</i></p>
<p style="margin-left:27%;">Use <i>type</i> as table of
contents checksum method. Supported values are
&ldquo;none&rdquo;, &ldquo;md5&rdquo; and &ldquo;sha1&rdquo;
(default).</p>
<p>Format zip <b><br>
compression</b></p>
<p style="margin-left:27%;">The value is either
&ldquo;store&rdquo; or &ldquo;deflate&rdquo; to indicate how
the following entries should be compressed. Note that this
setting is ignored for directories, symbolic links, and
other special entries.</p>
<p><b>compression-level</b></p>
<p style="margin-left:27%;">The value is interpreted as a
decimal integer specifying the compression level. Values
between 0 and 9 are supported. A compression level of 0
switches the compression method to &ldquo;store&rdquo;,
other values will enable &ldquo;deflate&rdquo; compression
with the given level.</p>
<p><b>encryption</b></p>
<p style="margin-left:27%;">Enable encryption using
traditional zip encryption.</p>
<p><b>encryption</b>=<i>type</i></p>
<p style="margin-left:27%;">Use <i>type</i> as encryption
type. Supported values are &ldquo;zipcrypt&rdquo;
(traditional zip encryption), &ldquo;aes128&rdquo; (WinZip
AES-128 encryption) and &ldquo;aes256&rdquo; (WinZip AES-256
encryption).</p>
<p><b>experimental</b></p>
<p style="margin-left:27%;">This boolean option enables or
disables experimental Zip features that may not be
compatible with other Zip implementations.</p>
<p><b>fakecrc32</b></p>
<p style="margin-left:27%;">This boolean option disables
CRC calculations. All CRC fields are set to zero. It should
not be used except for testing purposes.</p>
<p><b>hdrcharset</b></p>
<p style="margin-left:27%;">The value is used as a
character set name that will be used when translating file
names.</p>
<p><b>zip64</b></p>
<p style="margin-left:27%; margin-top: 1em">Zip64
extensions provide additional file size information for
entries larger than 4 GiB. They also provide extended file
offset and archive size information when archives exceed 4
GiB. By default, the Zip writer selectively enables these
extensions only as needed. In particular, if the file size
is unknown, the Zip writer will include Zip64 extensions to
guard against the possibility that the file might be larger
than 4 GiB.</p>
<p style="margin-left:27%; margin-top: 1em">Setting this
boolean option will force the writer to use Zip64 extensions
even for small files that would not otherwise require them.
This is primarily useful for testing.</p>
<p style="margin-left:27%; margin-top: 1em">Disabling this
option with <b>!zip64</b> will force the Zip writer to avoid
Zip64 extensions: It will reject files with size greater
than 4 GiB, it will reject any new entries once the total
archive size reaches 4 GiB, and it will not use Zip64
extensions for files with unknown size. In particular, this
can improve compatibility when generating archives where the
entry sizes are not known in advance.</p>
<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The following example creates an
archive write handle to create a gzip-compressed ISO9660
format image. The two options here specify that the ISO9660
archive will use <i>kernel.img</i> as the boot image for El
Torito booting, and that the gzip compressor should use the
maximum compression level.</p>
<p style="margin-left:14%; margin-top: 1em">a =
archive_write_new(); <br>
archive_write_add_filter_gzip(a); <br>
archive_write_set_format_iso9660(a); <br>
archive_write_set_options(a,
&quot;boot=kernel.img,compression=9&quot;); <br>
archive_write_open_filename(a, filename, blocksize);</p>
<p style="margin-top: 1em"><b>ERRORS</b></p>
<p style="margin-left:6%;">More detailed error codes and
textual descriptions are available from the
<b>archive_errno</b>() and <b>archive_error_string</b>()
functions.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1),
archive_read_set_options(3), archive_write(3),
libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The options support for
libarchive was originally implemented by Michihiro
NAKAJIMA.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">BSD January&nbsp;31, 2020
BSD</p>
<hr>
</body>
</html>

View file

@ -1,82 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>ARCHIVE_WRITE_SET_PAS... BSD Library Functions Manual
ARCHIVE_WRITE_SET_PAS...</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>archive_write_set_passphrase</b>,
<b>archive_write_set_passphrase_callback</b> &mdash;
functions for writing encrypted archives</p>
<p style="margin-top: 1em"><b>LIBRARY</b></p>
<p style="margin-left:6%;">Streaming Archive Library
(libarchive, -larchive)</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:6%;"><b>#include
&lt;archive.h&gt;</b></p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_set_passphrase</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>const&nbsp;char&nbsp;*passphrase</i>);</p>
<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
<p><b>archive_write_set_passphrase_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
<i>void&nbsp;*client_data</i>,
<i>archive_passphrase_callback&nbsp;*</i>);</p>
<p style="margin-top: 1em"><b>DESCRIPTION <br>
archive_write_set_passphrase</b>()</p>
<p style="margin-left:17%;">Set a passphrase for writing an
encrypted archive. If <i>passphrase</i> is NULL or empty,
this function will do nothing and <b>ARCHIVE_FAILED</b> will
be returned. Otherwise, <b>ARCHIVE_OK</b> will be
returned.</p>
<p style="margin-top: 1em"><b>archive_write_set_passphrase_callback</b>()</p>
<p style="margin-left:17%;">Register a callback function
that will be invoked to get a passphrase for encryption if
the passphrase was not set by the
<b>archive_write_set_passphrase</b>() function.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_write(3),
archive_write_set_options(3), libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
September&nbsp;21, 2014 BSD</p>
<hr>
</body>
</html>

View file

@ -1,521 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:25 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>CPIO(1) BSD General Commands Manual CPIO(1)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>cpio</b> &mdash; copy files
to and from archives</p>
<p style="margin-top: 1em"><b>SYNOPSIS</b></p>
<p style="margin-left:13%;"><b>cpio -i</b> [<i>options</i>]
[<i>pattern&nbsp;...</i>] [<i>&lt;&nbsp;archive</i>] <b><br>
cpio -o</b> [<i>options</i>] <i>&lt; name-list</i>
[<i>&gt;&nbsp;archive</i>] <b><br>
cpio -p</b> [<i>options</i>] <i>dest-dir &lt;
name-list</i></p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;"><b>cpio</b> copies files between
archives and directories. This implementation can extract
from tar, pax, cpio, zip, jar, ar, and ISO 9660 cdrom images
and can create tar, pax, cpio, ar, and shar archives.</p>
<p style="margin-left:6%; margin-top: 1em">The first option
to <b>cpio</b> is a mode indicator from the following
list:</p>
<p><b>-i</b></p>
<p style="margin-left:17%; margin-top: 1em">Input. Read an
archive from standard input (unless overridden) and extract
the contents to disk or (if the <b>-t</b> option is
specified) list the contents to standard output. If one or
more file patterns are specified, only files matching one of
the patterns will be extracted.</p>
<p><b>-o</b></p>
<p style="margin-left:17%; margin-top: 1em">Output. Read a
list of filenames from standard input and produce a new
archive on standard output (unless overridden) containing
the specified items.</p>
<p><b>-p</b></p>
<p style="margin-left:17%; margin-top: 1em">Pass-through.
Read a list of filenames from standard input and copy the
files to the specified directory.</p>
<p style="margin-top: 1em"><b>OPTIONS</b></p>
<p style="margin-left:6%;">Unless specifically stated
otherwise, options are applicable in all operating
modes.</p>
<p style="margin-top: 1em"><b>-0</b>, <b>--null</b></p>
<p style="margin-left:17%;">Read filenames separated by NUL
characters instead of newlines. This is necessary if any of
the filenames being read might contain newlines.</p>
<p style="margin-top: 1em"><b>-6</b>, <b>--pwb</b></p>
<p style="margin-left:17%;">When reading a binary format
archive, assume it&rsquo;s the earlier one, from the PWB
variant of 6th Edition UNIX. When writing a cpio archive,
use the PWB format.</p>
<p style="margin-top: 1em"><b>-7</b>, <b>--binary</b></p>
<p style="margin-left:17%;">(o mode only) When writing a
cpio archive, use the (newer, non-PWB) binary format.</p>
<p style="margin-top: 1em"><b>-A</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Append to the specified archive. (Not yet implemented.)</p>
<p style="margin-top: 1em"><b>-a</b></p>
<p style="margin-left:17%; margin-top: 1em">(o and p modes)
Reset access times on files after they are read.</p>
<p style="margin-top: 1em"><b>-B</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Block output to records of 5120 bytes.</p>
<p style="margin-top: 1em"><b>-C</b> <i>size</i></p>
<p style="margin-left:17%;">(o mode only) Block output to
records of <i>size</i> bytes.</p>
<p style="margin-top: 1em"><b>-c</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Use the old POSIX portable character format. Equivalent to
<b>--format</b> <i>odc</i>.</p>
<p style="margin-top: 1em"><b>-d</b>,
<b>--make-directories</b></p>
<p style="margin-left:17%;">(i and p modes) Create
directories as necessary.</p>
<p style="margin-top: 1em"><b>-E</b> <i>file</i></p>
<p style="margin-left:17%;">(i mode only) Read list of file
name patterns from <i>file</i> to list and extract.</p>
<p style="margin-top: 1em"><b>-F</b> <i>file</i>,
<b>--file</b> <i>file</i></p>
<p style="margin-left:17%;">Read archive from or write
archive to <i>file</i>.</p>
<p style="margin-top: 1em"><b>-f</b> <i>pattern</i></p>
<p style="margin-left:17%;">(i mode only) Ignore files that
match <i>pattern</i>.</p>
<p style="margin-top: 1em"><b>-H</b> <i>format</i>,
<b>--format</b> <i>format</i></p>
<p style="margin-left:17%;">(o mode only) Produce the
output archive in the specified format. Supported formats
include:</p>
<p style="margin-top: 1em"><i>cpio</i></p>
<p style="margin-left:28%; margin-top: 1em">Synonym for
<i>odc</i>.</p>
<p><i>newc</i></p>
<p style="margin-left:28%; margin-top: 1em">The SVR4
portable cpio format.</p>
<p><i>odc</i></p>
<p style="margin-left:28%; margin-top: 1em">The old POSIX.1
portable octet-oriented cpio format.</p>
<p><i>pax</i></p>
<p style="margin-left:28%; margin-top: 1em">The POSIX.1 pax
format, an extension of the ustar format.</p>
<p><i>ustar</i></p>
<p style="margin-left:28%; margin-top: 1em">The POSIX.1 tar
format.</p>
<p style="margin-left:17%; margin-top: 1em">The default
format is <i>odc</i>. See libarchive-formats(5) for more
complete information about the formats currently supported
by the underlying libarchive(3) library.</p>
<p style="margin-top: 1em"><b>-h</b>, <b>--help</b></p>
<p style="margin-left:17%;">Print usage information.</p>
<p style="margin-top: 1em"><b>-I</b> <i>file</i></p>
<p style="margin-left:17%;">Read archive from
<i>file</i>.</p>
<p style="margin-top: 1em"><b>-i</b>, <b>--extract</b></p>
<p style="margin-left:17%;">Input mode. See above for
description.</p>
<p style="margin-top: 1em"><b>--insecure</b></p>
<p style="margin-left:17%;">(i and p mode only) Disable
security checks during extraction or copying. This allows
extraction via symbolic links, absolute paths, and path
names containing &rsquo;..&rsquo; in the name.</p>
<p style="margin-top: 1em"><b>-J</b>, <b>--xz</b></p>
<p style="margin-left:17%;">(o mode only) Compress the file
with xz-compatible compression before writing it. In input
mode, this option is ignored; xz compression is recognized
automatically on input.</p>
<p style="margin-top: 1em"><b>-j</b></p>
<p style="margin-left:17%; margin-top: 1em">Synonym for
<b>-y</b>.</p>
<p style="margin-top: 1em"><b>-L</b></p>
<p style="margin-left:17%; margin-top: 1em">(o and p modes)
All symbolic links will be followed. Normally, symbolic
links are archived and copied as symbolic links. With this
option, the target of the link will be archived or copied
instead.</p>
<p style="margin-top: 1em"><b>-l</b>, <b>--link</b></p>
<p style="margin-left:17%;">(p mode only) Create links from
the target directory to the original files, instead of
copying.</p>
<p style="margin-top: 1em"><b>--lrzip</b></p>
<p style="margin-left:17%;">(o mode only) Compress the
resulting archive with lrzip(1). In input mode, this option
is ignored.</p>
<p style="margin-top: 1em"><b>--lz4</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the archive with lz4-compatible compression before
writing it. In input mode, this option is ignored; lz4
compression is recognized automatically on input.</p>
<p style="margin-top: 1em"><b>--zstd</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the archive with zstd-compatible compression before
writing it. In input mode, this option is ignored; zstd
compression is recognized automatically on input.</p>
<p style="margin-top: 1em"><b>--lzma</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the file with lzma-compatible compression before
writing it. In input mode, this option is ignored; lzma
compression is recognized automatically on input.</p>
<p style="margin-top: 1em"><b>--lzop</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the resulting archive with lzop(1). In input mode,
this option is ignored.</p>
<p style="margin-top: 1em"><b>--passphrase</b>
<i>passphrase</i></p>
<p style="margin-left:17%;">The <i>passphrase</i> is used
to extract or create an encrypted archive. Currently, zip is
only a format that <b>cpio</b> can handle encrypted
archives. You shouldn&rsquo;t use this option unless you
realize how insecure use of this option is.</p>
<p style="margin-top: 1em"><b>-m</b>,
<b>--preserve-modification-time</b></p>
<p style="margin-left:17%;">(i and p modes) Set file
modification time on created files to match those in the
source.</p>
<p style="margin-top: 1em"><b>-n</b>,
<b>--numeric-uid-gid</b></p>
<p style="margin-left:17%;">(i mode, only with <b>-t</b>)
Display numeric uid and gid. By default, <b>cpio</b>
displays the user and group names when they are provided in
the archive, or looks up the user and group names in the
system password database.</p>
<p style="margin-top: 1em"><b>--no-preserve-owner</b></p>
<p style="margin-left:17%;">(i mode only) Do not attempt to
restore file ownership. This is the default when run by
non-root users.</p>
<p style="margin-top: 1em"><b>-O</b> <i>file</i></p>
<p style="margin-left:17%;">Write archive to
<i>file</i>.</p>
<p style="margin-top: 1em"><b>-o</b>, <b>--create</b></p>
<p style="margin-left:17%;">Output mode. See above for
description.</p>
<p style="margin-top: 1em"><b>-p</b>,
<b>--pass-through</b></p>
<p style="margin-left:17%;">Pass-through mode. See above
for description.</p>
<p style="margin-top: 1em"><b>--preserve-owner</b></p>
<p style="margin-left:17%;">(i mode only) Restore file
ownership. This is the default when run by the root
user.</p>
<p style="margin-top: 1em"><b>--quiet</b></p>
<p style="margin-left:17%;">Suppress unnecessary
messages.</p>
<p style="margin-top: 1em"><b>-R</b> [ <br>
user][ <br>
:][ <br>
group], <b>--owner</b> [ <br>
user][ <br>
:][ <br>
group]</p>
<p style="margin-left:17%;">Set the owner and/or group on
files in the output. If group is specified with no user (for
example, <b>-R</b> <i>:wheel</i>) then the group will be set
but not the user. If the user is specified with a trailing
colon and no group (for example, <b>-R</b> <i>root:</i>)
then the group will be set to the user&rsquo;s default
group. If the user is specified with no trailing colon, then
the user will be set but not the group. In <b>-i</b> and
<b>-p</b> modes, this option can only be used by the
super-user. (For compatibility, a period can be used in
place of the colon.)</p>
<p style="margin-top: 1em"><b>-r</b></p>
<p style="margin-left:17%; margin-top: 1em">(All modes.)
Rename files interactively. For each file, a prompt is
written to <i>/dev/tty</i> containing the name of the file
and a line is read from <i>/dev/tty</i>. If the line read is
blank, the file is skipped. If the line contains a single
period, the file is processed normally. Otherwise, the line
is taken to be the new name of the file.</p>
<p style="margin-top: 1em"><b>-t</b>, <b>--list</b></p>
<p style="margin-left:17%;">(i mode only) List the contents
of the archive to stdout; do not restore the contents to
disk.</p>
<p style="margin-top: 1em"><b>-u</b>,
<b>--unconditional</b></p>
<p style="margin-left:17%;">(i and p modes) Unconditionally
overwrite existing files. Ordinarily, an older file will not
overwrite a newer file on disk.</p>
<p style="margin-top: 1em"><b>-V</b>, <b>--dot</b></p>
<p style="margin-left:17%;">Print a dot to stderr for each
file as it is processed. Superseded by <b>-v</b>.</p>
<p style="margin-top: 1em"><b>-v</b>, <b>--verbose</b></p>
<p style="margin-left:17%;">Print the name of each file to
stderr as it is processed. With <b>-t</b>, provide a
detailed listing of each file.</p>
<p style="margin-top: 1em"><b>--version</b></p>
<p style="margin-left:17%;">Print the program version
information and exit.</p>
<p style="margin-top: 1em"><b>-y</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the archive with bzip2-compatible compression
before writing it. In input mode, this option is ignored;
bzip2 compression is recognized automatically on input.</p>
<p style="margin-top: 1em"><b>-Z</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the archive with compress-compatible compression
before writing it. In input mode, this option is ignored;
compression is recognized automatically on input.</p>
<p style="margin-top: 1em"><b>-z</b></p>
<p style="margin-left:17%; margin-top: 1em">(o mode only)
Compress the archive with gzip-compatible compression before
writing it. In input mode, this option is ignored; gzip
compression is recognized automatically on input.</p>
<p style="margin-top: 1em"><b>EXIT STATUS</b></p>
<p style="margin-left:6%;">The <b>cpio</b> utility
exits&nbsp;0 on success, and&nbsp;&gt;0 if an error
occurs.</p>
<p style="margin-top: 1em"><b>ENVIRONMENT</b></p>
<p style="margin-left:6%;">The following environment
variables affect the execution of <b>cpio</b>:</p>
<p style="margin-top: 1em">LANG</p>
<p style="margin-left:21%; margin-top: 1em">The locale to
use. See environ(7) for more information.</p>
<p style="margin-top: 1em">TZ</p>
<p style="margin-left:21%; margin-top: 1em">The timezone to
use when displaying dates. See environ(7) for more
information.</p>
<p style="margin-top: 1em"><b>EXAMPLES</b></p>
<p style="margin-left:6%;">The <b>cpio</b> command is
traditionally used to copy file hierarchies in conjunction
with the find(1) command. The first example here simply
copies all files from <i>src</i> to <i>dest</i>:</p>
<p style="margin-left:14%;"><b>find</b> <i>src</i> |
<b>cpio -pmud</b> <i>dest</i></p>
<p style="margin-left:6%; margin-top: 1em">By carefully
selecting options to the find(1) command and combining it
with other standard utilities, it is possible to exercise
very fine control over which files are copied. This next
example copies files from <i>src</i> to <i>dest</i> that are
more than 2 days old and whose names match a particular
pattern:</p>
<p style="margin-left:14%;"><b>find</b> <i>src</i>
<b>-mtime</b> <i>+2</i> | <b>grep foo[bar]</b> | <b>cpio
-pdmu</b> <i>dest</i></p>
<p style="margin-left:6%; margin-top: 1em">This example
copies files from <i>src</i> to <i>dest</i> that are more
than 2 days old and which contain the word &ldquo;</p>
<p>foobar &rdquo;:</p>
<p style="margin-left:14%;"><b>find</b> <i>src</i>
<b>-mtime</b> <i>+2</i> | <b>xargs grep -l foobar</b> |
<b>cpio -pdmu</b> <i>dest</i></p>
<p style="margin-top: 1em"><b>COMPATIBILITY</b></p>
<p style="margin-left:6%;">The mode options i, o, and p and
the options a, B, c, d, f, l, m, r, t, u, and v comply with
SUSv2.</p>
<p style="margin-left:6%; margin-top: 1em">The old POSIX.1
standard specified that only <b>-i</b>, <b>-o</b>, and
<b>-p</b> were interpreted as command-line options. Each
took a single argument of a list of modifier characters. For
example, the standard syntax allows <b>-imu</b> but does not
support <b>-miu</b> or <b>-i -m -u</b>, since <i>m</i> and
<i>u</i> are only modifiers to <b>-i</b>, they are not
command-line options in their own right. The syntax
supported by this implementation is backwards-compatible
with the standard. For best compatibility, scripts should
limit themselves to the standard syntax.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">bzip2(1), gzip(1), mt(1),
pax(1), tar(1), libarchive(3), cpio(5),
libarchive-formats(5), tar(5)</p>
<p style="margin-top: 1em"><b>STANDARDS</b></p>
<p style="margin-left:6%;">There is no current POSIX
standard for the cpio command; it appeared in ISO/IEC
9945-1:1996 (&ldquo;POSIX.1&rdquo;) but was dropped from
IEEE Std 1003.1-2001 (&ldquo;POSIX.1&rdquo;).</p>
<p style="margin-left:6%; margin-top: 1em">The cpio, ustar,
and pax interchange file formats are defined by IEEE Std
1003.1-2001 (&ldquo;POSIX.1&rdquo;) for the pax command.</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The original <b>cpio</b> and
<b>find</b> utilities were written by Dick Haight while
working in AT&amp;T&rsquo;s Unix Support Group. They first
appeared in 1977 in PWB/UNIX 1.0, the
&ldquo;Programmer&rsquo;s Work Bench&rdquo; system developed
for use within AT&amp;T. They were first released outside of
AT&amp;T as part of System III Unix in 1981. As a result,
<b>cpio</b> actually predates <b>tar</b>, even though it was
not well-known outside of AT&amp;T until some time
later.</p>
<p style="margin-left:6%; margin-top: 1em">This is a
complete re-implementation based on the libarchive(3)
library.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">The cpio archive format has
several basic limitations: It does not store user and group
names, only numbers. As a result, it cannot be reliably used
to transfer files between systems with dissimilar user and
group numbering. Older cpio formats limit the user and group
numbers to 16 or 18 bits, which is insufficient for modern
systems. The cpio archive formats cannot support files over
4 gigabytes, except for the &ldquo;odc&rdquo; variant, which
can support files up to 8 gigabytes.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
September&nbsp;16, 2014 BSD</p>
<hr>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,482 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>CPIO(5) BSD File Formats Manual CPIO(5)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>cpio</b> &mdash; format of
cpio archive files</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">The <b>cpio</b> archive format
collects any number of files, directories, and other file
system objects (symbolic links, device nodes, etc.) into a
single stream of bytes.</p>
<p style="margin-left:6%; margin-top: 1em"><b>General
Format</b> <br>
Each file system object in a <b>cpio</b> archive comprises a
header record with basic numeric metadata followed by the
full pathname of the entry and the file data. The header
record stores a series of integer values that generally
follow the fields in <i>struct stat</i>. (See stat(2) for
details.) The variants differ primarily in how they store
those integers (binary, octal, or hexadecimal). The header
is followed by the pathname of the entry (the length of the
pathname is stored in the header) and any file data. The end
of the archive is indicated by a special record with the
pathname &ldquo;TRAILER!!!&rdquo;.</p>
<p style="margin-left:6%; margin-top: 1em"><b>PWB
format</b> <br>
The PWB binary <b>cpio</b> format is the original format,
when cpio was introduced as part of the Programmer&rsquo;s
Work Bench system, a variant of 6th Edition UNIX. It stores
numbers as 2-byte and 4-byte binary values. Each entry
begins with a header in the following format:</p>
<p style="margin-left:14%; margin-top: 1em">struct
header_pwb_cpio { <br>
short h_magic; <br>
short h_dev; <br>
short h_ino; <br>
short h_mode; <br>
short h_uid; <br>
short h_gid; <br>
short h_nlink; <br>
short h_majmin; <br>
long h_mtime; <br>
short h_namesize; <br>
long h_filesize; <br>
};</p>
<p style="margin-left:6%; margin-top: 1em">The <i>short</i>
fields here are 16-bit integer values, while the <i>long</i>
fields are 32 bit integers. Since PWB UNIX, like the 6th
Edition UNIX it was based on, only ran on PDP-11 computers,
they are in PDP-endian format, which has little-endian
shorts, and big-endian longs. That is, the long integer
whose hexadecimal representation is 0x12345678 would be
stored in four successive bytes as 0x34, 0x12, 0x78, 0x56.
The fields are as follows:</p>
<p style="margin-top: 1em"><i>h_magic</i></p>
<p style="margin-left:17%;">The integer value octal
070707.</p>
<p style="margin-top: 1em"><i>h_dev</i>, <i>h_ino</i></p>
<p style="margin-left:17%;">The device and inode numbers
from the disk. These are used by programs that read
<b>cpio</b> archives to determine when two entries refer to
the same file. Programs that synthesize <b>cpio</b> archives
should be careful to set these to distinct values for each
entry.</p>
<p style="margin-top: 1em"><i>h_mode</i></p>
<p style="margin-left:17%; margin-top: 1em">The mode
specifies both the regular permissions and the file type,
and it also holds a couple of bits that are irrelevant to
the cpio format, because the field is actually a raw copy of
the mode field in the inode representing the file. These are
the IALLOC flag, which shows that the inode entry is in use,
and the ILARG flag, which shows that the file it represents
is large enough to have indirect blocks pointers in the
inode. The mode is decoded as follows:</p>
<p style="margin-top: 1em">0100000</p>
<p style="margin-left:28%; margin-top: 1em">IALLOC flag -
irrelevant to cpio.</p>
<p>0060000</p>
<p style="margin-left:28%; margin-top: 1em">This masks the
file type bits.</p>
<p>0040000</p>
<p style="margin-left:28%; margin-top: 1em">File type value
for directories.</p>
<p>0020000</p>
<p style="margin-left:28%; margin-top: 1em">File type value
for character special devices.</p>
<p>0060000</p>
<p style="margin-left:28%; margin-top: 1em">File type value
for block special devices.</p>
<p>0010000</p>
<p style="margin-left:28%; margin-top: 1em">ILARG flag -
irrelevant to cpio.</p>
<p>0004000</p>
<p style="margin-left:28%; margin-top: 1em">SUID bit.</p>
<p>0002000</p>
<p style="margin-left:28%; margin-top: 1em">SGID bit.</p>
<p>0001000</p>
<p style="margin-left:28%; margin-top: 1em">Sticky bit.</p>
<p>0000777</p>
<p style="margin-left:28%; margin-top: 1em">The lower 9
bits specify read/write/execute permissions for world,
group, and user following standard POSIX conventions.</p>
<p style="margin-top: 1em"><i>h_uid</i>, <i>h_gid</i></p>
<p style="margin-left:17%;">The numeric user id and group
id of the owner.</p>
<p style="margin-top: 1em"><i>h_nlink</i></p>
<p style="margin-left:17%;">The number of links to this
file. Directories always have a value of at least two here.
Note that hardlinked files include file data with every copy
in the archive.</p>
<p style="margin-top: 1em"><i>h_majmin</i></p>
<p style="margin-left:17%;">For block special and character
special entries, this field contains the associated device
number, with the major number in the high byte, and the
minor number in the low byte. For all other entry types, it
should be set to zero by writers and ignored by readers.</p>
<p style="margin-top: 1em"><i>h_mtime</i></p>
<p style="margin-left:17%;">Modification time of the file,
indicated as the number of seconds since the start of the
epoch, 00:00:00 UTC January 1, 1970.</p>
<p style="margin-top: 1em"><i>h_namesize</i></p>
<p style="margin-left:17%;">The number of bytes in the
pathname that follows the header. This count includes the
trailing NUL byte.</p>
<p style="margin-top: 1em"><i>h_filesize</i></p>
<p style="margin-left:17%;">The size of the file. Note that
this archive format is limited to 16 megabyte file sizes,
because PWB UNIX, like 6th Edition, only used an unsigned 24
bit integer for the file size internally.</p>
<p style="margin-left:6%; margin-top: 1em">The pathname
immediately follows the fixed header. If <b>h_namesize</b>
is odd, an additional NUL byte is added after the pathname.
The file data is then appended, again with an additional NUL
appended if needed to get the next header at an even
offset.</p>
<p style="margin-left:6%; margin-top: 1em">Hardlinked files
are not given special treatment; the full file contents are
included with each copy of the file.</p>
<p style="margin-left:6%; margin-top: 1em"><b>New Binary
Format</b> <br>
The new binary <b>cpio</b> format showed up when cpio was
adopted into late 7th Edition UNIX. It is exactly like the
PWB binary format, described above, except for three
changes:</p>
<p style="margin-left:6%; margin-top: 1em">First, UNIX now
ran on more than one hardware type, so the endianness of 16
bit integers must be determined by observing the magic
number at the start of the header. The 32 bit integers are
still always stored with the most significant word first,
though, so each of those two, in the struct shown above, was
stored as an array of two 16 bit integers, in the
traditional order. Those 16 bit integers, like all the
others in the struct, were accessed using a macro that byte
swapped them if necessary.</p>
<p style="margin-left:6%; margin-top: 1em">Next, 7th
Edition had more file types to store, and the IALLOC and
ILARG flag bits were re-purposed to accommodate these. The
revised use of the various bits is as follows:</p>
<p style="margin-top: 1em">0170000</p>
<p style="margin-left:18%; margin-top: 1em">This masks the
file type bits.</p>
<p>0140000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for sockets.</p>
<p>0120000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for symbolic links. For symbolic links, the link body is
stored as file data.</p>
<p>0100000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for regular files.</p>
<p>0060000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for block special devices.</p>
<p>0040000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for directories.</p>
<p>0020000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for character special devices.</p>
<p>0010000</p>
<p style="margin-left:18%; margin-top: 1em">File type value
for named pipes or FIFOs.</p>
<p>0004000</p>
<p style="margin-left:18%; margin-top: 1em">SUID bit.</p>
<p>0002000</p>
<p style="margin-left:18%; margin-top: 1em">SGID bit.</p>
<p>0001000</p>
<p style="margin-left:18%; margin-top: 1em">Sticky bit.</p>
<p>0000777</p>
<p style="margin-left:18%; margin-top: 1em">The lower 9
bits specify read/write/execute permissions for world,
group, and user following standard POSIX conventions.</p>
<p style="margin-left:6%; margin-top: 1em">Finally, the
file size field now represents a signed 32 bit integer in
the underlying file system, so the maximum file size has
increased to 2 gigabytes.</p>
<p style="margin-left:6%; margin-top: 1em">Note that there
is no obvious way to tell which of the two binary formats an
archive uses, other than to see which one makes more sense.
The typical error scenario is that a PWB format archive
unpacked as if it were in the new format will create named
sockets instead of directories, and then fail to unpack
files that should go in those directories. Running
<i>bsdcpio -itv</i> on an unknown archive will make it
obvious which it is: if it&rsquo;s PWB format, directories
will be listed with an &rsquo;s&rsquo; instead of a
&rsquo;d&rsquo; as the first character of the mode string,
and the larger files will have a &rsquo;?&rsquo; in that
position.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Portable
ASCII Format</b> <br>
Version&nbsp;2 of the Single UNIX Specification
(&ldquo;SUSv2&rdquo;) standardized an ASCII variant that is
portable across all platforms. It is commonly known as the
&ldquo;old character&rdquo; format or as the
&ldquo;odc&rdquo; format. It stores the same numeric fields
as the old binary format, but represents them as 6-character
or 11-character octal values.</p>
<p style="margin-left:14%; margin-top: 1em">struct
cpio_odc_header { <br>
char c_magic[6]; <br>
char c_dev[6]; <br>
char c_ino[6]; <br>
char c_mode[6]; <br>
char c_uid[6]; <br>
char c_gid[6]; <br>
char c_nlink[6]; <br>
char c_rdev[6]; <br>
char c_mtime[11]; <br>
char c_namesize[6]; <br>
char c_filesize[11]; <br>
};</p>
<p style="margin-left:6%; margin-top: 1em">The fields are
identical to those in the new binary format. The name and
file body follow the fixed header. Unlike the binary
formats, there is no additional padding after the pathname
or file contents. If the files being archived are themselves
entirely ASCII, then the resulting archive will be entirely
ASCII, except for the NUL byte that terminates the name
field.</p>
<p style="margin-left:6%; margin-top: 1em"><b>New ASCII
Format</b> <br>
The &quot;new&quot; ASCII format uses 8-byte hexadecimal
fields for all numbers and separates device numbers into
separate fields for major and minor numbers.</p>
<p style="margin-left:14%; margin-top: 1em">struct
cpio_newc_header { <br>
char c_magic[6]; <br>
char c_ino[8]; <br>
char c_mode[8]; <br>
char c_uid[8]; <br>
char c_gid[8]; <br>
char c_nlink[8]; <br>
char c_mtime[8]; <br>
char c_filesize[8]; <br>
char c_devmajor[8]; <br>
char c_devminor[8]; <br>
char c_rdevmajor[8]; <br>
char c_rdevminor[8]; <br>
char c_namesize[8]; <br>
char c_check[8]; <br>
};</p>
<p style="margin-left:6%; margin-top: 1em">Except as
specified below, the fields here match those specified for
the new binary format above.</p>
<p style="margin-top: 1em"><i>magic</i></p>
<p style="margin-left:17%; margin-top: 1em">The string
&ldquo;070701&rdquo;.</p>
<p style="margin-top: 1em"><i>check</i></p>
<p style="margin-left:17%; margin-top: 1em">This field is
always set to zero by writers and ignored by readers. See
the next section for more details.</p>
<p style="margin-left:6%; margin-top: 1em">The pathname is
followed by NUL bytes so that the total size of the fixed
header plus pathname is a multiple of four. Likewise, the
file data is padded to a multiple of four bytes. Note that
this format supports only 4 gigabyte files (unlike the older
ASCII format, which supports 8 gigabyte files).</p>
<p style="margin-left:6%; margin-top: 1em">In this format,
hardlinked files are handled by setting the filesize to zero
for each entry except the first one that appears in the
archive.</p>
<p style="margin-left:6%; margin-top: 1em"><b>New CRC
Format</b> <br>
The CRC format is identical to the new ASCII format
described in the previous section except that the magic
field is set to &ldquo;070702&rdquo; and the <i>check</i>
field is set to the sum of all bytes in the file data. This
sum is computed treating all bytes as unsigned values and
using unsigned arithmetic. Only the least-significant 32
bits of the sum are stored.</p>
<p style="margin-left:6%; margin-top: 1em"><b>HP
variants</b> <br>
The <b>cpio</b> implementation distributed with HPUX used
XXXX but stored device numbers differently XXX.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Other
Extensions and Variants</b> <br>
Sun Solaris uses additional file types to store extended
file data, including ACLs and extended attributes, as
special entries in cpio archives.</p>
<p style="margin-left:6%; margin-top: 1em">XXX Others?
XXX</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">cpio(1), tar(5)</p>
<p style="margin-top: 1em"><b>STANDARDS</b></p>
<p style="margin-left:6%;">The <b>cpio</b> utility is no
longer a part of POSIX or the Single Unix Standard. It last
appeared in Version&nbsp;2 of the Single UNIX Specification
(&ldquo;SUSv2&rdquo;). It has been supplanted in subsequent
standards by pax(1). The portable ASCII format is currently
part of the specification for the pax(1) utility.</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The original cpio utility was
written by Dick Haight while working in AT&amp;T&rsquo;s
Unix Support Group. It appeared in 1977 as part of PWB/UNIX
1.0, the &ldquo;Programmer&rsquo;s Work Bench&rdquo; derived
from Version&nbsp;6 AT&amp;T UNIX that was used internally
at AT&amp;T. Both the new binary and old character formats
were in use by 1980, according to the System III source
released by SCO under their &ldquo;Ancient Unix&rdquo;
license. The character format was adopted as part of IEEE
Std 1003.1-1988 (&ldquo;POSIX.1&rdquo;). XXX when did
&quot;newc&quot; appear? Who invented it? When did HP come
out with their variant? When did Sun introduce ACLs and
extended attributes? XXX</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">The &ldquo;CRC&rdquo; format is
mis-named, as it uses a simple checksum and not a cyclic
redundancy check.</p>
<p style="margin-left:6%; margin-top: 1em">The binary
formats are limited to 16 bits for user id, group id,
device, and inode numbers. They are limited to 16 megabyte
and 2 gigabyte file sizes for the older and newer variants,
respectively.</p>
<p style="margin-left:6%; margin-top: 1em">The old ASCII
format is limited to 18 bits for the user id, group id,
device, and inode numbers. It is limited to 8 gigabyte file
sizes.</p>
<p style="margin-left:6%; margin-top: 1em">The new ASCII
format is limited to 4 gigabyte file sizes.</p>
<p style="margin-left:6%; margin-top: 1em">None of the cpio
formats store user or group names, which are essential when
moving files between systems with dissimilar user or group
numbering.</p>
<p style="margin-left:6%; margin-top: 1em">Especially when
writing older cpio variants, it may be necessary to map
actual device/inode values to synthesized values that fit
the available fields. With very large filesystems, this may
be necessary even for the newer formats.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
December&nbsp;23, 2011 BSD</p>
<hr>
</body>
</html>

View file

@ -1,503 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>LIBARCHIVE-FORMATS(5) BSD File Formats Manual
LIBARCHIVE-FORMATS(5)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>libarchive-formats</b>
&mdash; archive formats supported by the libarchive
library</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">The libarchive(3) library reads
and writes a variety of streaming archive formats. Generally
speaking, all of these archive formats consist of a series
of &ldquo;entries&rdquo;. Each entry stores a single file
system object, such as a file, directory, or symbolic
link.</p>
<p style="margin-left:6%; margin-top: 1em">The following
provides a brief description of each format supported by
libarchive, with some information about recognized
extensions or limitations of the current library support.
Note that just because a format is supported by libarchive
does not imply that a program that uses libarchive will
support that format. Applications that use libarchive
specify which formats they wish to support, though many
programs do use libarchive convenience functions to enable
all supported formats.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Tar
Formats</b> <br>
The libarchive(3) library can read most tar archives. It can
write POSIX-standard &ldquo;ustar&rdquo; and &ldquo;pax
interchange&rdquo; formats as well as v7 tar format and a
subset of the legacy GNU tar format.</p>
<p style="margin-left:6%; margin-top: 1em">All tar formats
store each entry in one or more 512-byte records. The first
record is used for file metadata, including filename,
timestamp, and mode information, and the file data is stored
in subsequent records. Later variants have extended this by
either appropriating undefined areas of the header record,
extending the header to multiple records, or by storing
special entries that modify the interpretation of subsequent
entries.</p>
<p style="margin-top: 1em"><b>gnutar</b></p>
<p style="margin-left:17%; margin-top: 1em">The
libarchive(3) library can read most GNU-format tar archives.
It currently supports the most popular GNU extensions,
including modern long filename and linkname support, as well
as atime and ctime data. The libarchive library does not
support multi-volume archives, nor the old GNU long filename
format. It can read GNU sparse file entries, including the
new POSIX-based formats.</p>
<p style="margin-left:17%; margin-top: 1em">The
libarchive(3) library can write GNU tar format, including
long filename and linkname support, as well as atime and
ctime data.</p>
<p style="margin-top: 1em"><b>pax</b></p>
<p style="margin-left:17%; margin-top: 1em">The
libarchive(3) library can read and write POSIX-compliant pax
interchange format archives. Pax interchange format archives
are an extension of the older ustar format that adds a
separate entry with additional attributes stored as
key/value pairs immediately before each regular entry. The
presence of these additional entries is the only difference
between pax interchange format and the older ustar format.
The extended attributes are of unlimited length and are
stored as UTF-8 Unicode strings. Keywords defined in the
standard are in all lowercase; vendors are allowed to define
custom keys by preceding them with the vendor name in all
uppercase. When writing pax archives, libarchive uses many
of the SCHILY keys defined by Joerg Schilling&rsquo;s
&ldquo;star&rdquo; archiver and a few LIBARCHIVE keys. The
libarchive library can read most of the SCHILY keys and most
of the GNU keys introduced by GNU tar. It silently ignores
any keywords that it does not understand.</p>
<p style="margin-left:17%; margin-top: 1em">The pax
interchange format converts filenames to Unicode and stores
them using the UTF-8 encoding. Prior to libarchive 3.0,
libarchive erroneously assumed that the system
wide-character routines natively supported Unicode. This
caused it to mis-handle non-ASCII filenames on systems that
did not satisfy this assumption.</p>
<p style="margin-top: 1em"><b>restricted pax</b></p>
<p style="margin-left:17%;">The libarchive library can also
write pax archives in which it attempts to suppress the
extended attributes entry whenever possible. The result will
be identical to a ustar archive unless the extended
attributes entry is required to store a long file name, long
linkname, extended ACL, file flags, or if any of the
standard ustar data (user name, group name, UID, GID, etc)
cannot be fully represented in the ustar header. In all
cases, the result can be dearchived by any program that can
read POSIX-compliant pax interchange format archives.
Programs that correctly read ustar format (see below) will
also be able to read this format; any extended attributes
will be extracted as separate files stored in
<i>PaxHeader</i> directories.</p>
<p style="margin-top: 1em"><b>ustar</b></p>
<p style="margin-left:17%; margin-top: 1em">The libarchive
library can both read and write this format. This format has
the following limitations:</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Device major and minor numbers
are limited to 21 bits. Nodes with larger numbers will not
be added to the archive.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Path names in the archive are
limited to 255 bytes. (Shorter if there is no / character in
exactly the right place.)</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Symbolic links and hard links
are stored in the archive with the name of the referenced
file. This name is limited to 100 bytes.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Extended attributes, file
flags, and other extended security information cannot be
stored.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Archive entries are limited to
8 gigabytes in size.</p>
<p style="margin-left:17%;">Note that the pax interchange
format has none of these restrictions. The ustar format is
old and widely supported. It is recommended when
compatibility is the primary concern.</p>
<p style="margin-top: 1em"><b>v7</b></p>
<p style="margin-left:17%; margin-top: 1em">The libarchive
library can read and write the legacy v7 tar format. This
format has the following limitations:</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Only regular files,
directories, and symbolic links can be archived. Block and
character device nodes, FIFOs, and sockets cannot be
archived.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Path names in the archive are
limited to 100 bytes.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Symbolic links and hard links
are stored in the archive with the name of the referenced
file. This name is limited to 100 bytes.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">User and group information are
stored as numeric IDs; there is no provision for storing
user or group names.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Extended attributes, file
flags, and other extended security information cannot be
stored.</p>
<p><b>&bull;</b></p>
<p style="margin-left:22%;">Archive entries are limited to
8 gigabytes in size.</p>
<p style="margin-left:17%;">Generally, users should prefer
the ustar format for portability as the v7 tar format is
both less useful and less portable.</p>
<p style="margin-left:6%; margin-top: 1em">The libarchive
library also reads a variety of commonly-used extensions to
the basic tar format. These extensions are recognized
automatically whenever they appear.</p>
<p style="margin-top: 1em">Numeric extensions.</p>
<p style="margin-left:17%;">The POSIX standards require
fixed-length numeric fields to be written with some
character position reserved for terminators. Libarchive
allows these fields to be written without terminator
characters. This extends the allowable range; in particular,
ustar archives with this extension can support entries up to
64 gigabytes in size. Libarchive also recognizes base-256
values in most numeric fields. This essentially removes all
limitations on file size, modification time, and device
numbers.</p>
<p style="margin-top: 1em">Solaris extensions</p>
<p style="margin-left:17%;">Libarchive recognizes ACL and
extended attribute records written by Solaris tar.</p>
<p style="margin-left:6%; margin-top: 1em">The first tar
program appeared in Seventh Edition Unix in 1979. The first
official standard for the tar file format was the
&ldquo;ustar&rdquo; (Unix Standard Tar) format defined by
POSIX in 1988. POSIX.1-2001 extended the ustar format to
create the &ldquo;pax interchange&rdquo; format.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Cpio
Formats</b> <br>
The libarchive library can read and write a number of common
cpio variants. A cpio archive stores each entry as a
fixed-size header followed by a variable-length filename and
variable-length data. Unlike the tar format, the cpio format
does only minimal padding of the header or file data. There
are several cpio variants, which differ primarily in how
they store the initial header: some store the values as
octal or hexadecimal numbers in ASCII, others as binary
values of varying byte order and length.</p>
<p style="margin-top: 1em"><b>binary</b></p>
<p style="margin-left:17%; margin-top: 1em">The libarchive
library transparently reads both big-endian and
little-endian variants of the the two binary cpio formats;
the original one from PWB/UNIX, and the later, more widely
used, variant. This format used 32-bit binary values for
file size and mtime, and 16-bit binary values for the other
fields. The formats support only the file types present in
UNIX at the time of their creation. File sizes are limited
to 24 bits in the PWB format, because of the limits of the
file system, and to 31 bits in the newer binary format,
where signed 32 bit longs were used.</p>
<p style="margin-top: 1em"><b>odc</b></p>
<p style="margin-left:17%; margin-top: 1em">This is the
POSIX standardized format, which is officially known as the
&ldquo;cpio interchange format&rdquo; or the
&ldquo;octet-oriented cpio archive format&rdquo; and
sometimes unofficially referred to as the &ldquo;old
character format&rdquo;. This format stores the header
contents as octal values in ASCII. It is standard, portable,
and immune from byte-order confusion. File sizes and mtime
are limited to 33 bits (8GB file size), other fields are
limited to 18 bits.</p>
<p style="margin-top: 1em"><b>SVR4/newc</b></p>
<p style="margin-left:17%;">The libarchive library can read
both CRC and non-CRC variants of this format. The SVR4
format uses eight-digit hexadecimal values for all header
fields. This limits file size to 4GB, and also limits the
mtime and other fields to 32 bits. The SVR4 format can
optionally include a CRC of the file contents, although
libarchive does not currently verify this CRC.</p>
<p style="margin-left:6%; margin-top: 1em">Cpio first
appeared in PWB/UNIX 1.0, which was released within AT&amp;T
in 1977. PWB/UNIX 1.0 formed the basis of System III Unix,
released outside of AT&amp;T in 1981. This makes cpio older
than tar, although cpio was not included in Version 7
AT&amp;T Unix. As a result, the tar command became much
better known in universities and research groups that used
Version 7. The combination of the <b>find</b> and
<b>cpio</b> utilities provided very precise control over
file selection. Unfortunately, the format has many
limitations that make it unsuitable for widespread use. Only
the POSIX format permits files over 4GB, and its 18-bit
limit for most other fields makes it unsuitable for modern
systems. In addition, cpio formats only store numeric
UID/GID values (not usernames and group names), which can
make it very difficult to correctly transfer archives across
systems with dissimilar user numbering.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Shar
Formats</b> <br>
A &ldquo;shell archive&rdquo; is a shell script that, when
executed on a POSIX-compliant system, will recreate a
collection of file system objects. The libarchive library
can write two different kinds of shar archives:</p>
<p style="margin-top: 1em"><b>shar</b></p>
<p style="margin-left:17%; margin-top: 1em">The traditional
shar format uses a limited set of POSIX commands, including
echo(1), mkdir(1), and sed(1). It is suitable for portably
archiving small collections of plain text files. However, it
is not generally well-suited for large archives (many
implementations of sh(1) have limits on the size of a
script) nor should it be used with non-text files.</p>
<p style="margin-top: 1em"><b>shardump</b></p>
<p style="margin-left:17%;">This format is similar to shar
but encodes files using uuencode(1) so that the result will
be a plain text file regardless of the file contents. It
also includes additional shell commands that attempt to
reproduce as many file attributes as possible, including
owner, mode, and flags. The additional commands used to
restore file attributes make shardump archives less portable
than plain shar archives.</p>
<p style="margin-left:6%; margin-top: 1em"><b>ISO9660
format</b> <br>
Libarchive can read and extract from files containing
ISO9660-compliant CDROM images. In many cases, this can
remove the need to burn a physical CDROM just in order to
read the files contained in an ISO9660 image. It also avoids
security and complexity issues that come with virtual mounts
and loopback devices. Libarchive supports the most common
Rockridge extensions and has partial support for Joliet
extensions. If both extensions are present, the Joliet
extensions will be used and the Rockridge extensions will be
ignored. In particular, this can create problems with
hardlinks and symlinks, which are supported by Rockridge but
not by Joliet.</p>
<p style="margin-left:6%; margin-top: 1em">Libarchive reads
ISO9660 images using a streaming strategy. This allows it to
read compressed images directly (decompressing on the fly)
and allows it to read images directly from network sockets,
pipes, and other non-seekable data sources. This strategy
works well for optimized ISO9660 images created by many
popular programs. Such programs collect all directory
information at the beginning of the ISO9660 image so it can
be read from a physical disk with a minimum of seeking.
However, not all ISO9660 images can be read in this
fashion.</p>
<p style="margin-left:6%; margin-top: 1em">Libarchive can
also write ISO9660 images. Such images are fully optimized
with the directory information preceding all file data. This
is done by storing all file data to a temporary file while
collecting directory information in memory. When the image
is finished, libarchive writes out the directory structure
followed by the file data. The location used for the
temporary file can be changed by the usual environment
variables.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Zip
format</b> <br>
Libarchive can read and write zip format archives that have
uncompressed entries and entries compressed with the
&ldquo;deflate&rdquo; algorithm. Other zip compression
algorithms are not supported. It can extract jar archives,
archives that use Zip64 extensions and self-extracting zip
archives. Libarchive can use either of two different
strategies for reading Zip archives: a streaming strategy
which is fast and can handle extremely large archives, and a
seeking strategy which can correctly process self-extracting
Zip archives and archives with deleted members or other
in-place modifications.</p>
<p style="margin-left:6%; margin-top: 1em">The streaming
reader processes Zip archives as they are read. It can read
archives of arbitrary size from tape or network sockets, and
can decode Zip archives that have been separately compressed
or encoded. However, self-extracting Zip archives and
archives with certain types of modifications cannot be
correctly handled. Such archives require that the reader
first process the Central Directory, which is ordinarily
located at the end of a Zip archive and is thus inaccessible
to the streaming reader. If the program using libarchive has
enabled seek support, then libarchive will use this to
processes the central directory first.</p>
<p style="margin-left:6%; margin-top: 1em">In particular,
the seeking reader must be used to correctly handle
self-extracting archives. Such archives consist of a program
followed by a regular Zip archive. The streaming reader
cannot parse the initial program portion, but the seeking
reader starts by reading the Central Directory from the end
of the archive. Similarly, Zip archives that have been
modified in-place can have deleted entries or other garbage
data that can only be accurately detected by first reading
the Central Directory.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Archive
(library) file format</b> <br>
The Unix archive format (commonly created by the ar(1)
archiver) is a general-purpose format which is used almost
exclusively for object files to be read by the link editor
ld(1). The ar format has never been standardised. There are
two common variants: the GNU format derived from SVR4, and
the BSD format, which first appeared in 4.4BSD. The two
differ primarily in their handling of filenames longer than
15 characters: the GNU/SVR4 variant writes a filename table
at the beginning of the archive; the BSD format stores each
long filename in an extension area adjacent to the entry.
Libarchive can read both extensions, including archives that
may include both types of long filenames. Programs using
libarchive can write GNU/SVR4 format if they provide an
entry called <i>//</i> containing a filename table to be
written into the archive before any of the entries. Any
entries whose names are not in the filename table will be
written using BSD-style long filenames. This can cause
problems for programs such as GNU ld that do not support the
BSD-style long filenames.</p>
<p style="margin-left:6%; margin-top: 1em"><b>mtree</b>
<br>
Libarchive can read and write files in mtree(5) format. This
format is not a true archive format, but rather a textual
description of a file hierarchy in which each line specifies
the name of a file and provides specific metadata about that
file. Libarchive can read all of the keywords supported by
both the NetBSD and FreeBSD versions of mtree(8), although
many of the keywords cannot currently be stored in an
archive_entry object. When writing, libarchive supports use
of the archive_write_set_options(3) interface to specify
which keywords should be included in the output. If
libarchive was compiled with access to suitable
cryptographic libraries (such as the OpenSSL libraries), it
can compute hash entries such as <b>sha512</b> or <b>md5</b>
from file data being written to the mtree writer.</p>
<p style="margin-left:6%; margin-top: 1em">When reading an
mtree file, libarchive will locate the corresponding files
on disk using the <b>contents</b> keyword if present or the
regular filename. If it can locate and open the file on
disk, it will use that to fill in any metadata that is
missing from the mtree file and will read the file contents
and return those to the program using libarchive. If it
cannot locate and open the file on disk, libarchive will
return an error for any attempt to read the entry body.</p>
<p style="margin-left:6%; margin-top: 1em"><b>7-Zip</b>
<br>
Libarchive can read and write 7-Zip format archives. TODO:
Need more information</p>
<p style="margin-left:6%; margin-top: 1em"><b>CAB</b> <br>
Libarchive can read Microsoft Cabinet ( &ldquo;CAB&rdquo;)
format archives. TODO: Need more information.</p>
<p style="margin-left:6%; margin-top: 1em"><b>LHA</b> <br>
TODO: Information about libarchive&rsquo;s LHA support</p>
<p style="margin-left:6%; margin-top: 1em"><b>RAR</b> <br>
Libarchive has limited support for reading RAR format
archives. Currently, libarchive can read RARv3 format
archives which have been either created uncompressed, or
compressed using any of the compression methods supported by
the RARv3 format. Libarchive can also read self-extracting
RAR archives.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Warc</b> <br>
Libarchive can read and write &ldquo;web archives&rdquo;.
TODO: Need more information</p>
<p style="margin-left:6%; margin-top: 1em"><b>XAR</b> <br>
Libarchive can read and write the XAR format used by many
Apple tools. TODO: Need more information</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">ar(1), cpio(1), mkisofs(1),
shar(1), tar(1), zip(1), zlib(3), cpio(5), mtree(5),
tar(5)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
December&nbsp;27, 2016 BSD</p>
<hr>
</body>
</html>

View file

@ -1,328 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>LIBARCHIVE(3) BSD Library Functions Manual
LIBARCHIVE(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>libarchive</b> &mdash;
functions for reading and writing streaming archives</p>
<p style="margin-top: 1em"><b>OVERVIEW</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
provides a flexible interface for reading and writing
archives in various formats such as tar and cpio.
<b>libarchive</b> also supports reading and writing archives
compressed using various compression filters such as gzip
and bzip2. The library is inherently stream-oriented;
readers serially iterate through the archive, writers
serially add things to the archive. In particular, note that
there is currently no built-in support for random access nor
for in-place modification.</p>
<p style="margin-left:6%; margin-top: 1em">When reading an
archive, the library automatically detects the format and
the compression. The library currently has read support
for:</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">old-style tar archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">most variants of the POSIX
&ldquo;ustar&rdquo; format,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">the POSIX &ldquo;pax
interchange&rdquo; format,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">GNU-format tar archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">most common cpio archive
formats,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">7-Zip archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">ar archives (including GNU/SysV
and BSD extensions),</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">Microsoft CAB archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">ISO9660 CD images (including
RockRidge and Joliet extensions),</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">LHA archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">mtree file tree
descriptions,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">RAR and most RAR5 archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">WARC archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">XAR archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">Zip archives.</p>
<p style="margin-left:6%;">The library automatically
detects archives compressed with compress(1), bzip2(1),
grzip(1), gzip(1), lrzip(1), lz4(1), lzip(1), lzop(1),
xz(1), or zstd(1) and decompresses them transparently.
Decompression of some formats requires external decompressor
utilities. It can similarly detect and decode archives
processed with uuencode(1) or which have an rpm(1)
header.</p>
<p style="margin-left:6%; margin-top: 1em">When writing an
archive, you can specify the compression to be used and the
format to use. The library can write</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">POSIX-standard
&ldquo;ustar&rdquo; archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">POSIX &ldquo;pax interchange
format&rdquo; archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">cpio archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">7-Zip archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">ar archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">two different variants of shar
archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">ISO9660 CD images,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">mtree file tree
descriptions,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">XAR archives,</p>
<p><b>&bull;</b></p>
<p style="margin-left:12%;">Zip archive.</p>
<p style="margin-left:6%;">Pax interchange format is an
extension of the tar archive format that eliminates
essentially all of the limitations of historic tar formats
in a standard fashion that is supported by POSIX-compliant
pax(1) implementations on many systems as well as several
newer implementations of tar(1). Note that the default write
format will suppress the pax extended attributes for most
entries; explicitly requesting pax format will enable those
attributes for all entries.</p>
<p style="margin-left:6%; margin-top: 1em">The read and
write APIs are accessed through the
<b>archive_read_XXX</b>() functions and the
<b>archive_write_XXX</b>() functions, respectively, and
either can be used independently of the other.</p>
<p style="margin-left:6%; margin-top: 1em">The rest of this
manual page provides an overview of the library operation.
More detailed information can be found in the individual
manual pages for each API or utility function.</p>
<p style="margin-top: 1em"><b>READING AN ARCHIVE</b></p>
<p style="margin-left:6%;">See archive_read(3).</p>
<p style="margin-top: 1em"><b>WRITING AN ARCHIVE</b></p>
<p style="margin-left:6%;">See archive_write(3).</p>
<p style="margin-top: 1em"><b>WRITING ENTRIES TO
DISK</b></p>
<p style="margin-left:6%;">The archive_write_disk(3) API
allows you to write archive_entry(3) objects to disk using
the same API used by archive_write(3). The
archive_write_disk(3) API is used internally by
<b>archive_read_extract</b>(); using it directly can provide
greater control over how entries get written to disk. This
API also makes it possible to share code between
archive-to-archive copy and archive-to-disk extraction
operations.</p>
<p style="margin-top: 1em"><b>READING ENTRIES FROM
DISK</b></p>
<p style="margin-left:6%;">The archive_read_disk(3)
supports for populating archive_entry(3) objects from
information in the filesystem. This includes the information
accessible from the stat(2) system call as well as ACLs,
extended attributes, and other metadata. The
archive_read_disk(3) API also supports iterating over
directory trees, which allows directories of files to be
read using an API compatible with the archive_read(3)
API.</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">Detailed descriptions of each
function are provided by the corresponding manual pages.</p>
<p style="margin-left:6%; margin-top: 1em">All of the
functions utilize an opaque struct archive datatype that
provides access to the archive contents.</p>
<p style="margin-left:6%; margin-top: 1em">The struct
archive_entry structure contains a complete description of a
single archive entry. It uses an opaque interface that is
fully documented in archive_entry(3).</p>
<p style="margin-left:6%; margin-top: 1em">Users familiar
with historic formats should be aware that the newer
variants have eliminated most restrictions on the length of
textual fields. Clients should not assume that filenames,
link names, user names, or group names are limited in
length. In particular, pax interchange format can easily
accommodate pathnames in arbitrary character sets that
exceed <i>PATH_MAX</i>.</p>
<p style="margin-top: 1em"><b>RETURN VALUES</b></p>
<p style="margin-left:6%;">Most functions return
<b>ARCHIVE_OK</b> (zero) on success, non-zero on error. The
return value indicates the general severity of the error,
ranging from <b>ARCHIVE_WARN</b>, which indicates a minor
problem that should probably be reported to the user, to
<b>ARCHIVE_FATAL</b>, which indicates a serious problem that
will prevent any further operations on this archive. On
error, the <b>archive_errno</b>() function can be used to
retrieve a numeric error code (see errno(2)). The
<b>archive_error_string</b>() returns a textual error
message suitable for display.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_read_new</b>()
and <b>archive_write_new</b>() return pointers to an
allocated and initialized struct archive object.</p>
<p style="margin-left:6%; margin-top: 1em"><b>archive_read_data</b>()
and <b>archive_write_data</b>() return a count of the number
of bytes actually read or written. A value of zero indicates
the end of the data for this entry. A negative value
indicates an error, in which case the <b>archive_errno</b>()
and <b>archive_error_string</b>() functions can be used to
obtain more information.</p>
<p style="margin-top: 1em"><b>ENVIRONMENT</b></p>
<p style="margin-left:6%;">There are character set
conversions within the archive_entry(3) functions that are
impacted by the currently-selected locale.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">tar(1), archive_entry(3),
archive_read(3), archive_util(3), archive_write(3),
tar(5)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was originally written by Tim Kientzle
&lt;kientzle@acm.org&gt;.</p>
<p style="margin-top: 1em"><b>BUGS</b></p>
<p style="margin-left:6%;">Some archive formats support
information that is not supported by struct archive_entry.
Such information cannot be fully archived or restored using
this library. This includes, for example, comments,
character sets, or the arbitrary key/value pairs that can
appear in pax interchange format archives.</p>
<p style="margin-left:6%; margin-top: 1em">Conversely, of
course, not all of the information that can be stored in an
struct archive_entry is supported by all formats. For
example, cpio formats do not support nanosecond timestamps;
old tar formats do not support large device numbers.</p>
<p style="margin-left:6%; margin-top: 1em">The ISO9660
reader cannot yet read all ISO9660 images; it should learn
how to seek.</p>
<p style="margin-left:6%; margin-top: 1em">The AR writer
requires the client program to use two passes, unlike all
other libarchive writers.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
March&nbsp;18, 2012 BSD</p>
<hr>
</body>
</html>

View file

@ -1,464 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>LIBARCHIVE_CHANGES(3) BSD Library Functions Manual
LIBARCHIVE_CHANGES(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>libarchive_changes</b>
&mdash; changes in libarchive interface</p>
<p style="margin-top: 1em"><b>CHANGES IN LIBARCHIVE
3</b></p>
<p style="margin-left:6%;">This page describes user-visible
changes in libarchive3, and lists public functions and other
symbols changed, deprecated or removed in libarchive3, along
with their replacements if any.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Multiple
Filters</b> <br>
Libarchive2 permitted a single (input or output) filter
active on an archive. Libarchive3 extends this into a
variable-length stack. Where
<b>archive_write_set_compression_XXX</b>() would replace any
existing filter, <b>archive_write_add_filter_XXX</b>()
extends the write pipeline with another filter.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Character Set
Handling</b> <br>
Libarchive2 assumed that the local platform uses Unicode as
the native wchar_t encoding, which is true on Windows,
modern Linux, and a few other systems, but is certainly not
universal. As a result, pax format archives were written
incorrectly on some systems, since pax format requires UTF-8
and libarchive 2 incorrectly assumed that wchar_t strings
can be easily converted to UTF-8.</p>
<p style="margin-left:6%; margin-top: 1em">Libarchive3 uses
the standard iconv library to convert between character sets
and is introducing the notion of a &ldquo;default character
set for the archive&rdquo;. To support this, archive_entry
objects can now be bound to a particular archive when they
are created. The automatic character set conversions
performed by archive_entry objects when reading and writing
filenames, usernames, and other strings will now use an
appropriate default character set:</p>
<p style="margin-left:6%; margin-top: 1em">If the
archive_entry object is bound to an archive, it will use the
default character set for that archive.</p>
<p style="margin-left:6%; margin-top: 1em">The platform
default character encoding (as returned by
<b>nl_langinfo</b>(<i>CHARSET</i>)) will be used if nothing
else is specified.</p>
<p style="margin-left:6%; margin-top: 1em">Libarchive3 also
introduces charset options to many of the archive readers
and writers to control the character set that will be used
for filenames written in those archives. When possible, this
will be set automatically based on information in the
archive itself. Combining this with the notion of a default
character set for the archive should allow you to configure
libarchive to read archives from other platforms and have
the filenames and other information transparently converted
to the character encoding suitable for your application.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Prototype
Changes</b> <br>
These changes break binary compatibility; libarchive3 has a
new shared library version to reflect these changes. The
library now uses portable wide types such as int64_t instead
of less-portable types such as off_t, gid_t, uid_t, and
ino_t.</p>
<p style="margin-left:6%; margin-top: 1em">There are a few
cases where these changes will affect your source code:</p>
<p style="margin-top: 1em"><b>&bull;</b></p>
<p style="margin-left:13%;">In some cases,
libarchive&rsquo;s wider types will introduce the
possibility of truncation: for example, on a system with a
16-bit uid_t, you risk having uid 65536 be truncated to uid
0, which can cause serious security problems.</p>
<p style="margin-top: 1em"><b>&bull;</b></p>
<p style="margin-left:13%;">Typedef function pointer types
will be incompatible. For example, if you define custom skip
callbacks, you may have to use code similar to the following
if you want to support building against libarchive2 and
libarchive3:</p>
<p style="margin-left:13%; margin-top: 1em">#if
ARCHIVE_VERSION_NUMBER &lt; 3000000 <br>
typedef off_t myoff_t; <br>
#else <br>
typedef int64_t myoff_t; <br>
#endif</p>
<p style="margin-left:13%; margin-top: 1em">myoff_t <br>
my_skip_function(struct archive *a, void *v, myoff_t o) <br>
{ <br>
... implementation ... <br>
}</p>
<p style="margin-left:6%; margin-top: 1em">Affected
functions:</p>
<p style="margin-top: 1em"><b>&bull; <br>
archive_entry_gid</b>(), <b>archive_entry_set_gid</b>()
<b><br>
&bull; <br>
archive_entry_uid</b>(), <b>archive_entry_set_uid</b>()
<b><br>
&bull; <br>
archive_entry_ino</b>(), <b>archive_entry_set_ino</b>()
<b><br>
&bull; <br>
archive_read_data_block</b>(),
<b>archive_write_data_block</b>() <b><br>
&bull; <br>
archive_read_disk_gname</b>(),
<b>archive_read_disk_uname</b>() <b><br>
&bull; <br>
archive_read_disk_set_gname_lookup</b>(),
<b>archive_read_disk_set_group_lookup</b>(),
<b>archive_read_disk_set_uname_lookup</b>(),
<b>archive_read_disk_set_user_lookup</b>() <b><br>
&bull;</b></p>
<p style="margin-left:12%;"><b>archive_skip_callback</b>()</p>
<p><b>&bull; <br>
archive_read_extract_set_skip_file</b>(),
<b>archive_write_disk_set_skip_file</b>(),
<b>archive_write_set_skip_file</b>() <b><br>
&bull; <br>
archive_write_disk_set_group_lookup</b>(),
<b>archive_write_disk_set_user_lookup</b>()</p>
<p style="margin-left:6%; margin-top: 1em">Where these
functions or their arguments took or returned gid_t, ino_t,
off_t, or uid_t they now take or return int64_t or
equivalent.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Deprecated
Symbols</b> <br>
Symbols deprecated in libarchive3 will be removed in
libarchive4. These symbols, along with their replacements if
any, are listed below:</p>
<p style="margin-top: 1em"><b>archive_position_compressed</b>(),
<b>archive_position_uncompressed</b>()</p>
<p style="margin-left:13%;"><b>archive_filter_bytes</b>()</p>
<p style="margin-top: 1em"><b>archive_compression</b>()</p>
<p style="margin-left:13%;"><b>archive_filter_code</b>()</p>
<p style="margin-top: 1em"><b>archive_compression_name</b>()</p>
<p style="margin-left:13%;"><b>archive_filter_name</b>()</p>
<p style="margin-top: 1em"><b>archive_read_finish</b>(),
<b>archive_write_finish</b>()</p>
<p style="margin-left:13%;"><b>archive_read_free</b>(),
<b>archive_write_free</b>()</p>
<p style="margin-top: 1em"><b>archive_read_open_file</b>(),
<b>archive_write_open_file</b>()</p>
<p style="margin-left:13%;"><b>archive_read_open_filename</b>(),
<b>archive_write_open_filename</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_all</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_all</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_bzip2</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_bzip2</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_compress</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_compress</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_gzip</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_gzip</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_lzip</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_lzip</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_lzma</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_lzma</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_none</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_none</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_program</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_program</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_program_signature</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_program_signature</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_rpm</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_rpm</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_uu</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_uu</b>()</p>
<p style="margin-top: 1em"><b>archive_read_support_compression_xz</b>()</p>
<p style="margin-left:13%;"><b>archive_read_support_filter_xz</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_bzip2</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_bzip2</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_compress</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_compress</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_gzip</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_gzip</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_lzip</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_lzip</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_lzma</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_lzma</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_none</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_none</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_program</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_program</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_compression_filter</b>()</p>
<p style="margin-left:13%;"><b>archive_write_add_filter_filter</b>()</p>
<p style="margin-left:6%; margin-top: 1em"><b>Removed
Symbols</b> <br>
These symbols, listed below along with their replacements if
any, were deprecated in libarchive2, and are not part of
libarchive3.</p>
<p style="margin-top: 1em"><b>archive_api_feature</b>()</p>
<p style="margin-left:13%;"><b>archive_version_number</b>()</p>
<p style="margin-top: 1em"><b>archive_api_version</b>()</p>
<p style="margin-left:13%;"><b>archive_version_number</b>()</p>
<p style="margin-top: 1em"><b>archive_version</b>()</p>
<p style="margin-left:13%;"><b>archive_version_string</b>()</p>
<p style="margin-top: 1em"><b>archive_version_stamp</b>()</p>
<p style="margin-left:13%;"><b>archive_version_number</b>()</p>
<p style="margin-top: 1em"><b>archive_read_set_filter_options</b>()</p>
<p style="margin-left:13%;"><b>archive_read_set_options</b>()
or <b>archive_read_set_filter_option</b>()</p>
<p style="margin-top: 1em"><b>archive_read_set_format_options</b>()</p>
<p style="margin-left:13%;"><b>archive_read_set_options</b>()
or <b>archive_read_set_format_option</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_filter_options</b>()</p>
<p style="margin-left:13%;"><b>archive_write_set_options</b>()
or <b>archive_write_set_filter_option</b>()</p>
<p style="margin-top: 1em"><b>archive_write_set_format_options</b>()</p>
<p style="margin-left:13%;"><b>archive_write_set_options</b>()
or <b>archive_write_set_format_option</b>()</p>
<p style="margin-top: 1em">ARCHIVE_API_FEATURE</p>
<p style="margin-left:13%;">ARCHIVE_VERSION_NUMBER</p>
<p style="margin-top: 1em">ARCHIVE_API_VERSION</p>
<p style="margin-left:13%;">ARCHIVE_VERSION_NUMBER</p>
<p style="margin-top: 1em">ARCHIVE_VERSION_STAMP</p>
<p style="margin-left:13%;">ARCHIVE_VERSION_NUMBER</p>
<p style="margin-top: 1em">ARCHIVE_LIBRARY_VERSION</p>
<p style="margin-left:13%;">ARCHIVE_VERSION_STRING</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_NONE</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_NONE</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_GZIP</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_GZIP</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_BZIP2</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_BZIP2</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_COMPRESS</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_COMPRESS</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_PROGRAM</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_PROGRAM</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_LZMA</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_LZMA</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_XZ</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_XZ</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_UU</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_UU</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_RPM</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_RPM</p>
<p style="margin-top: 1em">ARCHIVE_COMPRESSION_LZIP</p>
<p style="margin-left:13%;">ARCHIVE_FILTER_LZIP</p>
<p style="margin-top: 1em">ARCHIVE_BYTES_PER_RECORD</p>
<p style="margin-left:13%;">512</p>
<p style="margin-top: 1em">ARCHIVE_DEFAULT_BYTES_PER_BLOCK</p>
<p style="margin-left:13%;">10240</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_read(3),
archive_read_filter(3), archive_read_format(3),
archive_read_set_options(3), archive_util(3),
archive_write(3), archive_write_filter(3),
archive_write_format(3), archive_write_set_options(3),
libarchive(3)</p>
<p style="margin-left:6%; margin-top: 1em">BSD
December&nbsp;23, 2011 BSD</p>
<hr>
</body>
</html>

View file

@ -1,374 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>LIBARCHIVE_INTERNALS(3) BSD Library Functions Manual
LIBARCHIVE_INTERNALS(3)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>libarchive_internals</b>
&mdash; description of libarchive internal interfaces</p>
<p style="margin-top: 1em"><b>OVERVIEW</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
provides a flexible interface for reading and writing
streaming archive files such as tar and cpio. Internally, it
follows a modular layered design that should make it easy to
add new archive and compression formats.</p>
<p style="margin-top: 1em"><b>GENERAL ARCHITECTURE</b></p>
<p style="margin-left:6%;">Externally, libarchive exposes
most operations through an opaque, object-style interface.
The archive_entry(3) objects store information about a
single filesystem object. The rest of the library provides
facilities to write archive_entry(3) objects to archive
files, read them from archive files, and write them to disk.
(There are plans to add a facility to read archive_entry(3)
objects from disk as well.)</p>
<p style="margin-left:6%; margin-top: 1em">The read and
write APIs each have four layers: a public API layer, a
format layer that understands the archive file format, a
compression layer, and an I/O layer. The I/O layer is
completely exposed to clients who can replace it entirely
with their own functions.</p>
<p style="margin-left:6%; margin-top: 1em">In order to
provide as much consistency as possible for clients, some
public functions are virtualized. Eventually, it should be
possible for clients to open an archive or disk writer, and
then use a single set of code to select and write entries,
regardless of the target.</p>
<p style="margin-top: 1em"><b>READ ARCHITECTURE</b></p>
<p style="margin-left:6%;">From the outside, clients use
the archive_read(3) API to manipulate an <b>archive</b>
object to read entries and bodies from an archive stream.
Internally, the <b>archive</b> object is cast to an
<b>archive_read</b> object, which holds all read-specific
data. The API has four layers: The lowest layer is the I/O
layer. This layer can be overridden by clients, but most
clients use the packaged I/O callbacks provided, for
example, by archive_read_open_memory(3), and
archive_read_open_fd(3). The compression layer calls the I/O
layer to read bytes and decompresses them for the format
layer. The format layer unpacks a stream of uncompressed
bytes and creates <b>archive_entry</b> objects from the
incoming data. The API layer tracks overall state (for
example, it prevents clients from reading data before
reading a header) and invokes the format and compression
layer operations through registered function pointers. In
particular, the API layer drives the format-detection
process: When opening the archive, it reads an initial block
of data and offers it to each registered compression
handler. The one with the highest bid is initialized with
the first block. Similarly, the format handlers are polled
to see which handler is the best for each archive. (Prior to
2.4.0, the format bidders were invoked for each entry, but
this design hindered error recovery.)</p>
<p style="margin-left:6%; margin-top: 1em"><b>I/O Layer and
Client Callbacks</b> <br>
The read API goes to some lengths to be nice to clients. As
a result, there are few restrictions on the behavior of the
client callbacks.</p>
<p style="margin-left:6%; margin-top: 1em">The client read
callback is expected to provide a block of data on each
call. A zero-length return does indicate end of file, but
otherwise blocks may be as small as one byte or as large as
the entire file. In particular, blocks may be of different
sizes.</p>
<p style="margin-left:6%; margin-top: 1em">The client skip
callback returns the number of bytes actually skipped, which
may be much smaller than the skip requested. The only
requirement is that the skip not be larger. In particular,
clients are allowed to return zero for any skip that they
don&rsquo;t want to handle. The skip callback must never be
invoked with a negative value.</p>
<p style="margin-left:6%; margin-top: 1em">Keep in mind
that not all clients are reading from disk: clients reading
from networks may provide different-sized blocks on every
request and cannot skip at all; advanced clients may use
mmap(2) to read the entire file into memory at once and
return the entire file to libarchive as a single block;
other clients may begin asynchronous I/O operations for the
next block on each request.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Decompresssion
Layer</b> <br>
The decompression layer not only handles decompression, it
also buffers data so that the format handlers see a much
nicer I/O model. The decompression API is a two stage
peek/consume model. A read_ahead request specifies a minimum
read amount; the decompression layer must provide a pointer
to at least that much data. If more data is immediately
available, it should return more: the format layer handles
bulk data reads by asking for a minimum of one byte and then
copying as much data as is available.</p>
<p style="margin-left:6%; margin-top: 1em">A subsequent
call to the <b>consume</b>() function advances the read
pointer. Note that data returned from a <b>read_ahead</b>()
call is guaranteed to remain in place until the next call to
<b>read_ahead</b>(). Intervening calls to <b>consume</b>()
should not cause the data to move.</p>
<p style="margin-left:6%; margin-top: 1em">Skip requests
must always be handled exactly. Decompression handlers that
cannot seek forward should not register a skip handler; the
API layer fills in a generic skip handler that reads and
discards data.</p>
<p style="margin-left:6%; margin-top: 1em">A decompression
handler has a specific lifecycle:</p>
<p>Registration/Configuration</p>
<p style="margin-left:17%;">When the client invokes the
public support function, the decompression handler invokes
the internal <b>__archive_read_register_compression</b>()
function to provide bid and initialization functions. This
function returns <b>NULL</b> on error or else a pointer to a
<b>struct decompressor_t</b>. This structure contains a
<i>void * config</i> slot that can be used for storing any
customization information.</p>
<p>Bid</p>
<p style="margin-left:17%; margin-top: 1em">The bid
function is invoked with a pointer and size of a block of
data. The decompressor can access its config data through
the <i>decompressor</i> element of the <b>archive_read</b>
object. The bid function is otherwise stateless. In
particular, it must not perform any I/O operations.</p>
<p style="margin-left:17%; margin-top: 1em">The value
returned by the bid function indicates its suitability for
handling this data stream. A bid of zero will ensure that
this decompressor is never invoked. Return zero if magic
number checks fail. Otherwise, your initial implementation
should return the number of bits actually checked. For
example, if you verify two full bytes and three bits of
another byte, bid 19. Note that the initial block may be
very short; be careful to only inspect the data you are
given. (The current decompressors require two bytes for
correct bidding.)</p>
<p>Initialize</p>
<p style="margin-left:17%;">The winning bidder will have
its init function called. This function should initialize
the remaining slots of the <i>struct decompressor_t</i>
object pointed to by the <i>decompressor</i> element of the
<i>archive_read</i> object. In particular, it should
allocate any working data it needs in the <i>data</i> slot
of that structure. The init function is called with the
block of data that was used for tasting. At this point, the
decompressor is responsible for all I/O requests to the
client callbacks. The decompressor is free to read more data
as and when necessary.</p>
<p>Satisfy I/O requests</p>
<p style="margin-left:17%;">The format handler will invoke
the <i>read_ahead</i>, <i>consume</i>, and <i>skip</i>
functions as needed.</p>
<p>Finish</p>
<p style="margin-left:17%; margin-top: 1em">The finish
method is called only once when the archive is closed. It
should release anything stored in the <i>data</i> and
<i>config</i> slots of the <i>decompressor</i> object. It
should not invoke the client close callback.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Format
Layer</b> <br>
The read formats have a similar lifecycle to the
decompression handlers:</p>
<p>Registration</p>
<p style="margin-left:17%;">Allocate your private data and
initialize your pointers.</p>
<p>Bid</p>
<p style="margin-left:17%; margin-top: 1em">Formats bid by
invoking the <b>read_ahead</b>() decompression method but
not calling the <b>consume</b>() method. This allows each
bidder to look ahead in the input stream. Bidders should not
look further ahead than necessary, as long look aheads put
pressure on the decompression layer to buffer lots of data.
Most formats only require a few hundred bytes of look ahead;
look aheads of a few kilobytes are reasonable. (The ISO9660
reader sometimes looks ahead by 48k, which should be
considered an upper limit.)</p>
<p>Read header</p>
<p style="margin-left:17%;">The header read is usually the
most complex part of any format. There are a few strategies
worth mentioning: For formats such as tar or cpio, reading
and parsing the header is straightforward since headers
alternate with data. For formats that store all header data
at the beginning of the file, the first header read request
may have to read all headers into memory and store that
data, sorted by the location of the file data. Subsequent
header read requests will skip forward to the beginning of
the file data and return the corresponding header.</p>
<p>Read Data</p>
<p style="margin-left:17%;">The read data interface
supports sparse files; this requires that each call return a
block of data specifying the file offset and size. This may
require you to carefully track the location so that you can
return accurate file offsets for each read. Remember that
the decompressor will return as much data as it has.
Generally, you will want to request one byte, examine the
return value to see how much data is available, and possibly
trim that to the amount you can use. You should invoke
consume for each block just before you return it.</p>
<p>Skip All Data</p>
<p style="margin-left:17%;">The skip data call should skip
over all file data and trailing padding. This is called
automatically by the API layer just before each header read.
It is also called in response to the client calling the
public <b>data_skip</b>() function.</p>
<p>Cleanup</p>
<p style="margin-left:17%;">On cleanup, the format should
release all of its allocated memory.</p>
<p style="margin-left:6%; margin-top: 1em"><b>API Layer</b>
<br>
XXX to do XXX</p>
<p style="margin-top: 1em"><b>WRITE ARCHITECTURE</b></p>
<p style="margin-left:6%;">The write API has a similar set
of four layers: an API layer, a format layer, a compression
layer, and an I/O layer. The registration here is much
simpler because only one format and one compression can be
registered at a time.</p>
<p style="margin-left:6%; margin-top: 1em"><b>I/O Layer and
Client Callbacks</b> <br>
XXX To be written XXX</p>
<p style="margin-left:6%; margin-top: 1em"><b>Compression
Layer</b> <br>
XXX To be written XXX</p>
<p style="margin-left:6%; margin-top: 1em"><b>Format
Layer</b> <br>
XXX To be written XXX</p>
<p style="margin-left:6%; margin-top: 1em"><b>API Layer</b>
<br>
XXX To be written XXX</p>
<p style="margin-top: 1em"><b>WRITE_DISK
ARCHITECTURE</b></p>
<p style="margin-left:6%;">The write_disk API is intended
to look just like the write API to clients. Since it does
not handle multiple formats or compression, it is not
layered internally.</p>
<p style="margin-top: 1em"><b>GENERAL SERVICES</b></p>
<p style="margin-left:6%;">The <b>archive_read</b>,
<b>archive_write</b>, and <b>archive_write_disk</b> objects
all contain an initial <b>archive</b> object which provides
common support for a set of standard services. (Recall that
ANSI/ISO C90 guarantees that you can cast freely between a
pointer to a structure and a pointer to the first element of
that structure.) The <b>archive</b> object has a magic value
that indicates which API this object is associated with,
slots for storing error information, and function pointers
for virtualized API functions.</p>
<p style="margin-top: 1em"><b>MISCELLANEOUS NOTES</b></p>
<p style="margin-left:6%;">Connecting existing archiving
libraries into libarchive is generally quite difficult. In
particular, many existing libraries strongly assume that you
are reading from a file; they seek forwards and backwards as
necessary to locate various pieces of information. In
contrast, libarchive never seeks backwards in its input,
which sometimes requires very different approaches.</p>
<p style="margin-left:6%; margin-top: 1em">For example,
libarchive&rsquo;s ISO9660 support operates very differently
from most ISO9660 readers. The libarchive support utilizes a
work-queue design that keeps a list of known entries sorted
by their location in the input. Whenever libarchive&rsquo;s
ISO9660 implementation is asked for the next header, checks
this list to find the next item on the disk. Directories are
parsed when they are encountered and new items are added to
the list. This design relies heavily on the ISO9660 image
being optimized so that directories always occur earlier on
the disk than the files they describe.</p>
<p style="margin-left:6%; margin-top: 1em">Depending on the
specific format, such approaches may not be possible. The
ZIP format specification, for example, allows archivers to
store key information only at the end of the file. In
theory, it is possible to create ZIP archives that cannot be
read without seeking. Fortunately, such archives are very
rare, and libarchive can read most ZIP archives, though it
cannot always extract as much information as a dedicated ZIP
program.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">archive_entry(3),
archive_read(3), archive_write(3), archive_write_disk(3),
libarchive(3)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
first appeared in FreeBSD&nbsp;5.3.</p>
<p style="margin-top: 1em"><b>AUTHORS</b></p>
<p style="margin-left:6%;">The <b>libarchive</b> library
was written by Tim Kientzle &lt;kientzle@acm.org&gt;.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
January&nbsp;26, 2011 BSD</p>
<hr>
</body>
</html>

View file

@ -1,378 +0,0 @@
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Fri Dec 9 13:39:24 2022 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title></title>
</head>
<body>
<hr>
<p>MTREE(5) BSD File Formats Manual MTREE(5)</p>
<p style="margin-top: 1em"><b>NAME</b></p>
<p style="margin-left:6%;"><b>mtree</b> &mdash; format of
mtree dir hierarchy files</p>
<p style="margin-top: 1em"><b>DESCRIPTION</b></p>
<p style="margin-left:6%;">The <b>mtree</b> format is a
textual format that describes a collection of filesystem
objects. Such files are typically used to create or verify
directory hierarchies.</p>
<p style="margin-left:6%; margin-top: 1em"><b>General
Format</b> <br>
An <b>mtree</b> file consists of a series of lines, each
providing information about a single filesystem object.
Leading whitespace is always ignored.</p>
<p style="margin-left:6%; margin-top: 1em">When encoding
file or pathnames, any backslash character or character
outside of the 95 printable ASCII characters must be encoded
as a backslash followed by three octal digits. When reading
mtree files, any appearance of a backslash followed by three
octal digits should be converted into the corresponding
character.</p>
<p style="margin-left:6%; margin-top: 1em">Each line is
interpreted independently as one of the following types:</p>
<p style="margin-top: 1em">Blank</p>
<p style="margin-left:22%; margin-top: 1em">Blank lines are
ignored.</p>
<p style="margin-top: 1em">Comment</p>
<p style="margin-left:22%; margin-top: 1em">Lines beginning
with <b>#</b> are ignored.</p>
<p style="margin-top: 1em">Special</p>
<p style="margin-left:22%; margin-top: 1em">Lines beginning
with <b>/</b> are special commands that influence the
interpretation of later lines.</p>
<p style="margin-top: 1em">Relative</p>
<p style="margin-left:22%; margin-top: 1em">If the first
whitespace-delimited word has no <b>/</b> characters, it is
the name of a file in the current directory. Any relative
entry that describes a directory changes the current
directory.</p>
<p style="margin-top: 1em">dot-dot</p>
<p style="margin-left:22%; margin-top: 1em">As a special
case, a relative entry with the filename <i>..</i> changes
the current directory to the parent directory. Options on
dot-dot entries are always ignored.</p>
<p style="margin-top: 1em">Full</p>
<p style="margin-left:22%; margin-top: 1em">If the first
whitespace-delimited word has a <b>/</b> character after the
first character, it is the pathname of a file relative to
the starting directory. There can be multiple full entries
describing the same file.</p>
<p style="margin-left:6%; margin-top: 1em">Some tools that
process <b>mtree</b> files may require that multiple lines
describing the same file occur consecutively. It is not
permitted for the same file to be mentioned using both a
relative and a full file specification.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Special
commands</b> <br>
Two special commands are currently defined:</p>
<p style="margin-top: 1em"><b>/set</b></p>
<p style="margin-left:22%; margin-top: 1em">This command
defines default values for one or more keywords. It is
followed on the same line by one or more
whitespace-separated keyword definitions. These definitions
apply to all following files that do not specify a value for
that keyword.</p>
<p style="margin-top: 1em"><b>/unset</b></p>
<p style="margin-left:22%; margin-top: 1em">This command
removes any default value set by a previous <b>/set</b>
command. It is followed on the same line by one or more
keywords separated by whitespace.</p>
<p style="margin-left:6%; margin-top: 1em"><b>Keywords</b>
<br>
After the filename, a full or relative entry consists of
zero or more whitespace-separated keyword definitions. Each
such definition consists of a key from the following list
immediately followed by an &rsquo;=&rsquo; sign and a value.
Software programs reading mtree files should warn about
unrecognized keywords.</p>
<p style="margin-left:6%; margin-top: 1em">Currently
supported keywords are as follows:</p>
<p style="margin-top: 1em"><b>cksum</b></p>
<p style="margin-left:22%; margin-top: 1em">The checksum of
the file using the default algorithm specified by the
cksum(1) utility.</p>
<p style="margin-top: 1em"><b>device</b></p>
<p style="margin-left:22%; margin-top: 1em">The device
number for <b>block</b> or <b>char</b> file types. The value
must be one of the following forms:</p>
<p style="margin-top: 1em"><i>format</i>,<i>major</i>,<i>minor</i>[
<br>
,<i>subunit</i>]</p>
<p style="margin-left:29%;">A device with <i>major</i>,
<i>minor</i> and optional <i>subunit</i> fields. Their
meaning is specified by the operating&rsquo;s system
<i>format</i>. See below for valid formats.</p>
<p style="margin-top: 1em"><i>number</i></p>
<p style="margin-left:29%;">Opaque number (as stored on the
file system).</p>
<p style="margin-left:22%; margin-top: 1em">The following
values for <i>format</i> are recognized: <b>native</b>,
<b>386bsd</b>, <b>4bsd</b>, <b>bsdos</b>, <b>freebsd</b>,
<b>hpux</b>, <b>isc</b>, <b>linux</b>, <b>netbsd</b>,
<b>osf1</b>, <b>sco</b>, <b>solaris</b>, <b>sunos</b>,
<b>svr3</b>, <b>svr4</b>, and <b>ultrix</b>.</p>
<p style="margin-left:22%; margin-top: 1em">See mknod(8)
for more details.</p>
<p style="margin-top: 1em"><b>contents</b></p>
<p style="margin-left:22%; margin-top: 1em">The full
pathname of a file that holds the contents of this file.</p>
<p style="margin-top: 1em"><b>flags</b></p>
<p style="margin-left:22%; margin-top: 1em">The file flags
as a symbolic name. See chflags(1) for information on these
names. If no flags are to be set the string
&ldquo;none&rdquo; may be used to override the current
default.</p>
<p style="margin-top: 1em"><b>gid</b></p>
<p style="margin-left:22%; margin-top: 1em">The file group
as a numeric value.</p>
<p style="margin-top: 1em"><b>gname</b></p>
<p style="margin-left:22%; margin-top: 1em">The file group
as a symbolic name.</p>
<p style="margin-top: 1em"><b>ignore</b></p>
<p style="margin-left:22%; margin-top: 1em">Ignore any file
hierarchy below this file.</p>
<p style="margin-top: 1em"><b>inode</b></p>
<p style="margin-left:22%; margin-top: 1em">The inode
number.</p>
<p style="margin-top: 1em"><b>link</b></p>
<p style="margin-left:22%; margin-top: 1em">The target of
the symbolic link when type=link.</p>
<p style="margin-top: 1em"><b>md5</b></p>
<p style="margin-left:22%; margin-top: 1em">The MD5 message
digest of the file.</p>
<p style="margin-top: 1em"><b>md5digest</b></p>
<p style="margin-left:22%; margin-top: 1em">A synonym for
<b>md5</b>.</p>
<p style="margin-top: 1em"><b>mode</b></p>
<p style="margin-left:22%; margin-top: 1em">The current
file&rsquo;s permissions as a numeric (octal) or symbolic
value.</p>
<p style="margin-top: 1em"><b>nlink</b></p>
<p style="margin-left:22%; margin-top: 1em">The number of
hard links the file is expected to have.</p>
<p style="margin-top: 1em"><b>nochange</b></p>
<p style="margin-left:22%; margin-top: 1em">Make sure this
file or directory exists but otherwise ignore all
attributes.</p>
<p style="margin-top: 1em"><b>optional</b></p>
<p style="margin-left:22%; margin-top: 1em">The file is
optional; do not complain about the file if it is not in the
file hierarchy.</p>
<p style="margin-top: 1em"><b>resdevice</b></p>
<p style="margin-left:22%; margin-top: 1em">The
&ldquo;resident&rdquo; device number of the file, e.g. the
ID of the device that contains the file. Its format is the
same as the one for <b>device</b>.</p>
<p style="margin-top: 1em"><b>ripemd160digest</b></p>
<p style="margin-left:22%;">The RIPEMD160 message digest of
the file.</p>
<p style="margin-top: 1em"><b>rmd160</b></p>
<p style="margin-left:22%; margin-top: 1em">A synonym for
<b>ripemd160digest</b>.</p>
<p style="margin-top: 1em"><b>rmd160digest</b></p>
<p style="margin-left:22%;">A synonym for
<b>ripemd160digest</b>.</p>
<p style="margin-top: 1em"><b>sha1</b></p>
<p style="margin-left:22%; margin-top: 1em">The FIPS 160-1
(&ldquo;SHA-1&rdquo;) message digest of the file.</p>
<p style="margin-top: 1em"><b>sha1digest</b></p>
<p style="margin-left:22%; margin-top: 1em">A synonym for
<b>sha1</b>.</p>
<p style="margin-top: 1em"><b>sha256</b></p>
<p style="margin-left:22%; margin-top: 1em">The FIPS 180-2
(&ldquo;SHA-256&rdquo;) message digest of the file.</p>
<p style="margin-top: 1em"><b>sha256digest</b></p>
<p style="margin-left:22%;">A synonym for
<b>sha256</b>.</p>
<p style="margin-top: 1em"><b>sha384</b></p>
<p style="margin-left:22%; margin-top: 1em">The FIPS 180-2
(&ldquo;SHA-384&rdquo;) message digest of the file.</p>
<p style="margin-top: 1em"><b>sha384digest</b></p>
<p style="margin-left:22%;">A synonym for
<b>sha384</b>.</p>
<p style="margin-top: 1em"><b>sha512</b></p>
<p style="margin-left:22%; margin-top: 1em">The FIPS 180-2
(&ldquo;SHA-512&rdquo;) message digest of the file.</p>
<p style="margin-top: 1em"><b>sha512digest</b></p>
<p style="margin-left:22%;">A synonym for
<b>sha512</b>.</p>
<p style="margin-top: 1em"><b>size</b></p>
<p style="margin-left:22%; margin-top: 1em">The size, in
bytes, of the file.</p>
<p style="margin-top: 1em"><b>time</b></p>
<p style="margin-left:22%; margin-top: 1em">The last
modification time of the file.</p>
<p style="margin-top: 1em"><b>type</b></p>
<p style="margin-left:22%; margin-top: 1em">The type of the
file; may be set to any one of the following:</p>
<p style="margin-top: 1em"><b>block</b></p>
<p style="margin-left:37%; margin-top: 1em">block special
device</p>
<p><b>char</b></p>
<p style="margin-left:37%; margin-top: 1em">character
special device</p>
<p><b>dir</b></p>
<p style="margin-left:37%; margin-top: 1em">directory</p>
<p><b>fifo</b></p>
<p style="margin-left:37%; margin-top: 1em">fifo</p>
<p><b>file</b></p>
<p style="margin-left:37%; margin-top: 1em">regular
file</p>
<p><b>link</b></p>
<p style="margin-left:37%; margin-top: 1em">symbolic
link</p>
<p><b>socket</b></p>
<p style="margin-left:37%; margin-top: 1em">socket</p>
<p style="margin-top: 1em"><b>uid</b></p>
<p style="margin-left:22%; margin-top: 1em">The file owner
as a numeric value.</p>
<p style="margin-top: 1em"><b>uname</b></p>
<p style="margin-left:22%; margin-top: 1em">The file owner
as a symbolic name.</p>
<p style="margin-top: 1em"><b>SEE ALSO</b></p>
<p style="margin-left:6%;">cksum(1), find(1), mtree(8)</p>
<p style="margin-top: 1em"><b>HISTORY</b></p>
<p style="margin-left:6%;">The <b>mtree</b> utility
appeared in 4.3BSD-Reno. The MD5 digest capability was added
in FreeBSD&nbsp;2.1, in response to the widespread use of
programs which can spoof cksum(1). The SHA-1 and RIPEMD160
digests were added in FreeBSD&nbsp;4.0, as new attacks have
demonstrated weaknesses in MD5. The SHA-256 digest was added
in FreeBSD&nbsp;6.0. Support for file flags was added in
FreeBSD&nbsp;4.0, and mostly comes from NetBSD. The
&ldquo;full&rdquo; entry format was added by NetBSD.</p>
<p style="margin-left:6%; margin-top: 1em">BSD
September&nbsp;4, 2013 BSD</p>
<hr>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,133 +0,0 @@
default: all
archive_entry.3: ../mdoc2man.awk ../../libarchive/archive_entry.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry.3 > archive_entry.3
archive_entry_acl.3: ../mdoc2man.awk ../../libarchive/archive_entry_acl.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_acl.3 > archive_entry_acl.3
archive_entry_linkify.3: ../mdoc2man.awk ../../libarchive/archive_entry_linkify.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_linkify.3 > archive_entry_linkify.3
archive_entry_misc.3: ../mdoc2man.awk ../../libarchive/archive_entry_misc.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_misc.3 > archive_entry_misc.3
archive_entry_paths.3: ../mdoc2man.awk ../../libarchive/archive_entry_paths.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_paths.3 > archive_entry_paths.3
archive_entry_perms.3: ../mdoc2man.awk ../../libarchive/archive_entry_perms.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_perms.3 > archive_entry_perms.3
archive_entry_stat.3: ../mdoc2man.awk ../../libarchive/archive_entry_stat.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_stat.3 > archive_entry_stat.3
archive_entry_time.3: ../mdoc2man.awk ../../libarchive/archive_entry_time.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_entry_time.3 > archive_entry_time.3
archive_read.3: ../mdoc2man.awk ../../libarchive/archive_read.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read.3 > archive_read.3
archive_read_add_passphrase.3: ../mdoc2man.awk ../../libarchive/archive_read_add_passphrase.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_add_passphrase.3 > archive_read_add_passphrase.3
archive_read_data.3: ../mdoc2man.awk ../../libarchive/archive_read_data.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_data.3 > archive_read_data.3
archive_read_disk.3: ../mdoc2man.awk ../../libarchive/archive_read_disk.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_disk.3 > archive_read_disk.3
archive_read_extract.3: ../mdoc2man.awk ../../libarchive/archive_read_extract.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_extract.3 > archive_read_extract.3
archive_read_filter.3: ../mdoc2man.awk ../../libarchive/archive_read_filter.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_filter.3 > archive_read_filter.3
archive_read_format.3: ../mdoc2man.awk ../../libarchive/archive_read_format.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_format.3 > archive_read_format.3
archive_read_free.3: ../mdoc2man.awk ../../libarchive/archive_read_free.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_free.3 > archive_read_free.3
archive_read_header.3: ../mdoc2man.awk ../../libarchive/archive_read_header.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_header.3 > archive_read_header.3
archive_read_new.3: ../mdoc2man.awk ../../libarchive/archive_read_new.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_new.3 > archive_read_new.3
archive_read_open.3: ../mdoc2man.awk ../../libarchive/archive_read_open.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_open.3 > archive_read_open.3
archive_read_set_options.3: ../mdoc2man.awk ../../libarchive/archive_read_set_options.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_read_set_options.3 > archive_read_set_options.3
archive_util.3: ../mdoc2man.awk ../../libarchive/archive_util.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_util.3 > archive_util.3
archive_write.3: ../mdoc2man.awk ../../libarchive/archive_write.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write.3 > archive_write.3
archive_write_blocksize.3: ../mdoc2man.awk ../../libarchive/archive_write_blocksize.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_blocksize.3 > archive_write_blocksize.3
archive_write_data.3: ../mdoc2man.awk ../../libarchive/archive_write_data.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_data.3 > archive_write_data.3
archive_write_disk.3: ../mdoc2man.awk ../../libarchive/archive_write_disk.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_disk.3 > archive_write_disk.3
archive_write_filter.3: ../mdoc2man.awk ../../libarchive/archive_write_filter.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_filter.3 > archive_write_filter.3
archive_write_finish_entry.3: ../mdoc2man.awk ../../libarchive/archive_write_finish_entry.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_finish_entry.3 > archive_write_finish_entry.3
archive_write_format.3: ../mdoc2man.awk ../../libarchive/archive_write_format.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_format.3 > archive_write_format.3
archive_write_free.3: ../mdoc2man.awk ../../libarchive/archive_write_free.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_free.3 > archive_write_free.3
archive_write_header.3: ../mdoc2man.awk ../../libarchive/archive_write_header.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_header.3 > archive_write_header.3
archive_write_new.3: ../mdoc2man.awk ../../libarchive/archive_write_new.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_new.3 > archive_write_new.3
archive_write_open.3: ../mdoc2man.awk ../../libarchive/archive_write_open.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_open.3 > archive_write_open.3
archive_write_set_options.3: ../mdoc2man.awk ../../libarchive/archive_write_set_options.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_set_options.3 > archive_write_set_options.3
archive_write_set_passphrase.3: ../mdoc2man.awk ../../libarchive/archive_write_set_passphrase.3
awk -f ../mdoc2man.awk < ../../libarchive/archive_write_set_passphrase.3 > archive_write_set_passphrase.3
cpio.5: ../mdoc2man.awk ../../libarchive/cpio.5
awk -f ../mdoc2man.awk < ../../libarchive/cpio.5 > cpio.5
libarchive-formats.5: ../mdoc2man.awk ../../libarchive/libarchive-formats.5
awk -f ../mdoc2man.awk < ../../libarchive/libarchive-formats.5 > libarchive-formats.5
libarchive.3: ../mdoc2man.awk ../../libarchive/libarchive.3
awk -f ../mdoc2man.awk < ../../libarchive/libarchive.3 > libarchive.3
libarchive_changes.3: ../mdoc2man.awk ../../libarchive/libarchive_changes.3
awk -f ../mdoc2man.awk < ../../libarchive/libarchive_changes.3 > libarchive_changes.3
libarchive_internals.3: ../mdoc2man.awk ../../libarchive/libarchive_internals.3
awk -f ../mdoc2man.awk < ../../libarchive/libarchive_internals.3 > libarchive_internals.3
mtree.5: ../mdoc2man.awk ../../libarchive/mtree.5
awk -f ../mdoc2man.awk < ../../libarchive/mtree.5 > mtree.5
tar.5: ../mdoc2man.awk ../../libarchive/tar.5
awk -f ../mdoc2man.awk < ../../libarchive/tar.5 > tar.5
bsdtar.1: ../mdoc2man.awk ../../tar/bsdtar.1
awk -f ../mdoc2man.awk < ../../tar/bsdtar.1 > bsdtar.1
bsdcpio.1: ../mdoc2man.awk ../../cpio/bsdcpio.1
awk -f ../mdoc2man.awk < ../../cpio/bsdcpio.1 > bsdcpio.1
all: archive_entry.3 archive_entry_acl.3 archive_entry_linkify.3 archive_entry_misc.3 archive_entry_paths.3 archive_entry_perms.3 archive_entry_stat.3 archive_entry_time.3 archive_read.3 archive_read_add_passphrase.3 archive_read_data.3 archive_read_disk.3 archive_read_extract.3 archive_read_filter.3 archive_read_format.3 archive_read_free.3 archive_read_header.3 archive_read_new.3 archive_read_open.3 archive_read_set_options.3 archive_util.3 archive_write.3 archive_write_blocksize.3 archive_write_data.3 archive_write_disk.3 archive_write_filter.3 archive_write_finish_entry.3 archive_write_format.3 archive_write_free.3 archive_write_header.3 archive_write_new.3 archive_write_open.3 archive_write_set_options.3 archive_write_set_passphrase.3 cpio.5 libarchive-formats.5 libarchive.3 libarchive_changes.3 libarchive_internals.3 mtree.5 tar.5 bsdtar.1 bsdcpio.1

View file

@ -1,143 +0,0 @@
.TH ARCHIVE_ENTRY 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_entry_clear\fP,
\fB\%archive_entry_clone\fP,
\fB\%archive_entry_free\fP,
\fB\%archive_entry_new\fP
\- functions for managing archive entry descriptions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIstruct archive_entry *\fP
.br
\fB\%archive_entry_clear\fP(\fI\%struct\ archive_entry\ *\fP);
.br
\fIstruct archive_entry *\fP
.br
\fB\%archive_entry_clone\fP(\fI\%struct\ archive_entry\ *\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_free\fP(\fI\%struct\ archive_entry\ *\fP);
.br
\fIstruct archive_entry *\fP
.br
\fB\%archive_entry_new\fP(\fI\%void\fP);
.SH DESCRIPTION
.ad l
These functions create and manipulate data objects that
represent entries within an archive.
You can think of a
Tn struct archive_entry
as a heavy-duty version of
Tn struct stat:
it includes everything from
Tn struct stat
plus associated pathname, textual group and user names, etc.
These objects are used by
\fBlibarchive\fP(3)
to represent the metadata associated with a particular
entry in an archive.
.SS Create and Destroy
There are functions to allocate, destroy, clear, and copy
\fIarchive_entry\fP
objects:
.RS 5
.TP
\fB\%archive_entry_clear\fP()
Erases the object, resetting all internal fields to the
same state as a newly-created object.
This is provided to allow you to quickly recycle objects
without thrashing the heap.
.TP
\fB\%archive_entry_clone\fP()
A deep copy operation; all text fields are duplicated.
.TP
\fB\%archive_entry_free\fP()
Releases the
Tn struct archive_entry
object.
.TP
\fB\%archive_entry_new\fP()
Allocate and return a blank
Tn struct archive_entry
object.
.RE
.SS Function groups
Due to high number of functions, the accessor functions can be found in
man pages grouped by the purpose.
.RS 5
.TP
\fBarchive_entry_acl\fP(3)
Access Control List manipulation
.TP
\fBarchive_entry_paths\fP(3)
Path name manipulation
.TP
\fBarchive_entry_perms\fP(3)
User, group and mode manipulation
.TP
\fBarchive_entry_stat\fP(3)
Functions not in the other groups and copying to/from
Vt struct stat.
.TP
\fBarchive_entry_time\fP(3)
Time field manipulation
.RE
.PP
Most of the functions set or read entries in an object.
Such functions have one of the following forms:
.RS 5
.TP
\fB\%archive_entry_set_XXXX\fP()
Stores the provided data in the object.
In particular, for strings, the pointer is stored,
not the referenced string.
.TP
\fB\%archive_entry_copy_XXXX\fP()
As above, except that the referenced data is copied
into the object.
.TP
\fB\%archive_entry_XXXX\fP()
Returns the specified data.
In the case of strings, a const-qualified pointer to
the string is returned.
.RE
String data can be set or accessed as wide character strings
or normal
\fIchar\fP
strings.
The functions that use wide character strings are suffixed with
\fB_w\fP.
Note that these are different representations of the same data:
For example, if you store a narrow string and read the corresponding
wide string, the object will transparently convert formats
using the current locale.
Similarly, if you store a wide string and then store a
narrow string for the same data, the previously-set wide string will
be discarded in favor of the new data.
.SH SEE ALSO
.ad l
\fBarchive_entry_acl\fP(3),
\fBarchive_entry_paths\fP(3),
\fBarchive_entry_perms\fP(3),
\fBarchive_entry_time\fP(3),
\fBlibarchive\fP(3)
.SH HISTORY
.ad l
The
\fB\%libarchive\fP
library first appeared in
FreeBSD 5.3.
.SH AUTHORS
.ad l
-nosplit
The
\fB\%libarchive\fP
library was written by
Tim Kientzle \%<kientzle@acm.org.>

View file

@ -1,452 +0,0 @@
.TH ARCHIVE_ENTRY_ACL 3 "February 15, 2017" ""
.SH NAME
.ad l
\fB\%archive_entry_acl_add_entry\fP,
\fB\%archive_entry_acl_add_entry_w\fP,
\fB\%archive_entry_acl_clear\fP,
\fB\%archive_entry_acl_count\fP,
\fB\%archive_entry_acl_from_text\fP,
\fB\%archive_entry_acl_from_text_w\fP,
\fB\%archive_entry_acl_next\fP,
\fB\%archive_entry_acl_reset\fP,
\fB\%archive_entry_acl_to_text\fP,
\fB\%archive_entry_acl_to_text_w\fP,
\fB\%archive_entry_acl_types\fP
\- functions for manipulating Access Control Lists in archive entry descriptions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIvoid\fP
.br
\fB\%archive_entry_acl_add_entry\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP, \fI\%int\ permset\fP, \fI\%int\ tag\fP, \fI\%int\ qualifier\fP, \fI\%const\ char\ *name\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_acl_add_entry_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP, \fI\%int\ permset\fP, \fI\%int\ tag\fP, \fI\%int\ qualifier\fP, \fI\%const\ wchar_t\ *name\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_acl_clear\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_acl_count\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_acl_from_text\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *text\fP, \fI\%int\ type\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_acl_from_text_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *text\fP, \fI\%int\ type\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_acl_next\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP, \fI\%int\ *ret_type\fP, \fI\%int\ *ret_permset\fP, \fI\%int\ *ret_tag\fP, \fI\%int\ *ret_qual\fP, \fI\%const\ char\ **ret_name\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_acl_reset\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\ type\fP);
.br
\fIchar *\fP
.br
\fB\%archive_entry_acl_to_text\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%ssize_t\ *len_p\fP, \fI\%int\ flags\fP);
.br
\fIwchar_t *\fP
.br
\fB\%archive_entry_acl_to_text_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%ssize_t\ *len_p\fP, \fI\%int\ flags\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_acl_types\fP(\fI\%struct\ archive_entry\ *a\fP);
.SH DESCRIPTION
.ad l
The
``Access Control Lists (ACLs)''
extend the standard Unix permission model.
The ACL interface of
\fB\%libarchive\fP
supports both POSIX.1e and NFSv4 style ACLs.
Use of ACLs is restricted by
various levels of ACL support in operating systems, file systems and archive
formats.
.SS POSIX.1e Access Control Lists
A POSIX.1e ACL consists of a number of independent entries.
Each entry specifies the permission set as a bitmask of basic permissions.
Valid permissions in the
are:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_READ (.B r )
.TP
.BR ARCHIVE_ENTRY_ACL_WRITE (.B w )
.TP
.BR ARCHIVE_ENTRY_ACL_EXECUTE (.B x )
.RE
The permissions correspond to the normal Unix permissions.
.PP
The
specifies the principal to which the permission applies.
Valid values are:
.RS 5
It .BR ARCHIVE_ENTRY_ACL_USER
The user specified by the name field.
It .BR ARCHIVE_ENTRY_ACL_USER_OBJ
The owner of the file.
It .BR ARCHIVE_ENTRY_ACL_GROUP
The group specified by the name field.
It .BR ARCHIVE_ENTRY_ACL_GROUP_OBJ
The group which owns the file.
It .BR ARCHIVE_ENTRY_ACL_MASK
The maximum permissions to be obtained via group permissions.
It .BR ARCHIVE_ENTRY_ACL_OTHER
Any principal who is not the file owner or a member of the owning group.
.RE
.PP
The principals
.BR ARCHIVE_ENTRY_ACL_USER_OBJ,
.BR ARCHIVE_ENTRY_ACL_GROUP_OBJ
and
.BR ARCHIVE_ENTRY_ACL_OTHER
are equivalent to user, group and other in the classic Unix permission
model and specify non-extended ACL entries.
.PP
All files have an access ACL
(.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS.)
This specifies the permissions required for access to the file itself.
Directories have an additional ACL
(.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,)
which controls the initial access ACL for newly-created directory entries.
.SS NFSv4 Access Control Lists
A NFSv4 ACL consists of multiple individual entries called Access Control
Entries (ACEs).
.PP
There are four possible types of a NFSv4 ACE:
.RS 5
It .BR ARCHIVE_ENTRY_ACL_TYPE_ALLOW
Allow principal to perform actions requiring given permissions.
It .BR ARCHIVE_ENTRY_ACL_TYPE_DENY
Prevent principal from performing actions requiring given permissions.
It .BR ARCHIVE_ENTRY_ACL_TYPE_AUDIT
Log access attempts by principal which require given permissions.
It .BR ARCHIVE_ENTRY_ACL_TYPE_ALARM
Trigger a system alarm on access attempts by principal which require given
permissions.
.RE
.PP
The
specifies the principal to which the permission applies.
Valid values are:
.RS 5
It .BR ARCHIVE_ENTRY_ACL_USER
The user specified by the name field.
It .BR ARCHIVE_ENTRY_ACL_USER_OBJ
The owner of the file.
It .BR ARCHIVE_ENTRY_ACL_GROUP
The group specified by the name field.
It .BR ARCHIVE_ENTRY_ACL_GROUP_OBJ
The group which owns the file.
It .BR ARCHIVE_ENTRY_ACL_EVERYONE
Any principal who is not the file owner or a member of the owning group.
.RE
.PP
Entries with the
.BR ARCHIVE_ENTRY_ACL_USER
or
.BR ARCHIVE_ENTRY_ACL_GROUP
tag store the user and group name in the
string and optionally the user or group ID in the
integer.
.PP
NFSv4 ACE permissions and flags are stored in the same
bitfield.
Some permissions share the same constant and permission character
but have different effect on directories than on files.
The following ACE permissions are supported:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_READ_DATA (.B r )
Read data (file).
.TP
.BR ARCHIVE_ENTRY_ACL_LIST_DIRECTORY (.B r )
List entries (directory).
.TP
ARCHIVE_ENTRY_ACL_WRITE_DATA (.B w )
Write data (file).
.TP
ARCHIVE_ENTRY_ACL_ADD_FILE (.B w )
Create files (directory).
.TP
.BR ARCHIVE_ENTRY_ACL_EXECUTE (.B x )
Execute file or change into a directory.
.TP
.BR ARCHIVE_ENTRY_ACL_APPEND_DATA (.B p )
Append data (file).
.TP
.BR ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY (.B p )
Create subdirectories (directory).
.TP
.BR ARCHIVE_ENTRY_ACL_DELETE_CHILD (.B D )
Remove files and subdirectories inside a directory.
.TP
.BR ARCHIVE_ENTRY_ACL_DELETE (.B d )
Remove file or directory.
.TP
.BR ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES (.B a )
Read file or directory attributes.
.TP
.BR ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES (.B A )
Write file or directory attributes.
.TP
.BR ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS (.B R )
Read named file or directory attributes.
.TP
.BR ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS (.B W )
Write named file or directory attributes.
.TP
.BR ARCHIVE_ENTRY_ACL_READ_ACL (.B c )
Read file or directory ACL.
.TP
.BR ARCHIVE_ENTRY_ACL_WRITE_ACL (.B C )
Write file or directory ACL.
.TP
.BR ARCHIVE_ENTRY_ACL_WRITE_OWNER (.B o )
Change owner of a file or directory.
.TP
.BR ARCHIVE_ENTRY_ACL_SYNCHRONIZE (.B s )
Use synchronous I/O.
.RE
.PP
The following NFSv4 ACL inheritance flags are supported:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT (.B f )
Inherit parent directory ACE to files.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT (.B d )
Inherit parent directory ACE to subdirectories.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY (.B i )
Only inherit, do not apply the permission on the directory itself.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT (.B n )
Do not propagate inherit flags.
Only first-level entries inherit ACLs.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS (.B S )
Trigger alarm or audit on successful access.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS (.B F )
Trigger alarm or audit on failed access.
.TP
.BR ARCHIVE_ENTRY_ACL_ENTRY_INHERITED (.B I )
Mark that ACE was inherited.
.RE
.SS Functions
\fB\%archive_entry_acl_add_entry\fP()
and
\fB\%archive_entry_acl_add_entry_w\fP()
add a single ACL entry.
For the access ACL and non-extended principals, the classic Unix permissions
are updated.
An archive entry cannot contain both POSIX.1e and NFSv4 ACL entries.
.PP
\fB\%archive_entry_acl_clear\fP()
removes all ACL entries and resets the enumeration pointer.
.PP
\fB\%archive_entry_acl_count\fP()
counts the ACL entries that have the given type mask.
can be the bitwise-or of
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
.RE
for POSIX.1e ACLs and
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_ALLOW
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_DENY
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_AUDIT
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_ALARM
.RE
for NFSv4 ACLs.
For POSIX.1e ACLs if
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
is included and at least one extended ACL entry is found,
the three non-extended ACLs are added.
.PP
\fB\%archive_entry_acl_from_text\fP()
and
\fB\%archive_entry_acl_from_text_w\fP()
add new
(or merge with existing)
ACL entries from
(wide)
text.
The argument
may take one of the following values:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_NFS4
.RE
Supports all formats that can be created with
\fB\%archive_entry_acl_to_text\fP()
or respectively
\fB\%archive_entry_acl_to_text_w\fP().
Existing ACL entries are preserved.
To get a clean new ACL from text
\fB\%archive_entry_acl_clear\fP()
must be called first.
Entries prefixed with
``default:''
are treated as
.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
unless
is
.BR ARCHIVE_ENTRY_ACL_TYPE_NFS4.
Invalid entries, non-parseable ACL entries and entries beginning with
the
Sq #
character
(comments)
are skipped.
.PP
\fB\%archive_entry_acl_next\fP()
return the next entry of the ACL list.
This functions may only be called after
\fB\%archive_entry_acl_reset\fP()
has indicated the presence of extended ACL entries.
.PP
\fB\%archive_entry_acl_reset\fP()
prepare reading the list of ACL entries with
\fB\%archive_entry_acl_next\fP().
The function returns 0 if no non-extended ACLs are found.
In this case, the access permissions should be obtained by
\fBarchive_entry_mode\fP(3)
or set using
\fBchmod\fP(2).
Otherwise, the function returns the same value as
\fB\%archive_entry_acl_count\fP().
.PP
\fB\%archive_entry_acl_to_text\fP()
and
\fB\%archive_entry_acl_to_text_w\fP()
convert the ACL entries for the given type into a
(wide)
string of ACL entries separated by newline.
If the pointer
is not NULL, then the function shall return the length of the string
(not including the NULL terminator)
in the location pointed to by
.
The
argument is a bitwise-or.
.PP
The following flags are effective only on POSIX.1e ACL:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
Output access ACLs.
.TP
.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
Output POSIX.1e default ACLs.
.TP
.BR ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT
Prefix each default ACL entry with the word
``default:''.
.TP
.BR ARCHIVE_ENTRY_ACL_STYLE_SOLARIS
The mask and other ACLs don not contain a double colon.
.RE
.PP
The following flags are effecive only on NFSv4 ACL:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_STYLE_COMPACT
Do not output minus characters for unset permissions and flags in NFSv4 ACL
permission and flag fields.
.RE
.PP
The following flags are effective on both POSIX.1e and NFSv4 ACL:
.RS 5
.TP
.BR ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
Add an additional colon-separated field containing the user or group id.
.TP
.BR ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA
Separate ACL entries with comma instead of newline.
.RE
.PP
If the archive entry contains NFSv4 ACLs, all types of NFSv4 ACLs are returned.
It the entry contains POSIX.1e ACLs and none of the flags
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
or
.BR ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
are specified, both access and default entries are returned and default entries
are prefixed with
``default:''.
.PP
\fB\%archive_entry_acl_types\fP()
get ACL entry types contained in an archive entry's ACL.
As POSIX.1e and NFSv4
ACL entries cannot be mixed, this function is a very efficient way to detect if
an ACL already contains POSIX.1e or NFSv4 ACL entries.
.SH RETURN VALUES
.ad l
\fB\%archive_entry_acl_count\fP()
and
\fB\%archive_entry_acl_reset\fP()
returns the number of ACL entries that match the given type mask.
For POSIX.1e ACLS if the type mask includes
.BR ARCHIVE_ENTRY_ACL_TYPE_ACCESS
and at least one extended ACL entry exists, the three classic Unix
permissions are counted.
.PP
\fB\%archive_entry_acl_from_text\fP()
and
\fB\%archive_entry_acl_from_text_w\fP()
return
.BR ARCHIVE_OK
if all entries were successfully parsed and
.BR ARCHIVE_WARN
if one or more entries were invalid or non-parseable.
.PP
\fB\%archive_entry_acl_next\fP()
returns
.BR ARCHIVE_OK
on success,
.BR ARCHIVE_EOF
if no more ACL entries exist
and
.BR ARCHIVE_WARN
if
\fB\%archive_entry_acl_reset\fP()
has not been called first.
.PP
\fB\%archive_entry_acl_to_text\fP()
returns a string representing the ACL entries matching the given type and
flags on success or NULL on error.
.PP
\fB\%archive_entry_acl_to_text_w\fP()
returns a wide string representing the ACL entries matching the given type
and flags on success or NULL on error.
.PP
\fB\%archive_entry_acl_types\fP()
returns a bitmask of ACL entry types or 0 if archive entry has no ACL entries.
.SH SEE ALSO
.ad l
\fBarchive_entry\fP(3),
\fBlibarchive\fP(3)

View file

@ -1,203 +0,0 @@
.TH ARCHIVE_ENTRY_LINKIFY 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_entry_linkresolver\fP,
\fB\%archive_entry_linkresolver_new\fP,
\fB\%archive_entry_linkresolver_set_strategy\fP,
\fB\%archive_entry_linkresolver_free\fP,
\fB\%archive_entry_linkify\fP
\- hardlink resolver functions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIstruct archive_entry_linkresolver *\fP
.br
\fB\%archive_entry_linkresolver_new\fP(\fI\%void\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_linkresolver_set_strategy\fP(\fI\%struct\ archive_entry_linkresolver\ *resolver\fP, \fI\%int\ format\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_linkresolver_free\fP(\fI\%struct\ archive_entry_linkresolver\ *resolver\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_linkify\fP(\fI\%struct\ archive_entry_linkresolver\ *resolver\fP, \fI\%struct\ archive_entry\ **entry\fP, \fI\%struct\ archive_entry\ **sparse\fP);
.SH DESCRIPTION
.ad l
Programs that want to create archives have to deal with hardlinks.
Hardlinks are handled in different ways by the archive formats.
The basic strategies are:
.RS 5
.IP 1.
Ignore hardlinks and store the body for each reference (old cpio, zip).
.IP 2.
Store the body the first time an inode is seen (ustar, pax).
.IP 3.
Store the body the last time an inode is seen (new cpio).
.RE
.PP
The
\fB\%archive_entry_linkresolver\fP
functions help by providing a unified interface and handling the complexity
behind the scene.
.PP
The
\fB\%archive_entry_linkresolver\fP
functions assume that
Vt archive_entry
instances have valid nlinks, inode and device values.
The inode and device value is used to match entries.
The nlinks value is used to determined if all references have been found and
if the internal references can be recycled.
.PP
The
\fB\%archive_entry_linkresolver_new\fP()
function allocates a new link resolver.
The instance can be freed using
\fB\%archive_entry_linkresolver_free\fP().
All deferred entries are flushed and the internal storage is freed.
.PP
The
\fB\%archive_entry_linkresolver_set_strategy\fP()
function selects the optimal hardlink strategy for the given format.
The format code can be obtained from
\fBarchive_format\fP(3).
The function can be called more than once, but it is recommended to
flush all deferred entries first.
.PP
The
\fB\%archive_entry_linkify\fP()
function is the core of
\fB\%archive_entry_linkresolver\fP.
The
\fB\%entry\fP()
argument points to the
Vt archive_entry
that should be written.
Depending on the strategy one of the following actions is taken:
.RS 5
.IP 1.
For the simple archive formats
\fI*entry\fP
is left unmodified and
\fI*sparse\fP
is set to
.BR NULL.
.IP 2.
For tar like archive formats,
\fI*sparse\fP
is set to
.BR NULL.
If
\fI*entry\fP
is
.BR NULL,
no action is taken.
If the hardlink count of
\fI*entry\fP
is larger than 1 and the file type is a regular file or symbolic link,
the internal list is searched for a matching inode.
If such an inode is found, the link count is decremented and the file size
of
\fI*entry\fP
is set to 0 to notify that no body should be written.
If no such inode is found, a copy of the entry is added to the internal cache
with a link count reduced by one.
.IP 3.
For new cpio like archive formats a value for
\fI*entry\fP
of
.BR NULL
is used to flush deferred entries.
In that case
\fI*entry\fP
is set to an arbitrary deferred entry and the entry itself is removed from the
internal list.
If the internal list is empty,
\fI*entry\fP
is set to
.BR NULL.
In either case,
\fI*sparse\fP
is set to
.BR NULL
and the function returns.
If the hardlink count of
\fI*entry\fP
is one or the file type is a directory or device,
\fI*sparse\fP
is set to
.BR NULL
and no further action is taken.
Otherwise, the internal list is searched for a matching inode.
If such an inode is not found, the entry is added to the internal list,
both
\fI*entry\fP
and
\fI*sparse\fP
are set to
.BR NULL
and the function returns.
If such an inode is found, the link count is decremented.
If it remains larger than one, the existing entry on the internal list
is swapped with
\fI*entry\fP
after retaining the link count.
The existing entry is returned in
\fI*entry\fP.
If the link count reached one, the new entry is also removed from the
internal list and returned in
\fI*sparse\fP.
Otherwise
\fI*sparse\fP
is set to
.BR NULL.
.RE
.PP
The general usage is therefore:
.RS 5
.IP 1.
For each new archive entry, call
\fB\%archive_entry_linkify\fP().
.IP 2.
Keep in mind that the entries returned may have a size of 0 now.
.IP 3.
If
\fI*entry\fP
is not
.BR NULL,
archive it.
.IP 4.
If
\fI*sparse\fP
is not
.BR NULL,
archive it.
.IP 5.
After all entries have been written to disk, call
\fB\%archive_entry_linkify\fP()
with
\fI*entry\fP
set to
.BR NULL
and archive the returned entry as long as it is not
.BR NULL.
.RE
.SH RETURN VALUES
.ad l
\fB\%archive_entry_linkresolver_new\fP()
returns
.BR NULL
on
\fBmalloc\fP(3)
failures.
.SH SEE ALSO
.ad l
\fBarchive_entry\fP(3)

View file

@ -1,49 +0,0 @@
.TH ARCHIVE_ENTRY_MISC 3 "April 15, 2019" ""
.SH NAME
.ad l
\fB\%archive_entry_symlink_type\fP,
\fB\%archive_entry_set_symlink_type\fP
\- miscellaneous functions for manipulating properties of archive_entry
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIint\fP
.br
\fB\%archive_entry_symlink_type\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_symlink_type\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int\fP);
.SH DESCRIPTION
.ad l
The function
\fB\%archive_entry_symlink_type\fP()
returns and the function
\fB\%archive_entry_set_symlink_type\fP()
sets the type of the symbolic link stored in an archive entry.
These functions
have special meaning on operating systems that support multiple symbolic link
types (e.g. Microsoft Windows).
.PP
Supported values are:
.RS 5
.TP
AE_SYMLINK_TYPE_UNDEFINED
Symbolic link target type is not defined (default on unix systems)
.TP
AE_SYMLINK_TYPE_FILE
Symbolic link points to a file
.TP
AE_SYMLINK_TYPE_DIRECTORY
Symbolic link points to a directory
.RE
.SH SEE ALSO
.ad l
\fBarchive_entry\fP(3),
\fBarchive_entry_paths\fP(3),
\fBarchive_entry_stat\fP(3),
\fBlibarchive\fP(3)

View file

@ -1,188 +0,0 @@
.TH ARCHIVE_ENTRY_PATHS 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_entry_hardlink\fP,
\fB\%archive_entry_hardlink_w\fP,
\fB\%archive_entry_set_hardlink\fP,
\fB\%archive_entry_copy_hardlink\fP,
\fB\%archive_entry_copy_hardlink_w\fP,
\fB\%archive_entry_update_hardlink_utf8\fP,
\fB\%archive_entry_set_link\fP,
\fB\%archive_entry_copy_link\fP,
\fB\%archive_entry_copy_link_w\fP,
\fB\%archive_entry_update_link_utf8\fP,
\fB\%archive_entry_pathname\fP,
\fB\%archive_entry_pathname_w\fP,
\fB\%archive_entry_set_pathname\fP,
\fB\%archive_entry_copy_pathname\fP,
\fB\%archive_entry_copy_pathname_w\fP,
\fB\%archive_entry_update_pathname_utf8\fP,
\fB\%archive_entry_sourcepath\fP,
\fB\%archive_entry_copy_sourcepath\fP,
\fB\%archive_entry_symlink\fP,
\fB\%archive_entry_symlink_w\fP,
\fB\%archive_entry_set_symlink\fP,
\fB\%archive_entry_copy_symlink\fP,
\fB\%archive_entry_copy_symlink_w\fP,
\fB\%archive_entry_update_symlink_utf8\fP
\- functions for manipulating path names in archive entry descriptions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIconst char *\fP
.br
\fB\%archive_entry_hardlink\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIconst wchar_t *\fP
.br
\fB\%archive_entry_hardlink_w\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_hardlink\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_hardlink\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_hardlink_w\fP(\fI\%struct\ archive_entry\ *a\ \fP, \fI\%const\fP, \fI\%wchar_t\fP, \fI\%*path"\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_update_hardlink_utf8\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_link\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_link\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%\ const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_link_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%\ const\ wchar_t\ *path\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_update_link_utf8\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%\ const\ char\ *path\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_pathname\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIconst wchar_t *\fP
.br
\fB\%archive_entry_pathname_w\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_pathname\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_pathname\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_pathname_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *path\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_update_pathname_utf8\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_sourcepath\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_sourcepath\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_symlink\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIconst wchar_t *\fP
.br
\fB\%archive_entry_symlink_w\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_symlink\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_symlink\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_symlink_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *path\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_update_symlink_utf8\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *path\fP);
.SH DESCRIPTION
.ad l
Path names supported by
\fBarchive_entry\fP(3):
.RS 5
.TP
hardlink
Destination of the hardlink.
.TP
link
Update only.
For a symlink, update the destination.
Otherwise, make the entry a hardlink and alter
the destination for that.
.TP
pathname
Path in the archive
.TP
sourcepath
Path on the disk for use by
\fBarchive_read_disk\fP(3).
.TP
symlink
Destination of the symbolic link.
.RE
.PP
Path names can be provided in one of three different ways:
.RS 5
.TP
char *
Multibyte strings in the current locale.
.TP
wchar_t *
Wide character strings in the current locale.
The accessor functions are named
\fB\%XXX_w\fP().
.TP
UTF-8
Unicode strings encoded as UTF-8.
These are convenience functions to update both the multibyte and wide
character strings at the same time.
.RE
.PP
The sourcepath is a pure filesystem concept and never stored in an
archive directly.
.PP
For that reason, it is only available as multibyte string.
The link path is a convenience function for conditionally setting
hardlink or symlink destination.
It doesn't have a corresponding get accessor function.
.PP
\fB\%archive_entry_set_XXX\fP()
is an alias for
\fB\%archive_entry_copy_XXX\fP().
.SH SEE ALSO
.ad l
\fBarchive_entry\fP(3),
\fBlibarchive\fP(3)

View file

@ -1,231 +0,0 @@
.TH ARCHIVE_ENTRY_PERMS 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_entry_gid\fP,
\fB\%archive_entry_set_gid\fP,
\fB\%archive_entry_uid\fP,
\fB\%archive_entry_set_uid\fP,
\fB\%archive_entry_perm\fP,
\fB\%archive_entry_set_perm\fP,
\fB\%archive_entry_strmode\fP,
\fB\%archive_entry_uname\fP,
\fB\%archive_entry_uname_w\fP,
\fB\%archive_entry_set_uname\fP,
\fB\%archive_entry_copy_uname\fP,
\fB\%archive_entry_copy_uname_w\fP,
\fB\%archive_entry_update_uname_utf8\fP,
\fB\%archive_entry_gname\fP,
\fB\%archive_entry_gname_w\fP,
\fB\%archive_entry_set_gname\fP,
\fB\%archive_entry_copy_gname\fP,
\fB\%archive_entry_copy_gname_w\fP,
\fB\%archive_entry_update_gname_utf8\fP,
\fB\%archive_entry_fflags\fP,
\fB\%archive_entry_fflags_text\fP,
\fB\%archive_entry_set_fflags\fP,
\fB\%archive_entry_copy_fflags_text\fP,
\fB\%archive_entry_copy_fflags_text_w\fP
\- functions for manipulating ownership and permissions in archive entry descriptions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIgid_t\fP
.br
\fB\%archive_entry_gid\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_gid\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%gid_t\ gid\fP);
.br
\fIuid_t\fP
.br
\fB\%archive_entry_uid\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_uid\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%uid_t\ uid\fP);
.br
\fImode_t\fP
.br
\fB\%archive_entry_perm\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_perm\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%mode_t\ mode\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_strmode\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_gname\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIconst wchar_t *\fP
.br
\fB\%archive_entry_gname_w\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_gname\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_gname\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *name\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_gname_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *name\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_update_gname_utf8\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *name\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_uname\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIconst wchar_t *\fP
.br
\fB\%archive_entry_uname_w\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_uname\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *name\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_uname\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *name\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_uname_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *name\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_update_uname_utf8\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *name\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_fflags\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%unsigned\ long\ *set_bits\fP, \fI\%unsigned\ long\ *clear_bits\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_fflags_text\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_fflags\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%unsigned\ long\ set_bits\fP, \fI\%unsigned\ long\ clear_bits\fP);
.br
\fIconst char *\fP
.br
\fB\%archive_entry_copy_fflags_text\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ char\ *text\fP);
.br
\fIconst wchar_t *\fP
.br
\fB\%archive_entry_copy_fflags_text_w\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ wchar_t\ *text\fP);
.SH DESCRIPTION
.ad l
.SS User id, group id and mode
The functions
\fB\%archive_entry_uid\fP(),
\fB\%archive_entry_gid\fP(),
and
\fB\%archive_entry_perm\fP()
can be used to extract the user id, group id and permission from the given entry.
The corresponding functions
\fB\%archive_entry_set_uid\fP(),
\fB\%archive_entry_set_gid\fP(),
and
\fB\%archive_entry_set_perm\fP()
store the given user id, group id and permission in the entry.
The permission is also set as a side effect of calling
\fB\%archive_entry_set_mode\fP().
.PP
\fB\%archive_entry_strmode\fP()
returns a string representation of the permission as used by the long mode of
\fBls\fP(1).
.SS User and group name
User and group names can be provided in one of three different ways:
.RS 5
.TP
char *
Multibyte strings in the current locale.
.TP
wchar_t *
Wide character strings in the current locale.
The accessor functions are named
\fB\%XXX_w\fP().
.TP
UTF-8
Unicode strings encoded as UTF-8.
These are convenience functions to update both the multibyte and wide
character strings at the same time.
.RE
.PP
\fB\%archive_entry_set_XXX\fP()
is an alias for
\fB\%archive_entry_copy_XXX\fP().
.SS File Flags
File flags are transparently converted between a bitmap
representation and a textual format.
For example, if you set the bitmap and ask for text, the library
will build a canonical text format.
However, if you set a text format and request a text format,
you will get back the same text, even if it is ill-formed.
If you need to canonicalize a textual flags string, you should first set the
text form, then request the bitmap form, then use that to set the bitmap form.
Setting the bitmap format will clear the internal text representation
and force it to be reconstructed when you next request the text form.
.PP
The bitmap format consists of two integers, one containing bits
that should be set, the other specifying bits that should be
cleared.
Bits not mentioned in either bitmap will be ignored.
Usually, the bitmap of bits to be cleared will be set to zero.
In unusual circumstances, you can force a fully-specified set
of file flags by setting the bitmap of flags to clear to the complement
of the bitmap of flags to set.
(This differs from
\fBfflagstostr\fP(3),
which only includes names for set bits.)
Converting a bitmap to a textual string is a platform-specific
operation; bits that are not meaningful on the current platform
will be ignored.
.PP
The canonical text format is a comma-separated list of flag names.
The
\fB\%archive_entry_copy_fflags_text\fP()
and
\fB\%archive_entry_copy_fflags_text_w\fP()
functions parse the provided text and set the internal bitmap values.
This is a platform-specific operation; names that are not meaningful
on the current platform will be ignored.
The function returns a pointer to the start of the first name that was not
recognized, or NULL if every name was recognized.
Note that every name \(em including names that follow an unrecognized
name \(em will be evaluated, and the bitmaps will be set to reflect
every name that is recognized.
(In particular, this differs from
\fBstrtofflags\fP(3),
which stops parsing at the first unrecognized name.)
.SH SEE ALSO
.ad l
\fBarchive_entry\fP(3),
\fBarchive_entry_acl\fP(3),
\fBarchive_read_disk\fP(3),
\fBarchive_write_disk\fP(3),
\fBlibarchive\fP(3)
.SH BUGS
.ad l
The platform types
Vt uid_t
and
Vt gid_t
are often 16 or 32 bit wide.
In this case it is possible that the ids can not be correctly restored
from archives and get truncated.

View file

@ -1,320 +0,0 @@
.TH ARCHIVE_ENTRY_STAT 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_entry_stat\fP,
\fB\%archive_entry_copy_stat\fP,
\fB\%archive_entry_filetype\fP,
\fB\%archive_entry_set_filetype\fP,
\fB\%archive_entry_mode\fP,
\fB\%archive_entry_set_mode\fP,
\fB\%archive_entry_size\fP,
\fB\%archive_entry_size_is_set\fP,
\fB\%archive_entry_set_size\fP,
\fB\%archive_entry_unset_size\fP,
\fB\%archive_entry_dev\fP,
\fB\%archive_entry_set_dev\fP,
\fB\%archive_entry_dev_is_set\fP,
\fB\%archive_entry_devmajor\fP,
\fB\%archive_entry_set_devmajor\fP,
\fB\%archive_entry_devminor\fP,
\fB\%archive_entry_set_devminor\fP,
\fB\%archive_entry_ino\fP,
\fB\%archive_entry_set_ino\fP,
\fB\%archive_entry_ino_is_set\fP,
\fB\%archive_entry_ino64\fP,
\fB\%archive_entry_set_ino64\fP,
\fB\%archive_entry_nlink\fP,
\fB\%archive_entry_rdev\fP,
\fB\%archive_entry_set_rdev\fP,
\fB\%archive_entry_rdevmajor\fP,
\fB\%archive_entry_set_rdevmajor\fP,
\fB\%archive_entry_rdevminor\fP,
\fB\%archive_entry_set_rdevminor\fP
\- accessor functions for manipulating archive entry descriptions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fIconst struct stat *\fP
.br
\fB\%archive_entry_stat\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_copy_stat\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%const\ struct\ stat\ *sb\fP);
.br
\fImode_t\fP
.br
\fB\%archive_entry_filetype\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_filetype\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%unsigned\ int\ type\fP);
.br
\fImode_t\fP
.br
\fB\%archive_entry_mode\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_mode\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%mode_t\ mode\fP);
.br
\fIint64_t\fP
.br
\fB\%archive_entry_size\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_size_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_size\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int64_t\ size\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_unset_size\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIdev_t\fP
.br
\fB\%archive_entry_dev\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_dev\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%dev_t\ dev\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_dev_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIdev_t\fP
.br
\fB\%archive_entry_devmajor\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_devmajor\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%dev_t\ major\fP);
.br
\fIdev_t\fP
.br
\fB\%archive_entry_devminor\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_devminor\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%dev_t\ minor\fP);
.br
\fIino_t\fP
.br
\fB\%archive_entry_ino\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_ino\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%unsigned\ long\ ino\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_ino_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint64_t\fP
.br
\fB\%archive_entry_ino64\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_ino64\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%int64_t\ ino\fP);
.br
\fIunsigned int\fP
.br
\fB\%archive_entry_nlink\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_nlink\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%unsigned\ int\ count\fP);
.br
\fIdev_t\fP
.br
\fB\%archive_entry_rdev\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIdev_t\fP
.br
\fB\%archive_entry_rdevmajor\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIdev_t\fP
.br
\fB\%archive_entry_rdevminor\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_rdev\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%dev_t\ dev\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_rdevmajor\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%dev_t\ major\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_rdevminor\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%dev_t\ minor\fP);
.SH DESCRIPTION
.ad l
.SS Copying to and from Vt struct stat
The function
\fB\%archive_entry_stat\fP()
converts the various fields stored in the archive entry to the format
used by
\fBstat\fP(2).
The return value remains valid until either
\fB\%archive_entry_clear\fP()
or
\fB\%archive_entry_free\fP()
is called.
It is not affected by calls to the set accessor functions.
It currently sets the following values in
Vt struct stat:
Vt st_atime,
Vt st_ctime,
Vt st_dev,
Vt st_gid,
Vt st_ino,
Vt st_mode,
Vt st_mtime,
Vt st_nlink,
Vt st_rdev,
Vt st_size,
Vt st_uid.
In addition,
Vt st_birthtime
and high-precision information for time-related fields
will be included on platforms that support it.
.PP
The function
\fB\%archive_entry_copy_stat\fP()
copies fields from the platform's
Vt struct stat.
Fields not provided by
Vt struct stat
are unchanged.
.SS General accessor functions
The functions
\fB\%archive_entry_filetype\fP()
and
\fB\%archive_entry_set_filetype\fP()
get respectively set the filetype.
The file type is one of the following constants:
.RS 5
.TP
AE_IFREG
Regular file
.TP
AE_IFLNK
Symbolic link
.TP
AE_IFSOCK
Socket
.TP
AE_IFCHR
Character device
.TP
AE_IFBLK
Block device
.TP
AE_IFDIR
Directory
.TP
AE_IFIFO
Named pipe (fifo)
.RE
Not all file types are supported by all platforms.
The constants used by
\fBstat\fP(2)
may have different numeric values from the
corresponding constants above.
.PP
The functions
\fB\%archive_entry_mode\fP()
and
\fB\%archive_entry_set_mode\fP()
get/set a combination of file type and permissions and provide the
equivalent of
\fIst_mode\fP.
Use of
\fB\%archive_entry_filetype\fP()
and
\fB\%archive_entry_perm\fP()
for getting and
\fB\%archive_entry_set_filetype\fP()
and
\fB\%archive_entry_set_perm\fP()
for setting is recommended.
.PP
The function
\fB\%archive_entry_size\fP()
returns the file size, if it has been set, and 0 otherwise.
\fB\%archive_entry_size\fP()
can be used to query that status.
\fB\%archive_entry_set_size\fP()
and
\fB\%archive_entry_unset_size\fP()
set and unset the size, respectively.
.PP
The number of references (hardlinks) can be obtained by calling
\fB\%archive_entry_nlink\fP()
and set with
\fB\%archive_entry_set_nlink\fP().
.SS Identifying unique files
The functions
\fB\%archive_entry_dev\fP()
and
\fB\%archive_entry_ino64\fP()
are used by
\fBarchive_entry_linkify\fP(3)
to find hardlinks.
The pair of device and inode is supposed to identify hardlinked files.
.PP
The device major and minor number can be obtained independently using
\fB\%archive_entry_devmajor\fP()
and
\fB\%archive_entry_devminor\fP().
The device can be set either via
\fB\%archive_entry_set_dev\fP()
or by the combination of major and minor number using
\fB\%archive_entry_set_devmajor\fP()
and
\fB\%archive_entry_set_devminor\fP().
.PP
The inode number can be obtained using
\fB\%archive_entry_ino\fP().
This is a legacy interface that uses the platform
Vt ino_t,
which may be very small.
To set the inode number,
\fB\%archive_entry_set_ino64\fP()
is the preferred interface.
.SS Accessor functions for block and character devices
Block and character devices are characterised either using a device number
or a pair of major and minor number.
The combined device number can be obtained with
\fB\%archive_device_rdev\fP()
and set with
\fB\%archive_device_set_rdev\fP().
The major and minor numbers are accessed by
\fB\%archive_device_rdevmajor\fP(),
\fB\%archive_device_rdevminor\fP()
\fB\%archive_device_set_rdevmajor\fP()
and
\fB\%archive_device_set_rdevminor\fP().
.PP
The process of splitting the combined device number into major and
minor number and the reverse process of combing them differs between
platforms.
Some archive formats use the combined form, while other formats use
the split form.
.SH SEE ALSO
.ad l
\fBstat\fP(2),
\fBarchive_entry_acl\fP(3),
\fBarchive_entry_perms\fP(3),
\fBarchive_entry_time\fP(3),
\fBlibarchive\fP(3)

View file

@ -1,146 +0,0 @@
.TH ARCHIVE_ENTRY_TIME 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_entry_atime\fP,
\fB\%archive_entry_atime_nsec\fP,
\fB\%archive_entry_atime_is_set\fP,
\fB\%archive_entry_set_atime\fP,
\fB\%archive_entry_unset_atime\fP,
\fB\%archive_entry_birthtime\fP,
\fB\%archive_entry_birthtime_nsec\fP,
\fB\%archive_entry_birthtime_is_set\fP,
\fB\%archive_entry_set_birthtime\fP,
\fB\%archive_entry_unset_birthtime\fP,
\fB\%archive_entry_ctime\fP,
\fB\%archive_entry_ctime_nsec\fP,
\fB\%archive_entry_ctime_is_set\fP,
\fB\%archive_entry_set_ctime\fP,
\fB\%archive_entry_unset_ctime\fP,
\fB\%archive_entry_mtime\fP,
\fB\%archive_entry_mtime_nsec\fP,
\fB\%archive_entry_mtime_is_set\fP,
\fB\%archive_entry_set_mtime\fP,
\fB\%archive_entry_unset_mtime\fP
\- functions for manipulating times in archive entry descriptions
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive_entry.h>\fP
.br
\fItime_t\fP
.br
\fB\%archive_entry_atime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIlong\fP
.br
\fB\%archive_entry_atime_nsec\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_atime_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_atime\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%time_t\ sec\fP, \fI\%long\ nanosec\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_unset_atime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fItime_t\fP
.br
\fB\%archive_entry_birthtime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIlong\fP
.br
\fB\%archive_entry_birthtime_nsec\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_birthtime_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_birthtime\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%time_t\ sec\fP, \fI\%long\ nanosec\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_unset_birthtime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fItime_t\fP
.br
\fB\%archive_entry_ctime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIlong\fP
.br
\fB\%archive_entry_ctime_nsec\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_ctime_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_ctime\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%time_t\ sec\fP, \fI\%long\ nanosec\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_unset_ctime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fItime_t\fP
.br
\fB\%archive_entry_mtime\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIlong\fP
.br
\fB\%archive_entry_mtime_nsec\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIint\fP
.br
\fB\%archive_entry_mtime_is_set\fP(\fI\%struct\ archive_entry\ *a\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_set_mtime\fP(\fI\%struct\ archive_entry\ *a\fP, \fI\%time_t\ sec\fP, \fI\%long\ nanosec\fP);
.br
\fIvoid\fP
.br
\fB\%archive_entry_unset_mtime\fP(\fI\%struct\ archive_entry\ *a\fP);
.SH DESCRIPTION
.ad l
These functions create and manipulate the time fields in an
Vt archive_entry.
Supported time fields are atime (access time), birthtime (creation time),
ctime (last time an inode property was changed) and mtime (modification time).
.PP
\fBlibarchive\fP(3)
provides a high-resolution interface.
The timestamps are truncated automatically depending on the archive format
(for archiving) or the filesystem capabilities (for restoring).
.PP
All timestamp fields are optional.
The
\fB\%XXX_unset\fP()
functions can be used to mark the corresponding field as missing.
The current state can be queried using
\fB\%XXX_is_set\fP().
Unset time fields have a second and nanosecond field of 0.
.SH SEE ALSO
.ad l
\fBarchive_entry\fP(3),
\fBlibarchive\fP(3)
.SH HISTORY
.ad l
The
\fB\%libarchive\fP
library first appeared in
FreeBSD 5.3.
.SH AUTHORS
.ad l
-nosplit
The
\fB\%libarchive\fP
library was written by
Tim Kientzle \%<kientzle@acm.org.>

View file

@ -1,219 +0,0 @@
.TH ARCHIVE_READ 3 "February 2, 2012" ""
.SH NAME
.ad l
\fB\%archive_read\fP
\- functions for reading streaming archives
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive.h>\fP
.SH DESCRIPTION
.ad l
These functions provide a complete API for reading streaming archives.
The general process is to first create the
Tn struct archive
object, set options, initialize the reader, iterate over the archive
headers and associated data, then close the archive and release all
resources.
.SS Create archive object
See
\fBarchive_read_new\fP(3).
.PP
To read an archive, you must first obtain an initialized
Tn struct archive
object from
\fB\%archive_read_new\fP().
.SS Enable filters and formats
See
\fBarchive_read_filter\fP(3)
and
\fBarchive_read_format\fP(3).
.PP
You can then modify this object for the desired operations with the
various
\fB\%archive_read_set_XXX\fP()
and
\fB\%archive_read_support_XXX\fP()
functions.
In particular, you will need to invoke appropriate
\fB\%archive_read_support_XXX\fP()
functions to enable the corresponding compression and format
support.
Note that these latter functions perform two distinct operations:
they cause the corresponding support code to be linked into your
program, and they enable the corresponding auto-detect code.
Unless you have specific constraints, you will generally want
to invoke
\fB\%archive_read_support_filter_all\fP()
and
\fB\%archive_read_support_format_all\fP()
to enable auto-detect for all formats and compression types
currently supported by the library.
.SS Set options
See
\fBarchive_read_set_options\fP(3).
.SS Open archive
See
\fBarchive_read_open\fP(3).
.PP
Once you have prepared the
Tn struct archive
object, you call
\fB\%archive_read_open\fP()
to actually open the archive and prepare it for reading.
There are several variants of this function;
the most basic expects you to provide pointers to several
functions that can provide blocks of bytes from the archive.
There are convenience forms that allow you to
specify a filename, file descriptor,
\fIFILE *\fP
object, or a block of memory from which to read the archive data.
Note that the core library makes no assumptions about the
size of the blocks read;
callback functions are free to read whatever block size is
most appropriate for the medium.
.SS Consume archive
See
\fBarchive_read_header\fP(3),
\fBarchive_read_data\fP(3)
and
\fBarchive_read_extract\fP(3).
.PP
Each archive entry consists of a header followed by a certain
amount of data.
You can obtain the next header with
\fB\%archive_read_next_header\fP(),
which returns a pointer to an
Tn struct archive_entry
structure with information about the current archive element.
If the entry is a regular file, then the header will be followed
by the file data.
You can use
\fB\%archive_read_data\fP()
(which works much like the
\fBread\fP(2)
system call)
to read this data from the archive, or
\fB\%archive_read_data_block\fP()
which provides a slightly more efficient interface.
You may prefer to use the higher-level
\fB\%archive_read_data_skip\fP(),
which reads and discards the data for this entry,
\fB\%archive_read_data_into_fd\fP(),
which copies the data to the provided file descriptor, or
\fB\%archive_read_extract\fP(),
which recreates the specified entry on disk and copies data
from the archive.
In particular, note that
\fB\%archive_read_extract\fP()
uses the
Tn struct archive_entry
structure that you provide it, which may differ from the
entry just read from the archive.
In particular, many applications will want to override the
pathname, file permissions, or ownership.
.SS Release resources
See
\fBarchive_read_free\fP(3).
.PP
Once you have finished reading data from the archive, you
should call
\fB\%archive_read_close\fP()
to close the archive, then call
\fB\%archive_read_free\fP()
to release all resources, including all memory allocated by the library.
.SH EXAMPLES
.ad l
The following illustrates basic usage of the library.
In this example,
the callback functions are simply wrappers around the standard
\fBopen\fP(2),
\fBread\fP(2),
and
\fBclose\fP(2)
system calls.
.RS 4
.nf
void
list_archive(const char *name)
{
struct mydata *mydata;
struct archive *a;
struct archive_entry *entry;
mydata = malloc(sizeof(struct mydata));
a = archive_read_new();
mydata->name = name;
archive_read_support_filter_all(a);
archive_read_support_format_all(a);
archive_read_open(a, mydata, myopen, myread, myclose);
while (archive_read_next_header(a, &entry) == ARCHIVE_OK) {
printf("%s\en",archive_entry_pathname(entry));
archive_read_data_skip(a);
}
archive_read_free(a);
free(mydata);
}
la_ssize_t
myread(struct archive *a, void *client_data, const void **buff)
{
struct mydata *mydata = client_data;
*buff = mydata->buff;
return (read(mydata->fd, mydata->buff, 10240));
}
int
myopen(struct archive *a, void *client_data)
{
struct mydata *mydata = client_data;
mydata->fd = open(mydata->name, O_RDONLY);
return (mydata->fd >= 0 ? ARCHIVE_OK : ARCHIVE_FATAL);
}
int
myclose(struct archive *a, void *client_data)
{
struct mydata *mydata = client_data;
if (mydata->fd > 0)
close(mydata->fd);
return (ARCHIVE_OK);
}
.RE
.SH SEE ALSO
.ad l
\fBtar\fP(1),
\fBarchive_read_data\fP(3),
\fBarchive_read_extract\fP(3),
\fBarchive_read_filter\fP(3),
\fBarchive_read_format\fP(3),
\fBarchive_read_header\fP(3),
\fBarchive_read_new\fP(3),
\fBarchive_read_open\fP(3),
\fBarchive_read_set_options\fP(3),
\fBarchive_util\fP(3),
\fBlibarchive\fP(3),
\fBtar\fP(5)
.SH HISTORY
.ad l
The
\fB\%libarchive\fP
library first appeared in
FreeBSD 5.3.
.SH AUTHORS
.ad l
-nosplit
The
\fB\%libarchive\fP
library was written by
Tim Kientzle \%<kientzle@acm.org.>
.SH BUGS
.ad l
Many traditional archiver programs treat
empty files as valid empty archives.
For example, many implementations of
\fBtar\fP(1)
allow you to append entries to an empty file.
Of course, it is impossible to determine the format of an empty file
by inspecting the contents, so this library treats empty files as
having a special
``empty''
format.

View file

@ -1,49 +0,0 @@
.TH ARCHIVE_READ_ADD_PASSPHRASE 3 "September 14, 2014" ""
.SH NAME
.ad l
\fB\%archive_read_add_passphrase\fP,
\fB\%archive_read_set_passphrase_callback\fP
\- functions for reading encrypted archives
.SH LIBRARY
.ad l
Streaming Archive Library (libarchive, -larchive)
.SH SYNOPSIS
.ad l
\fB#include <archive.h>\fP
.br
\fIint\fP
.br
\fB\%archive_read_add_passphrase\fP(\fI\%struct\ archive\ *\fP, \fI\%const\ char\ *passphrase\fP);
.br
\fIint\fP
.br
\fB\%archive_read_set_passphrase_callback\fP(\fI\%struct\ archive\ *\fP, \fI\%void\ *client_data\fP, \fI\%archive_passphrase_callback\ *\fP);
.SH DESCRIPTION
.ad l
.RS 5
.TP
\fB\%archive_read_add_passphrase\fP()
Register passphrases for reading an encryption archive.
If
\fIpassphrase\fP
is
.BR NULL
or empty, this function will do nothing and
\fBARCHIVE_FAILED\fP
will be returned.
Otherwise,
\fBARCHIVE_OK\fP
will be returned.
.TP
\fB\%archive_read_set_passphrase_callback\fP()
Register a callback function that will be invoked to get a passphrase
for decryption after trying all the passphrases registered by the
\fB\%archive_read_add_passphrase\fP()
function failed.
.RE
.SH SEE ALSO
.ad l
\fBtar\fP(1),
\fBarchive_read\fP(3),
\fBarchive_read_set_options\fP(3),
\fBlibarchive\fP(3)

Some files were not shown because too many files have changed in this diff Show more