head 1.8; access; symbols libarchive-3-8-11:1.1.1.7 libarchive-3-8-10:1.1.1.7 pkgsrc-2026Q3:1.7.0.16 pkgsrc-2026Q3-base:1.7 libarchive-3-8-9:1.1.1.6 libarchive-3-8-8:1.1.1.6 pkgsrc-2026Q2:1.7.0.14 pkgsrc-2026Q2-base:1.7 libarchive-3-8-7:1.1.1.6 libarchive-3-8-6:1.1.1.6 pkgsrc-2026Q1:1.7.0.12 pkgsrc-2026Q1-base:1.7 libarchive-3-8-5:1.1.1.6 libarchive-3-8-4:1.1.1.6 pkgsrc-2025Q4:1.7.0.10 pkgsrc-2025Q4-base:1.7 libarchive-3-8-3:1.1.1.6 libarchive-3-8-2:1.1.1.6 pkgsrc-2025Q3:1.7.0.8 pkgsrc-2025Q3-base:1.7 libarchive-3-8-1:1.1.1.6 pkgsrc-2025Q2:1.7.0.6 pkgsrc-2025Q2-base:1.7 libarchive-3-8-0:1.1.1.6 libarchive-3-7-9:1.1.1.6 pkgsrc-2025Q1:1.7.0.4 pkgsrc-2025Q1-base:1.7 pkgsrc-2024Q4:1.7.0.2 pkgsrc-2024Q4-base:1.7 libarchive-3-7-7:1.1.1.6 pkgsrc-2024Q3:1.6.0.6 pkgsrc-2024Q3-base:1.6 libarchive-3-7-5:1.1.1.5 pkgsrc-2024Q2:1.6.0.4 pkgsrc-2024Q2-base:1.6 libarchive-3-7-4:1.1.1.5 libarchive-3-7-3:1.1.1.5 pkgsrc-2024Q1:1.6.0.2 pkgsrc-2024Q1-base:1.6 libarchive-3-7-2:1.1.1.5 pkgsrc-2023Q4:1.5.0.30 pkgsrc-2023Q4-base:1.5 pkgsrc-2023Q3:1.5.0.28 pkgsrc-2023Q3-base:1.5 pkgsrc-2023Q2:1.5.0.26 pkgsrc-2023Q2-base:1.5 pkgsrc-2023Q1:1.5.0.24 pkgsrc-2023Q1-base:1.5 pkgsrc-2022Q4:1.5.0.22 pkgsrc-2022Q4-base:1.5 pkgsrc-2022Q3:1.5.0.20 pkgsrc-2022Q3-base:1.5 pkgsrc-2022Q2:1.5.0.18 pkgsrc-2022Q2-base:1.5 pkgsrc-2022Q1:1.5.0.16 pkgsrc-2022Q1-base:1.5 pkgsrc-2021Q4:1.5.0.14 pkgsrc-2021Q4-base:1.5 pkgsrc-2021Q3:1.5.0.12 pkgsrc-2021Q3-base:1.5 pkgsrc-2021Q2:1.5.0.10 pkgsrc-2021Q2-base:1.5 pkgsrc-2021Q1:1.5.0.8 pkgsrc-2021Q1-base:1.5 pkgsrc-2020Q4:1.5.0.6 pkgsrc-2020Q4-base:1.5 pkgsrc-2020Q3:1.5.0.4 pkgsrc-2020Q3-base:1.5 pkgsrc-2020Q2:1.5.0.2 pkgsrc-2020Q2-base:1.5 pkgsrc-2020Q1:1.4.0.4 pkgsrc-2020Q1-base:1.4 pkgsrc-2019Q4:1.4.0.6 pkgsrc-2019Q4-base:1.4 pkgsrc-2019Q3:1.4.0.2 pkgsrc-2019Q3-base:1.4 libarchive-3-4-0:1.1.1.4 libarchive-3-3-3:1.1.1.3 pkgsrc-2019Q2:1.3.0.18 pkgsrc-2019Q2-base:1.3 pkgsrc-2019Q1:1.3.0.16 pkgsrc-2019Q1-base:1.3 pkgsrc-2018Q4:1.3.0.14 pkgsrc-2018Q4-base:1.3 pkgsrc-2018Q3:1.3.0.12 pkgsrc-2018Q3-base:1.3 pkgsrc-2018Q2:1.3.0.10 pkgsrc-2018Q2-base:1.3 pkgsrc-2018Q1:1.3.0.8 pkgsrc-2018Q1-base:1.3 pkgsrc-2017Q4:1.3.0.6 pkgsrc-2017Q4-base:1.3 pkgsrc-2017Q3:1.3.0.4 pkgsrc-2017Q3-base:1.3 libarchive-3-3-2:1.1.1.3 pkgsrc-2017Q2:1.2.0.4 pkgsrc-2017Q2-base:1.2 pkgsrc-2017Q1:1.2.0.2 pkgsrc-2017Q1-base:1.2 libarchive-3-3-1:1.1.1.2 pkgsrc-2016Q4:1.1.0.16 pkgsrc-2016Q4-base:1.1 pkgsrc-2016Q3:1.1.0.14 pkgsrc-2016Q3-base:1.1 pkgsrc-2016Q2:1.1.0.12 pkgsrc-2016Q2-base:1.1 libarchive-3-2-1:1.1.1.1 KIENTZLE:1.1.1 pkgsrc-2016Q1:1.1.0.10 pkgsrc-2016Q1-base:1.1 pkgsrc-2015Q4:1.1.0.8 pkgsrc-2015Q4-base:1.1 pkgsrc-2015Q3:1.1.0.6 pkgsrc-2015Q3-base:1.1 pkgsrc-2015Q2:1.1.0.4 pkgsrc-2015Q2-base:1.1 pkgsrc-2015Q1:1.1.0.2 pkgsrc-2015Q1-base:1.1; locks; strict; comment @# @; 1.8 date 2026.10.19.12.05.17; author adam; state Exp; branches; next 1.7; commitid R3KJfVxz3NuPb50H; 1.7 date 2024.10.19.05.39.57; author adam; state Exp; branches; next 1.6; commitid fYRSlpIWMYluweuF; 1.6 date 2024.01.18.18.00.15; author adam; state Exp; branches; next 1.5; commitid hNXpsHx3SuHqsXUE; 1.5 date 2020.05.26.09.16.41; author nia; state Exp; branches; next 1.4; commitid nNhsdZACz3PjmJ9C; 1.4 date 2019.09.22.09.55.08; author joerg; state Exp; branches; next 1.3; commitid FdPvRjF4OzwBwZDB; 1.3 date 2017.08.01.22.26.23; author joerg; state Exp; branches; next 1.2; commitid 32clTfkmVE8bPy1A; 1.2 date 2017.02.25.21.11.19; author joerg; state Exp; branches; next 1.1; commitid rW8QfCWrsCO1snHz; 1.1 date 2015.01.17.12.44.49; author adam; state Exp; branches 1.1.1.1; next ; commitid yy7e1hLrfmA2pn6y; 1.1.1.1 date 2016.06.20.17.12.01; author joerg; state Exp; branches; next 1.1.1.2; commitid rRgm3BqbmbI8aebz; 1.1.1.2 date 2017.02.25.20.54.13; author joerg; state Exp; branches; next 1.1.1.3; commitid ReqPI0ibLYjdmnHz; 1.1.1.3 date 2017.08.01.22.21.12; author joerg; state Exp; branches; next 1.1.1.4; commitid XQwPAFJku336Ny1A; 1.1.1.4 date 2019.09.22.09.51.33; author joerg; state Exp; branches; next 1.1.1.5; commitid 5kDbfPbiV3INvZDB; 1.1.1.5 date 2024.01.18.17.37.45; author adam; state Exp; branches; next 1.1.1.6; commitid zDULEPUODGjTkXUE; 1.1.1.6 date 2024.10.19.05.27.34; author adam; state Exp; branches; next 1.1.1.7; commitid v1iXM4j1Na52seuF; 1.1.1.7 date 2026.10.19.11.50.40; author adam; state Exp; branches; next ; commitid eS0MvMrTxXQX650H; desc @@ 1.8 log @libarchive: updated to 3.8.10 3.8.10 New features: 7z: add Delta, RISCV, ARMTHUMB and IA64 filters for non-lzma archives libarchive: support digest with nettle 4 and mbedtls 3 tar: add --mode option Security and Bug Fixes see ChangeLog @ text @4mARCHIVE_ENTRY_LINKIFY24m(3) Library Functions Manual 4mARCHIVE_ENTRY_LINKIFY24m(3) 1mNAME0m archive_entry_linkresolver, archive_entry_linkresolver_new, archive_entry_linkresolver_set_strategy, archive_entry_linkresolver_free, archive_entry_linkify — hardlink re‐ solver functions 1mLIBRARY0m Streaming Archive Library (libarchive, -larchive) 1mSYNOPSIS0m 1m#include 0m 4mstruct24m 4marchive_entry_linkresolver24m 4m*0m 1marchive_entry_linkresolver_new22m(4mvoid24m); 4mvoid0m 1marchive_entry_linkresolver_set_strategy22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mint24m 4mformat24m); 4mvoid0m 1marchive_entry_linkresolver_free22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m); 4mvoid0m 1marchive_entry_linkify22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mstruct24m 4marchive_entry24m 4m**entry24m, 4mstruct24m 4marchive_entry24m 4m**sparse24m); 1mDESCRIPTION0m 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: 1. Ignore hardlinks and store the body for each reference (old cpio, zip). 2. Store the body the first time an inode is seen (ustar, pax). 3. Store the body the last time an inode is seen (new cpio). The 1marchive_entry_linkresolver 22mfunctions help by providing a unified interface and handling the complexity behind the scenes. The 1marchive_entry_linkresolver 22mfunctions assume that 4marchive_entry24m in‐ stances have valid nlinks, inode and device values. The inode and de‐ vice values are used to match entries. The nlinks value is used to de‐ termine if all references have been found and if the internal refer‐ ences can be recycled. The 1marchive_entry_linkresolver_new22m() function allocates a new link re‐ solver. The instance can be freed using 1marchive_entry_linkresolver_free22m(). All deferred entries are flushed and the internal storage is freed. The 1marchive_entry_linkresolver_set_strategy22m() function selects the op‐ timal hardlink strategy for the given format. The format code can be obtained from 4marchive_format24m(3). The function can be called more than once, but it is recommended to flush all deferred entries first. The 1marchive_entry_linkify22m() function is the core of 1marchive_entry_linkresolver22m. The 4mentry24m argument points to the 4marchive_entry24m that should be written. Depending on the strategy one of the following actions is taken: 1. For the simple archive formats 4m*entry24m is left unmodified and 4m*sparse24m is set to NULL. 2. For tar like archive formats, 4m*sparse24m is set to NULL. If 4m*entry0m is NULL, no action is taken. If the hardlink count of 4m*entry24m 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 4m*entry24m 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 in‐ ternal cache with a link count reduced by one. 3. For new cpio like archive formats a value for 4m*entry24m of NULL is used to flush deferred entries. In that case 4m*entry24m is set to an arbitrary deferred entry and the entry itself is removed from the internal list. If the internal list is empty, 4m*entry24m is set to NULL. In either case, 4m*sparse24m is set to NULL and the function re‐ turns. If the hardlink count of 4m*entry24m is one or the file type is a directory or device, 4m*sparse24m is set to NULL and no further ac‐ tion 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 4m*entry24m and 4m*sparse24m 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 4m*entry24m after retaining the link count. The existing entry is returned in 4m*entry24m. If the link count reached one, the new entry is also removed from the in‐ ternal list and returned in 4m*sparse24m. Otherwise 4m*sparse24m is set to NULL. The general usage is therefore: 1. For each new archive entry, call 1marchive_entry_linkify22m(). 2. Keep in mind that the entries returned may have a size of 0 now. 3. If 4m*entry24m is not NULL, archive it. 4. If 4m*sparse24m is not NULL, archive it. 5. After all entries have been written to disk, call 1marchive_entry_linkify22m() with 4m*entry24m set to NULL and archive the returned entry as long as it is not NULL. 1mRETURN VALUES0m 1marchive_entry_linkresolver_new22m() returns NULL on 4mmalloc24m(3) failures. 1mSEE ALSO0m 4marchive_entry24m(3) Debian February 2, 2012 4mARCHIVE_ENTRY_LINKIFY24m(3) @ 1.7 log @libarchive: updated to 3.7.7 Libarchive 3.7.7 is a bugfix and security release Security fixes: gzip: prevent a hang when processing a malformed gzip inside a gzip tar: don't crash on truncated tar archives tar: fix two leaks in tar header parsing Important bugfixes: 7-zip: read/write symlink paths as UTF-8 cpio: exit with an error code if an entry could not be extracted rar5: report encrypted entries tar: fix truncation of entry pathnames in specific archives windows: fix ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS Libarchive 3.7.6 is a bugfix and security release. This release fixes a tar regression introduced in libarchive 3.7.5 Important bugfixes. tar: clean up linkpath between entries tar: fix memory leaks when processing symlinks or parsing pax headers iso: be more cautious about parsing ISO-9660 timestamps @ text @d42 1 a42 1 interface and handling the complexity behind the scene. d46 2 a47 2 vice value is used to match entries. The nlinks value is used to de‐ termined if all references have been found and if the internal refer‐ d50 3 a52 3 The 1marchive_entry_linkresolver_new22m() function allocates a new link re‐ solver. The instance can be freed using 1marchive_entry_linkresolver_free22m(). All deferred entries are flushed d55 3 a57 3 The 1marchive_entry_linkresolver_set_strategy22m() function selects the op‐ timal hardlink strategy for the given format. The format code can be obtained from 4marchive_format24m(3). The function can be called more than d60 2 a61 2 The 1marchive_entry_linkify22m() function is the core of 1marchive_entry_linkresolver22m. The 1mentry22m() argument points to the d65 1 a65 1 1. For the simple archive formats 4m*entry24m is left unmodified and d68 3 a70 3 2. For tar like archive formats, 4m*sparse24m is set to NULL. If 4m*entry0m is NULL, no action is taken. If the hardlink count of 4m*entry24m is larger than 1 and the file type is a regular file or symbolic d73 1 a73 1 of 4m*entry24m is set to 0 to notify that no body should be written. d77 4 a80 4 3. For new cpio like archive formats a value for 4m*entry24m of NULL is used to flush deferred entries. In that case 4m*entry24m is set to an arbitrary deferred entry and the entry itself is removed from the internal list. If the internal list is empty, 4m*entry24m is set to d83 2 a84 2 a directory or device, 4m*sparse24m is set to NULL and no further ac‐ tion is taken. Otherwise, the internal list is searched for a d86 2 a87 2 to the internal list, both 4m*entry24m and 4m*sparse24m are set to NULL and the function returns. If such an inode is found, the link count d89 2 a90 2 on the internal list is swapped with 4m*entry24m after retaining the link count. The existing entry is returned in 4m*entry24m. If the d92 1 a92 1 ternal list and returned in 4m*sparse24m. Otherwise 4m*sparse24m is set to d105 2 a106 2 5. After all entries have been written to disk, call 1marchive_entry_linkify22m() with 4m*entry24m set to NULL and archive the @ 1.6 log @libarchive: updated to 3.7.2 Libarchive 3.7.2 is a security, bugfix and feature release. Security fixes: Multiple vulnerabilities have been fixed in the PAX writer (1b4e0d0) Important bugfixes: bsdunzip(1) now correctly handles arguments following an -x after the zipfile New features: bsdunzip(1) now supports the "--version" flag 7-zip reader now translates Windows permissions into UNIX permissions uudecode filter in raw mode now supports file name and file mode zstd filter now supports the "long" write option Libarchive 3.7.1 is a security, feature and bugfix release. Security fixes: SEGV and stack buffer overflow in verbose mode of cpio Feature updates: bsdunzip updated to match latest upstream code Important bugfixes: miscellaneous functional bugfixes build fixes on multiple platforms Libarchive 3.7.0 is a feature and bugfix release. New features: bsdunzip: new tool ported from FreeBSD drop-in replacement for Info-ZIP unzip, not yet ported for Windows 7zip reader: support for Zstandard compression 7zip reader: support for ARM64 filter zstd filter: support for multi-frame zstd archives Other notable bugfixes and improvements: pax: fix year 2038 problem on platforms with 64-bit time_t Windows: Universal Windows Platform (UWP) fixes and improvements Windows: bcrypt usage fixes and improvements Windows: time function usage fixes and improvements @ text @d1 1 a1 1 ARCHIVE_ENTRY_LINKIFY(3) BSD Library Functions Manual ARCHIVE_ENTRY_LINKIFY(3) d3 105 a107 103 NAME archive_entry_linkresolver, archive_entry_linkresolver_new, archive_entry_linkresolver_set_strategy, archive_entry_linkresolver_free, archive_entry_linkify — hardlink resolver functions LIBRARY Streaming Archive Library (libarchive, -larchive) SYNOPSIS #include struct archive_entry_linkresolver * archive_entry_linkresolver_new(void); void archive_entry_linkresolver_set_strategy(struct archive_entry_linkresolver *resolver, int format); void archive_entry_linkresolver_free(struct archive_entry_linkresolver *resolver); void archive_entry_linkify(struct archive_entry_linkresolver *resolver, struct archive_entry **entry, struct archive_entry **sparse); DESCRIPTION Programs that want to create archives have to deal with hardlinks. Hardlinks are handled in different ways by the archive formats. The ba‐ sic strategies are: 1. Ignore hardlinks and store the body for each reference (old cpio, zip). 2. Store the body the first time an inode is seen (ustar, pax). 3. Store the body the last time an inode is seen (new cpio). The archive_entry_linkresolver functions help by providing a unified in‐ terface and handling the complexity behind the scene. The archive_entry_linkresolver functions assume that archive_entry in‐ stances 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. The archive_entry_linkresolver_new() function allocates a new link re‐ solver. The instance can be freed using archive_entry_linkresolver_free(). All deferred entries are flushed and the internal storage is freed. The archive_entry_linkresolver_set_strategy() function selects the opti‐ mal hardlink strategy for the given format. The format code can be ob‐ tained from archive_format(3). The function can be called more than once, but it is recommended to flush all deferred entries first. The archive_entry_linkify() function is the core of archive_entry_linkresolver. The entry() argument points to the archive_entry that should be written. Depending on the strategy one of the following actions is taken: 1. For the simple archive formats *entry is left unmodified and *sparse is set to NULL. 2. For tar like archive formats, *sparse is set to NULL. If *entry is NULL, no action is taken. If the hardlink count of *entry is larger than 1 and the file type is a regular file or symbolic link, the in‐ ternal list is searched for a matching inode. If such an inode is found, the link count is decremented and the file size of *entry 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. 3. For new cpio like archive formats a value for *entry of NULL is used to flush deferred entries. In that case *entry is set to an arbi‐ trary deferred entry and the entry itself is removed from the inter‐ nal list. If the internal list is empty, *entry is set to NULL. In either case, *sparse is set to NULL and the function returns. If the hardlink count of *entry is one or the file type is a directory or device, *sparse 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 *entry and *sparse are set to NULL and the function returns. If such an inode is found, the link count is decremented. If it re‐ mains larger than one, the existing entry on the internal list is swapped with *entry after retaining the link count. The existing entry is returned in *entry. If the link count reached one, the new entry is also removed from the internal list and returned in *sparse. Otherwise *sparse is set to NULL. The general usage is therefore: 1. For each new archive entry, call archive_entry_linkify(). 2. Keep in mind that the entries returned may have a size of 0 now. 3. If *entry is not NULL, archive it. 4. If *sparse is not NULL, archive it. 5. After all entries have been written to disk, call archive_entry_linkify() with *entry set to NULL and archive the re‐ turned entry as long as it is not NULL. d109 2 a110 2 RETURN VALUES archive_entry_linkresolver_new() returns NULL on malloc(3) failures. d112 2 a113 2 SEE ALSO archive_entry(3) d115 1 a115 1 BSD February 2, 2012 BSD @ 1.5 log @libarchive: Update to 3.4.3 Libarchive 3.4.3 is a feature and bugfix release. New features: support for pzstd compressed files (#1357) support for RHT.security.selinux tar extended attribute (#1348) Important bugfixes: various zstd fixes and improvements (#1342 #1352 #1359) child process handling fixes (#1372) Libarchive 3.4.2 is a feature and security release. New features: support for atomic file extraction (bsdtar -x --safe-writes) (#1289) support for mbed TLS (PolarSSL) (#1301) Important bugfixes: security fixes in RAR5 reader (#1280 #1326) compression buffer fix in XAR writer (#1317) fix uname and gname longer than 32 characters in PAX writer (#1319) fix segfault when archiving hard links in ISO9660 and XAR writers (#1325) fix support for extracting 7z archive entries with Delta filter (#987) Libarchive 3.4.1 is a feature and security release. New features: Unicode filename support for reading lha/lzh archives New pax write option "xattrhdr" Important bugfixes: security fixes in wide string processing (#1276 #1298) security fixes in RAR5 reader (#1212 #1217 #1296) security fixes and optimizations to write filter logic (#351) security fix related to use of readlink(2) (1dae5a5) sparse file handling fixes (#1218 #1260) Thanks to all contributors and bug reporters. Special thanks to Christos Zoulas (@@zoulasc) from NetBSD for the atomic file extraction feature. @ text @d6 1 a6 1 archive_entry_linkify -- hardlink resolver functions d30 2 a31 2 Hardlinks are handled in different ways by the archive formats. The basic strategies are: d33 1 a33 1 1. Ignore hardlinks and store the body for each reference (old cpio, d36 1 a36 1 2. Store the body the first time an inode is seen (ustar, pax). d38 1 a38 1 3. Store the body the last time an inode is seen (new cpio). d40 2 a41 2 The archive_entry_linkresolver functions help by providing a unified interface and handling the complexity behind the scene. d43 9 a51 9 The archive_entry_linkresolver functions assume that 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 refer- ences can be recycled. The archive_entry_linkresolver_new() function allocates a new link resolver. The instance can be freed using archive_entry_linkresolver_free(). All deferred entries are flushed and d54 3 a56 3 The archive_entry_linkresolver_set_strategy() function selects the opti- mal hardlink strategy for the given format. The format code can be obtained from archive_format(3). The function can be called more than d64 1 a64 1 1. For the simple archive formats *entry is left unmodified and *sparse d67 1 a67 1 2. For tar like archive formats, *sparse is set to NULL. If *entry is d69 2 a70 2 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 d76 3 a78 3 3. For new cpio like archive formats a value for *entry of NULL is used to flush deferred entries. In that case *entry is set to an arbi- trary deferred entry and the entry itself is removed from the inter- d80 1 a80 1 either case, *sparse is set to NULL and the function returns. If d86 2 a87 2 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 d95 1 a95 1 1. For each new archive entry, call archive_entry_linkify(). d97 1 a97 1 2. Keep in mind that the entries returned may have a size of 0 now. d99 1 a99 1 3. If *entry is not NULL, archive it. d101 1 a101 1 4. If *sparse is not NULL, archive it. d103 3 a105 3 5. After all entries have been written to disk, call archive_entry_linkify() with *entry set to NULL and archive the returned entry as long as it is not NULL. d113 1 a113 1 BSD February 2, 2012 BSD @ 1.4 log @Update for libarchive-3.4.0: - improvements for Android APK and JAR archives - better support for non-recursive list and extract - tar --exclude-vcs support - fixes for file attributes and flags handling - zipx support - rar 5.0 reader @ text @d6 1 a6 1 archive_entry_linkify — hardlink resolver functions d30 2 a31 2 Hardlinks are handled in different ways by the archive formats. The ba‐ sic strategies are: d40 2 a41 2 The archive_entry_linkresolver functions help by providing a unified in‐ terface and handling the complexity behind the scene. d43 5 a47 5 The archive_entry_linkresolver functions assume that archive_entry in‐ stances 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. d49 2 a50 2 The archive_entry_linkresolver_new() function allocates a new link re‐ solver. The instance can be freed using d54 3 a56 3 The archive_entry_linkresolver_set_strategy() function selects the opti‐ mal hardlink strategy for the given format. The format code can be ob‐ tained from archive_format(3). The function can be called more than d69 2 a70 2 than 1 and the file type is a regular file or symbolic link, the in‐ ternal list is searched for a matching inode. If such an inode is d77 2 a78 2 to flush deferred entries. In that case *entry is set to an arbi‐ trary deferred entry and the entry itself is removed from the inter‐ d86 2 a87 2 If such an inode is found, the link count is decremented. If it re‐ mains larger than one, the existing entry on the internal list is d104 2 a105 2 archive_entry_linkify() with *entry set to NULL and archive the re‐ turned entry as long as it is not NULL. @ 1.3 log @Merge for libarchive-3.3.2. @ text @d30 2 a31 2 Hardlinks are handled in different ways by the archive formats. The basic strategies are: d40 2 a41 2 The archive_entry_linkresolver functions help by providing a unified interface and handling the complexity behind the scene. d43 5 a47 5 The archive_entry_linkresolver functions assume that 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 refer‐ ences can be recycled. d49 2 a50 2 The archive_entry_linkresolver_new() function allocates a new link resolver. The instance can be freed using d55 2 a56 2 mal hardlink strategy for the given format. The format code can be obtained from archive_format(3). The function can be called more than d69 2 a70 2 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 d86 2 a87 2 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 d104 2 a105 2 archive_entry_linkify() with *entry set to NULL and archive the returned entry as long as it is not NULL. @ 1.2 log @Merge libarchive-3.3.1. @ text @d3 4 a6 4 1mNAME0m 1marchive_entry_linkresolver22m, 1marchive_entry_linkresolver_new22m, 1marchive_entry_linkresolver_set_strategy22m, 1marchive_entry_linkresolver_free22m, 1marchive_entry_linkify 22m— hardlink resolver functions d8 1 a8 1 1mLIBRARY0m d11 2 a12 2 1mSYNOPSIS0m 1m#include 0m d14 2 a15 2 4mstruct24m 4marchive_entry_linkresolver24m 4m*0m 1marchive_entry_linkresolver_new22m(4mvoid24m); d17 3 a19 3 4mvoid0m 1marchive_entry_linkresolver_set_strategy22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mint24m 4mformat24m); d21 2 a22 2 4mvoid0m 1marchive_entry_linkresolver_free22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m); d24 3 a26 3 4mvoid0m 1marchive_entry_linkify22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mstruct24m 4marchive_entry24m 4m**entry24m, 4mstruct24m 4marchive_entry24m 4m**sparse24m); d28 1 a28 1 1mDESCRIPTION0m d40 1 a40 1 The 1marchive_entry_linkresolver 22mfunctions help by providing a unified d43 1 a43 1 The 1marchive_entry_linkresolver 22mfunctions assume that 4marchive_entry0m d49 1 a49 1 The 1marchive_entry_linkresolver_new22m() function allocates a new link d51 1 a51 1 1marchive_entry_linkresolver_free22m(). All deferred entries are flushed and d54 1 a54 1 The 1marchive_entry_linkresolver_set_strategy22m() function selects the opti‐ d59 3 a61 3 The 1marchive_entry_linkify22m() function is the core of 1marchive_entry_linkresolver22m. The 1mentry22m() argument points to the 4marchive_entry24m that should be written. Depending on the strategy one of d64 1 a64 1 1. For the simple archive formats 4m*entry24m is left unmodified and 4m*sparse0m d67 2 a68 2 2. For tar like archive formats, 4m*sparse24m is set to NULL. If 4m*entry24m is NULL, no action is taken. If the hardlink count of 4m*entry24m is larger d71 1 a71 1 found, the link count is decremented and the file size of 4m*entry24m is d76 2 a77 2 3. For new cpio like archive formats a value for 4m*entry24m of NULL is used to flush deferred entries. In that case 4m*entry24m is set to an arbi‐ d79 4 a82 4 nal list. If the internal list is empty, 4m*entry24m is set to NULL. In either case, 4m*sparse24m is set to NULL and the function returns. If the hardlink count of 4m*entry24m is one or the file type is a directory or device, 4m*sparse24m is set to NULL and no further action is taken. d85 1 a85 1 both 4m*entry24m and 4m*sparse24m are set to NULL and the function returns. d88 2 a89 2 swapped with 4m*entry24m after retaining the link count. The existing entry is returned in 4m*entry24m. If the link count reached one, the new d91 1 a91 1 4m*sparse24m. Otherwise 4m*sparse24m is set to NULL. d95 1 a95 1 1. For each new archive entry, call 1marchive_entry_linkify22m(). d99 1 a99 1 3. If 4m*entry24m is not NULL, archive it. d101 1 a101 1 4. If 4m*sparse24m is not NULL, archive it. d104 1 a104 1 1marchive_entry_linkify22m() with 4m*entry24m set to NULL and archive the d107 2 a108 2 1mRETURN VALUES0m 1marchive_entry_linkresolver_new22m() returns NULL on malloc(3) failures. d110 1 a110 1 1mSEE ALSO0m @ 1.1 log @Changes 3.1.2: This is a maintenance update to fix issues with the new RAR seeking feature. This new release also contains fixes for build failures when building libarchive using Visual Studio 2012 and MinGW. @ text @d3 4 a6 4 NAME archive_entry_linkresolver, archive_entry_linkresolver_new, archive_entry_linkresolver_set_strategy, archive_entry_linkresolver_free, archive_entry_linkify — hardlink resolver functions d8 1 a8 1 LIBRARY d11 2 a12 2 SYNOPSIS #include d14 2 a15 2 struct archive_entry_linkresolver * archive_entry_linkresolver_new(void); d17 3 a19 3 void archive_entry_linkresolver_set_strategy(struct archive_entry_linkresolver *resolver, int format); d21 2 a22 2 void archive_entry_linkresolver_free(struct archive_entry_linkresolver *resolver); d24 3 a26 3 void archive_entry_linkify(struct archive_entry_linkresolver *resolver, struct archive_entry **entry, struct archive_entry **sparse); d28 1 a28 1 DESCRIPTION d40 1 a40 1 The archive_entry_linkresolver functions help by providing a unified d43 1 a43 1 The archive_entry_linkresolver functions assume that archive_entry d49 1 a49 1 The archive_entry_linkresolver_new() function allocates a new link d51 1 a51 1 archive_entry_linkresolver_free(). All deferred entries are flushed and d54 1 a54 1 The archive_entry_linkresolver_set_strategy() function selects the opti‐ d59 3 a61 3 The archive_entry_linkify() function is the core of archive_entry_linkresolver. The entry() argument points to the archive_entry that should be written. Depending on the strategy one of d64 1 a64 1 1. For the simple archive formats *entry is left unmodified and *sparse d67 2 a68 2 2. For tar like archive formats, *sparse is set to NULL. If *entry is NULL, no action is taken. If the hardlink count of *entry is larger d71 1 a71 1 found, the link count is decremented and the file size of *entry is d76 2 a77 2 3. For new cpio like archive formats a value for *entry of NULL is used to flush deferred entries. In that case *entry is set to an arbi‐ d79 4 a82 4 nal list. If the internal list is empty, *entry is set to NULL. In either case, *sparse is set to NULL and the function returns. If the hardlink count of *entry is one or the file type is a directory or device, *sparse is set to NULL and no further action is taken. d85 1 a85 1 both *entry and *sparse are set to NULL and the function returns. d88 2 a89 2 swapped with *entry after retaining the link count. The existing entry is returned in *entry. If the link count reached one, the new d91 1 a91 1 *sparse. Otherwise *sparse is set to NULL. d95 1 a95 1 1. For each new archive entry, call archive_entry_linkify(). d99 1 a99 1 3. If *entry is not NULL, archive it. d101 1 a101 1 4. If *sparse is not NULL, archive it. d104 1 a104 1 archive_entry_linkify() with *entry set to NULL and archive the d107 2 a108 2 RETURN VALUES archive_entry_linkresolver_new() returns NULL on malloc(3) failures. d110 1 a110 1 SEE ALSO @ 1.1.1.1 log @Import libarchive-3.2.1: - security fixes and other bugfixes - support for multhreading in xz 5.2+ @ text @@ 1.1.1.2 log @Import libarchive-3.3.1. @ text @d3 4 a6 4 1mNAME0m 1marchive_entry_linkresolver22m, 1marchive_entry_linkresolver_new22m, 1marchive_entry_linkresolver_set_strategy22m, 1marchive_entry_linkresolver_free22m, 1marchive_entry_linkify 22m— hardlink resolver functions d8 1 a8 1 1mLIBRARY0m d11 2 a12 2 1mSYNOPSIS0m 1m#include 0m d14 2 a15 2 4mstruct24m 4marchive_entry_linkresolver24m 4m*0m 1marchive_entry_linkresolver_new22m(4mvoid24m); d17 3 a19 3 4mvoid0m 1marchive_entry_linkresolver_set_strategy22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mint24m 4mformat24m); d21 2 a22 2 4mvoid0m 1marchive_entry_linkresolver_free22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m); d24 3 a26 3 4mvoid0m 1marchive_entry_linkify22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mstruct24m 4marchive_entry24m 4m**entry24m, 4mstruct24m 4marchive_entry24m 4m**sparse24m); d28 1 a28 1 1mDESCRIPTION0m d40 1 a40 1 The 1marchive_entry_linkresolver 22mfunctions help by providing a unified d43 1 a43 1 The 1marchive_entry_linkresolver 22mfunctions assume that 4marchive_entry0m d49 1 a49 1 The 1marchive_entry_linkresolver_new22m() function allocates a new link d51 1 a51 1 1marchive_entry_linkresolver_free22m(). All deferred entries are flushed and d54 1 a54 1 The 1marchive_entry_linkresolver_set_strategy22m() function selects the opti‐ d59 3 a61 3 The 1marchive_entry_linkify22m() function is the core of 1marchive_entry_linkresolver22m. The 1mentry22m() argument points to the 4marchive_entry24m that should be written. Depending on the strategy one of d64 1 a64 1 1. For the simple archive formats 4m*entry24m is left unmodified and 4m*sparse0m d67 2 a68 2 2. For tar like archive formats, 4m*sparse24m is set to NULL. If 4m*entry24m is NULL, no action is taken. If the hardlink count of 4m*entry24m is larger d71 1 a71 1 found, the link count is decremented and the file size of 4m*entry24m is d76 2 a77 2 3. For new cpio like archive formats a value for 4m*entry24m of NULL is used to flush deferred entries. In that case 4m*entry24m is set to an arbi‐ d79 4 a82 4 nal list. If the internal list is empty, 4m*entry24m is set to NULL. In either case, 4m*sparse24m is set to NULL and the function returns. If the hardlink count of 4m*entry24m is one or the file type is a directory or device, 4m*sparse24m is set to NULL and no further action is taken. d85 1 a85 1 both 4m*entry24m and 4m*sparse24m are set to NULL and the function returns. d88 2 a89 2 swapped with 4m*entry24m after retaining the link count. The existing entry is returned in 4m*entry24m. If the link count reached one, the new d91 1 a91 1 4m*sparse24m. Otherwise 4m*sparse24m is set to NULL. d95 1 a95 1 1. For each new archive entry, call 1marchive_entry_linkify22m(). d99 1 a99 1 3. If 4m*entry24m is not NULL, archive it. d101 1 a101 1 4. If 4m*sparse24m is not NULL, archive it. d104 1 a104 1 1marchive_entry_linkify22m() with 4m*entry24m set to NULL and archive the d107 2 a108 2 1mRETURN VALUES0m 1marchive_entry_linkresolver_new22m() returns NULL on malloc(3) failures. d110 1 a110 1 1mSEE ALSO0m @ 1.1.1.3 log @Import libarchive-3.3.2 + 9de5f3 + f9dacbf: - Support NFS4 ACLs on Linux - Bugfixes @ text @d3 4 a6 4 NAME archive_entry_linkresolver, archive_entry_linkresolver_new, archive_entry_linkresolver_set_strategy, archive_entry_linkresolver_free, archive_entry_linkify — hardlink resolver functions d8 1 a8 1 LIBRARY d11 2 a12 2 SYNOPSIS #include d14 2 a15 2 struct archive_entry_linkresolver * archive_entry_linkresolver_new(void); d17 3 a19 3 void archive_entry_linkresolver_set_strategy(struct archive_entry_linkresolver *resolver, int format); d21 2 a22 2 void archive_entry_linkresolver_free(struct archive_entry_linkresolver *resolver); d24 3 a26 3 void archive_entry_linkify(struct archive_entry_linkresolver *resolver, struct archive_entry **entry, struct archive_entry **sparse); d28 1 a28 1 DESCRIPTION d40 1 a40 1 The archive_entry_linkresolver functions help by providing a unified d43 1 a43 1 The archive_entry_linkresolver functions assume that archive_entry d49 1 a49 1 The archive_entry_linkresolver_new() function allocates a new link d51 1 a51 1 archive_entry_linkresolver_free(). All deferred entries are flushed and d54 1 a54 1 The archive_entry_linkresolver_set_strategy() function selects the opti‐ d59 3 a61 3 The archive_entry_linkify() function is the core of archive_entry_linkresolver. The entry() argument points to the archive_entry that should be written. Depending on the strategy one of d64 1 a64 1 1. For the simple archive formats *entry is left unmodified and *sparse d67 2 a68 2 2. For tar like archive formats, *sparse is set to NULL. If *entry is NULL, no action is taken. If the hardlink count of *entry is larger d71 1 a71 1 found, the link count is decremented and the file size of *entry is d76 2 a77 2 3. For new cpio like archive formats a value for *entry of NULL is used to flush deferred entries. In that case *entry is set to an arbi‐ d79 4 a82 4 nal list. If the internal list is empty, *entry is set to NULL. In either case, *sparse is set to NULL and the function returns. If the hardlink count of *entry is one or the file type is a directory or device, *sparse is set to NULL and no further action is taken. d85 1 a85 1 both *entry and *sparse are set to NULL and the function returns. d88 2 a89 2 swapped with *entry after retaining the link count. The existing entry is returned in *entry. If the link count reached one, the new d91 1 a91 1 *sparse. Otherwise *sparse is set to NULL. d95 1 a95 1 1. For each new archive entry, call archive_entry_linkify(). d99 1 a99 1 3. If *entry is not NULL, archive it. d101 1 a101 1 4. If *sparse is not NULL, archive it. d104 1 a104 1 archive_entry_linkify() with *entry set to NULL and archive the d107 2 a108 2 RETURN VALUES archive_entry_linkresolver_new() returns NULL on malloc(3) failures. d110 1 a110 1 SEE ALSO @ 1.1.1.4 log @Import libarchive 3.4.0 @ text @d30 2 a31 2 Hardlinks are handled in different ways by the archive formats. The ba‐ sic strategies are: d40 2 a41 2 The archive_entry_linkresolver functions help by providing a unified in‐ terface and handling the complexity behind the scene. d43 5 a47 5 The archive_entry_linkresolver functions assume that archive_entry in‐ stances 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. d49 2 a50 2 The archive_entry_linkresolver_new() function allocates a new link re‐ solver. The instance can be freed using d55 2 a56 2 mal hardlink strategy for the given format. The format code can be ob‐ tained from archive_format(3). The function can be called more than d69 2 a70 2 than 1 and the file type is a regular file or symbolic link, the in‐ ternal list is searched for a matching inode. If such an inode is d86 2 a87 2 If such an inode is found, the link count is decremented. If it re‐ mains larger than one, the existing entry on the internal list is d104 2 a105 2 archive_entry_linkify() with *entry set to NULL and archive the re‐ turned entry as long as it is not NULL. @ 1.1.1.5 log @Import libarchive 3.7.2 @ text @d33 1 a33 1 1. Ignore hardlinks and store the body for each reference (old cpio, d36 1 a36 1 2. Store the body the first time an inode is seen (ustar, pax). d38 1 a38 1 3. Store the body the last time an inode is seen (new cpio). d51 1 a51 1 archive_entry_linkresolver_free(). All deferred entries are flushed and d64 1 a64 1 1. For the simple archive formats *entry is left unmodified and *sparse d67 1 a67 1 2. For tar like archive formats, *sparse is set to NULL. If *entry is d70 1 a70 1 ternal list is searched for a matching inode. If such an inode is d76 1 a76 1 3. For new cpio like archive formats a value for *entry of NULL is used d80 1 a80 1 either case, *sparse is set to NULL and the function returns. If d95 1 a95 1 1. For each new archive entry, call archive_entry_linkify(). d97 1 a97 1 2. Keep in mind that the entries returned may have a size of 0 now. d99 1 a99 1 3. If *entry is not NULL, archive it. d101 1 a101 1 4. If *sparse is not NULL, archive it. d103 1 a103 1 5. After all entries have been written to disk, call d113 1 a113 1 BSD February 2, 2012 BSD @ 1.1.1.6 log @libarchove: import version 3.7.7 @ text @d1 1 a1 1 4mARCHIVE_ENTRY_LINKIFY24m(3) Library Functions Manual 4mARCHIVE_ENTRY_LINKIFY24m(3) d3 103 a105 105 1mNAME0m archive_entry_linkresolver, archive_entry_linkresolver_new, archive_entry_linkresolver_set_strategy, archive_entry_linkresolver_free, archive_entry_linkify — hardlink re‐ solver functions 1mLIBRARY0m Streaming Archive Library (libarchive, -larchive) 1mSYNOPSIS0m 1m#include 0m 4mstruct24m 4marchive_entry_linkresolver24m 4m*0m 1marchive_entry_linkresolver_new22m(4mvoid24m); 4mvoid0m 1marchive_entry_linkresolver_set_strategy22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mint24m 4mformat24m); 4mvoid0m 1marchive_entry_linkresolver_free22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m); 4mvoid0m 1marchive_entry_linkify22m(4mstruct24m 4marchive_entry_linkresolver24m 4m*resolver24m, 4mstruct24m 4marchive_entry24m 4m**entry24m, 4mstruct24m 4marchive_entry24m 4m**sparse24m); 1mDESCRIPTION0m 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: 1. Ignore hardlinks and store the body for each reference (old cpio, zip). 2. Store the body the first time an inode is seen (ustar, pax). 3. Store the body the last time an inode is seen (new cpio). The 1marchive_entry_linkresolver 22mfunctions help by providing a unified interface and handling the complexity behind the scene. The 1marchive_entry_linkresolver 22mfunctions assume that 4marchive_entry24m in‐ stances have valid nlinks, inode and device values. The inode and de‐ vice value is used to match entries. The nlinks value is used to de‐ termined if all references have been found and if the internal refer‐ ences can be recycled. The 1marchive_entry_linkresolver_new22m() function allocates a new link re‐ solver. The instance can be freed using 1marchive_entry_linkresolver_free22m(). All deferred entries are flushed and the internal storage is freed. The 1marchive_entry_linkresolver_set_strategy22m() function selects the op‐ timal hardlink strategy for the given format. The format code can be obtained from 4marchive_format24m(3). The function can be called more than once, but it is recommended to flush all deferred entries first. The 1marchive_entry_linkify22m() function is the core of 1marchive_entry_linkresolver22m. The 1mentry22m() argument points to the 4marchive_entry24m that should be written. Depending on the strategy one of the following actions is taken: 1. For the simple archive formats 4m*entry24m is left unmodified and 4m*sparse24m is set to NULL. 2. For tar like archive formats, 4m*sparse24m is set to NULL. If 4m*entry0m is NULL, no action is taken. If the hardlink count of 4m*entry24m 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 4m*entry24m 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 in‐ ternal cache with a link count reduced by one. 3. For new cpio like archive formats a value for 4m*entry24m of NULL is used to flush deferred entries. In that case 4m*entry24m is set to an arbitrary deferred entry and the entry itself is removed from the internal list. If the internal list is empty, 4m*entry24m is set to NULL. In either case, 4m*sparse24m is set to NULL and the function re‐ turns. If the hardlink count of 4m*entry24m is one or the file type is a directory or device, 4m*sparse24m is set to NULL and no further ac‐ tion 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 4m*entry24m and 4m*sparse24m 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 4m*entry24m after retaining the link count. The existing entry is returned in 4m*entry24m. If the link count reached one, the new entry is also removed from the in‐ ternal list and returned in 4m*sparse24m. Otherwise 4m*sparse24m is set to NULL. The general usage is therefore: 1. For each new archive entry, call 1marchive_entry_linkify22m(). 2. Keep in mind that the entries returned may have a size of 0 now. 3. If 4m*entry24m is not NULL, archive it. 4. If 4m*sparse24m is not NULL, archive it. 5. After all entries have been written to disk, call 1marchive_entry_linkify22m() with 4m*entry24m set to NULL and archive the returned entry as long as it is not NULL. d107 2 a108 2 1mRETURN VALUES0m 1marchive_entry_linkresolver_new22m() returns NULL on 4mmalloc24m(3) failures. d110 2 a111 2 1mSEE ALSO0m 4marchive_entry24m(3) d113 1 a113 1 Debian February 2, 2012 4mARCHIVE_ENTRY_LINKIFY24m(3) @ 1.1.1.7 log @libarchive: import version 3.8.10 @ text @d42 1 a42 1 interface and handling the complexity behind the scenes. d46 2 a47 2 vice values are used to match entries. The nlinks value is used to de‐ termine if all references have been found and if the internal refer‐ d50 3 a52 3 The 1marchive_entry_linkresolver_new22m() function allocates a new link re‐ solver. The instance can be freed using 1marchive_entry_linkresolver_free22m(). All deferred entries are flushed d55 3 a57 3 The 1marchive_entry_linkresolver_set_strategy22m() function selects the op‐ timal hardlink strategy for the given format. The format code can be obtained from 4marchive_format24m(3). The function can be called more than d60 2 a61 2 The 1marchive_entry_linkify22m() function is the core of 1marchive_entry_linkresolver22m. The 4mentry24m argument points to the d65 1 a65 1 1. For the simple archive formats 4m*entry24m is left unmodified and d68 3 a70 3 2. For tar like archive formats, 4m*sparse24m is set to NULL. If 4m*entry0m is NULL, no action is taken. If the hardlink count of 4m*entry24m is larger than 1 and the file type is a regular file or symbolic d73 1 a73 1 of 4m*entry24m is set to 0 to notify that no body should be written. d77 4 a80 4 3. For new cpio like archive formats a value for 4m*entry24m of NULL is used to flush deferred entries. In that case 4m*entry24m is set to an arbitrary deferred entry and the entry itself is removed from the internal list. If the internal list is empty, 4m*entry24m is set to d83 2 a84 2 a directory or device, 4m*sparse24m is set to NULL and no further ac‐ tion is taken. Otherwise, the internal list is searched for a d86 2 a87 2 to the internal list, both 4m*entry24m and 4m*sparse24m are set to NULL and the function returns. If such an inode is found, the link count d89 2 a90 2 on the internal list is swapped with 4m*entry24m after retaining the link count. The existing entry is returned in 4m*entry24m. If the d92 1 a92 1 ternal list and returned in 4m*sparse24m. Otherwise 4m*sparse24m is set to d105 2 a106 2 5. After all entries have been written to disk, call 1marchive_entry_linkify22m() with 4m*entry24m set to NULL and archive the @