aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2024-06-03 05:49:22 +0000
committerXin LI <delphij@FreeBSD.org>2024-06-03 05:49:22 +0000
commitb599c3410cda4294a1f24783c500a7ee63f2f3af (patch)
tree054b08c2435be5f8667e773fa494e5501bfb6f71
parenta7819ed7ade8bf37ad82b0b26da9237692430eef (diff)
downloadsrc-vendor/xz/5.6.2.tar.gz
src-vendor/xz/5.6.2.zip
Vendor import of xz 5.6.2 (trimmed)vendor/xz/5.6.2vendor/xz
-rw-r--r--AUTHORS9
-rw-r--r--COPYING27
-rw-r--r--COPYING.CC-BY-SA-4.0427
-rw-r--r--ChangeLog2898
-rw-r--r--README26
-rw-r--r--THANKS6
-rw-r--r--doxygen/Doxyfile2672
-rw-r--r--doxygen/footer.html13
-rwxr-xr-xdoxygen/update-doxygen131
-rw-r--r--src/common/mythread.h2
-rw-r--r--src/common/tuklib_integer.h49
-rw-r--r--src/liblzma/api/lzma.h4
-rw-r--r--src/liblzma/api/lzma/base.h2
-rw-r--r--src/liblzma/api/lzma/container.h2
-rw-r--r--src/liblzma/api/lzma/index.h6
-rw-r--r--src/liblzma/api/lzma/version.h2
-rw-r--r--src/liblzma/api/lzma/vli.h5
-rw-r--r--src/liblzma/check/crc32_arm64.h25
-rw-r--r--src/liblzma/check/crc32_fast.c47
-rw-r--r--src/liblzma/check/crc32_table.c10
-rw-r--r--src/liblzma/check/crc32_tablegen.c2
-rw-r--r--src/liblzma/check/crc64_fast.c22
-rw-r--r--src/liblzma/check/crc64_table.c4
-rw-r--r--src/liblzma/check/crc64_tablegen.c2
-rw-r--r--src/liblzma/check/crc_common.h14
-rw-r--r--src/liblzma/check/crc_x86_clmul.h11
-rw-r--r--src/liblzma/common/easy_preset.h5
-rw-r--r--src/liblzma/common/filter_buffer_decoder.c2
-rw-r--r--src/liblzma/common/filter_common.c2
-rw-r--r--src/liblzma/common/filter_decoder.c15
-rw-r--r--src/liblzma/common/filter_encoder.c17
-rw-r--r--src/liblzma/common/index_decoder.c11
-rw-r--r--src/liblzma/common/memcmplen.h13
-rw-r--r--src/liblzma/common/outqueue.h5
-rw-r--r--src/liblzma/common/string_conversion.c12
-rw-r--r--src/liblzma/delta/delta_decoder.c5
-rw-r--r--src/liblzma/lz/lz_encoder.h2
-rw-r--r--src/liblzma/rangecoder/range_decoder.h1
-rw-r--r--src/liblzma/simple/riscv.c6
-rw-r--r--src/liblzma/simple/simple_coder.h8
-rw-r--r--src/liblzma/simple/x86.c11
-rw-r--r--src/xz/args.c35
-rw-r--r--src/xz/coder.c495
-rw-r--r--src/xz/coder.h21
-rw-r--r--src/xz/message.h1
-rw-r--r--src/xz/sandbox.c2
-rw-r--r--src/xz/sandbox.h2
-rw-r--r--src/xz/signals.c7
-rw-r--r--src/xz/xz.140
-rw-r--r--src/xzdec/xzdec.14
-rw-r--r--src/xzdec/xzdec.c58
51 files changed, 3508 insertions, 3690 deletions
diff --git a/AUTHORS b/AUTHORS
index 5012d0e01e83..5eff238ae413 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -2,8 +2,8 @@
Authors of XZ Utils
===================
- XZ Utils is developed and maintained by Lasse Collin
- <lasse.collin@tukaani.org> and Jia Tan <jiat0218@gmail.com>.
+ XZ Utils is developed and maintained by
+ Lasse Collin <lasse.collin@tukaani.org>.
Major parts of liblzma are based on code written by Igor Pavlov,
specifically the LZMA SDK <https://7-zip.org/sdk.html>. Without
@@ -30,6 +30,11 @@ Authors of XZ Utils
- Jonathan Nieder
- Joachim Henke
+ Special author: Jia Tan was a co-maintainer in 2022-2024. He and
+ the team behind him inserted a backdoor (CVE-2024-3094) into
+ XZ Utils 5.6.0 and 5.6.1 releases. He suddenly disappeared when
+ this was discovered.
+
Many people have contributed improvements or reported bugs.
Most of these people are mentioned in the file THANKS.
diff --git a/COPYING b/COPYING
index a31477d62d31..aed21531497c 100644
--- a/COPYING
+++ b/COPYING
@@ -3,8 +3,7 @@ XZ Utils Licensing
==================
Different licenses apply to different files in this package. Here
- is a rough summary of which licenses apply to which parts of this
- package (but check the individual files to be sure!):
+ is a summary of which licenses apply to which parts of this package:
- liblzma is under the BSD Zero Clause License (0BSD).
@@ -25,20 +24,6 @@ XZ Utils Licensing
lzma-file-format.xt are in the public domain but may
be distributed under the terms of 0BSD too.
- - Doxygen-generated HTML version of the liblzma API documentation:
- While Doxygen is under the GNU GPLv2, the license information
- in Doxygen includes the following exception:
-
- Documents produced by doxygen are derivative works
- derived from the input used in their production;
- they are not affected by this license.
-
- Note: The JavaScript files (under the MIT license) have
- been removed from the Doxygen output.
-
- - The XZ logo (xz-logo.png) included in the Doxygen-generated
- documentation is under the Creative Commons BY-SA 4.0 license.
-
- Translated messages and man pages are under 0BSD except that
some old translations are in the public domain.
@@ -51,8 +36,9 @@ XZ Utils Licensing
These files don't affect the licensing of the binaries being
built.
- - The extra directory contain files that are under various
- free software licenses.
+ - The 'extra' directory contains files that are under various
+ free software licenses. These aren't built or installed as
+ part of XZ Utils.
For the files under the BSD Zero Clause License (0BSD), if
a copyright notice is needed, the following is sufficient:
@@ -65,16 +51,13 @@ XZ Utils Licensing
it is not legally required by the license terms. Here is an example
of a good notice to put into "about box" or into documentation:
- This software includes code from XZ Utils
- <https://xz.tukaani.org/xz-utils/>.
+ This software includes code from XZ Utils <https://tukaani.org/xz/>.
The following license texts are included in the following files:
- COPYING.0BSD: BSD Zero Clause License
- COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1
- COPYING.GPLv2: GNU General Public License version 2
- COPYING.GPLv3: GNU General Public License version 3
- - COPYING.CC-BY-SA-4.0: Creative Commons Attribution-ShareAlike 4.0
- International Public License
A note about old XZ Utils releases:
diff --git a/COPYING.CC-BY-SA-4.0 b/COPYING.CC-BY-SA-4.0
deleted file mode 100644
index 7d4f96c54aa1..000000000000
--- a/COPYING.CC-BY-SA-4.0
+++ /dev/null
@@ -1,427 +0,0 @@
-Attribution-ShareAlike 4.0 International
-
-=======================================================================
-
-Creative Commons Corporation ("Creative Commons") is not a law firm and
-does not provide legal services or legal advice. Distribution of
-Creative Commons public licenses does not create a lawyer-client or
-other relationship. Creative Commons makes its licenses and related
-information available on an "as-is" basis. Creative Commons gives no
-warranties regarding its licenses, any material licensed under their
-terms and conditions, or any related information. Creative Commons
-disclaims all liability for damages resulting from their use to the
-fullest extent possible.
-
-Using Creative Commons Public Licenses
-
-Creative Commons public licenses provide a standard set of terms and
-conditions that creators and other rights holders may use to share
-original works of authorship and other material subject to copyright
-and certain other rights specified in the public license below. The
-following considerations are for informational purposes only, are not
-exhaustive, and do not form part of our licenses.
-
- Considerations for licensors: Our public licenses are
- intended for use by those authorized to give the public
- permission to use material in ways otherwise restricted by
- copyright and certain other rights. Our licenses are
- irrevocable. Licensors should read and understand the terms
- and conditions of the license they choose before applying it.
- Licensors should also secure all rights necessary before
- applying our licenses so that the public can reuse the
- material as expected. Licensors should clearly mark any
- material not subject to the license. This includes other CC-
- licensed material, or material used under an exception or
- limitation to copyright. More considerations for licensors:
- wiki.creativecommons.org/Considerations_for_licensors
-
- Considerations for the public: By using one of our public
- licenses, a licensor grants the public permission to use the
- licensed material under specified terms and conditions. If
- the licensor's permission is not necessary for any reason--for
- example, because of any applicable exception or limitation to
- copyright--then that use is not regulated by the license. Our
- licenses grant only permissions under copyright and certain
- other rights that a licensor has authority to grant. Use of
- the licensed material may still be restricted for other
- reasons, including because others have copyright or other
- rights in the material. A licensor may make special requests,
- such as asking that all changes be marked or described.
- Although not required by our licenses, you are encouraged to
- respect those requests where reasonable. More considerations
- for the public:
- wiki.creativecommons.org/Considerations_for_licensees
-
-=======================================================================
-
-Creative Commons Attribution-ShareAlike 4.0 International Public
-License
-
-By exercising the Licensed Rights (defined below), You accept and agree
-to be bound by the terms and conditions of this Creative Commons
-Attribution-ShareAlike 4.0 International Public License ("Public
-License"). To the extent this Public License may be interpreted as a
-contract, You are granted the Licensed Rights in consideration of Your
-acceptance of these terms and conditions, and the Licensor grants You
-such rights in consideration of benefits the Licensor receives from
-making the Licensed Material available under these terms and
-conditions.
-
-
-Section 1 -- Definitions.
-
- a. Adapted Material means material subject to Copyright and Similar
- Rights that is derived from or based upon the Licensed Material
- and in which the Licensed Material is translated, altered,
- arranged, transformed, or otherwise modified in a manner requiring
- permission under the Copyright and Similar Rights held by the
- Licensor. For purposes of this Public License, where the Licensed
- Material is a musical work, performance, or sound recording,
- Adapted Material is always produced where the Licensed Material is
- synched in timed relation with a moving image.
-
- b. Adapter's License means the license You apply to Your Copyright
- and Similar Rights in Your contributions to Adapted Material in
- accordance with the terms and conditions of this Public License.
-
- c. BY-SA Compatible License means a license listed at
- creativecommons.org/compatiblelicenses, approved by Creative
- Commons as essentially the equivalent of this Public License.
-
- d. Copyright and Similar Rights means copyright and/or similar rights
- closely related to copyright including, without limitation,
- performance, broadcast, sound recording, and Sui Generis Database
- Rights, without regard to how the rights are labeled or
- categorized. For purposes of this Public License, the rights
- specified in Section 2(b)(1)-(2) are not Copyright and Similar
- Rights.
-
- e. Effective Technological Measures means those measures that, in the
- absence of proper authority, may not be circumvented under laws
- fulfilling obligations under Article 11 of the WIPO Copyright
- Treaty adopted on December 20, 1996, and/or similar international
- agreements.
-
- f. Exceptions and Limitations means fair use, fair dealing, and/or
- any other exception or limitation to Copyright and Similar Rights
- that applies to Your use of the Licensed Material.
-
- g. License Elements means the license attributes listed in the name
- of a Creative Commons Public License. The License Elements of this
- Public License are Attribution and ShareAlike.
-
- h. Licensed Material means the artistic or literary work, database,
- or other material to which the Licensor applied this Public
- License.
-
- i. Licensed Rights means the rights granted to You subject to the
- terms and conditions of this Public License, which are limited to
- all Copyright and Similar Rights that apply to Your use of the
- Licensed Material and that the Licensor has authority to license.
-
- j. Licensor means the individual(s) or entity(ies) granting rights
- under this Public License.
-
- k. Share means to provide material to the public by any means or
- process that requires permission under the Licensed Rights, such
- as reproduction, public display, public performance, distribution,
- dissemination, communication, or importation, and to make material
- available to the public including in ways that members of the
- public may access the material from a place and at a time
- individually chosen by them.
-
- l. Sui Generis Database Rights means rights other than copyright
- resulting from Directive 96/9/EC of the European Parliament and of
- the Council of 11 March 1996 on the legal protection of databases,
- as amended and/or succeeded, as well as other essentially
- equivalent rights anywhere in the world.
-
- m. You means the individual or entity exercising the Licensed Rights
- under this Public License. Your has a corresponding meaning.
-
-
-Section 2 -- Scope.
-
- a. License grant.
-
- 1. Subject to the terms and conditions of this Public License,
- the Licensor hereby grants You a worldwide, royalty-free,
- non-sublicensable, non-exclusive, irrevocable license to
- exercise the Licensed Rights in the Licensed Material to:
-
- a. reproduce and Share the Licensed Material, in whole or
- in part; and
-
- b. produce, reproduce, and Share Adapted Material.
-
- 2. Exceptions and Limitations. For the avoidance of doubt, where
- Exceptions and Limitations apply to Your use, this Public
- License does not apply, and You do not need to comply with
- its terms and conditions.
-
- 3. Term. The term of this Public License is specified in Section
- 6(a).
-
- 4. Media and formats; technical modifications allowed. The
- Licensor authorizes You to exercise the Licensed Rights in
- all media and formats whether now known or hereafter created,
- and to make technical modifications necessary to do so. The
- Licensor waives and/or agrees not to assert any right or
- authority to forbid You from making technical modifications
- necessary to exercise the Licensed Rights, including
- technical modifications necessary to circumvent Effective
- Technological Measures. For purposes of this Public License,
- simply making modifications authorized by this Section 2(a)
- (4) never produces Adapted Material.
-
- 5. Downstream recipients.
-
- a. Offer from the Licensor -- Licensed Material. Every
- recipient of the Licensed Material automatically
- receives an offer from the Licensor to exercise the
- Licensed Rights under the terms and conditions of this
- Public License.
-
- b. Additional offer from the Licensor -- Adapted Material.
- Every recipient of Adapted Material from You
- automatically receives an offer from the Licensor to
- exercise the Licensed Rights in the Adapted Material
- under the conditions of the Adapter's License You apply.
-
- c. No downstream restrictions. You may not offer or impose
- any additional or different terms or conditions on, or
- apply any Effective Technological Measures to, the
- Licensed Material if doing so restricts exercise of the
- Licensed Rights by any recipient of the Licensed
- Material.
-
- 6. No endorsement. Nothing in this Public License constitutes or
- may be construed as permission to assert or imply that You
- are, or that Your use of the Licensed Material is, connected
- with, or sponsored, endorsed, or granted official status by,
- the Licensor or others designated to receive attribution as
- provided in Section 3(a)(1)(A)(i).
-
- b. Other rights.
-
- 1. Moral rights, such as the right of integrity, are not
- licensed under this Public License, nor are publicity,
- privacy, and/or other similar personality rights; however, to
- the extent possible, the Licensor waives and/or agrees not to
- assert any such rights held by the Licensor to the limited
- extent necessary to allow You to exercise the Licensed
- Rights, but not otherwise.
-
- 2. Patent and trademark rights are not licensed under this
- Public License.
-
- 3. To the extent possible, the Licensor waives any right to
- collect royalties from You for the exercise of the Licensed
- Rights, whether directly or through a collecting society
- under any voluntary or waivable statutory or compulsory
- licensing scheme. In all other cases the Licensor expressly
- reserves any right to collect such royalties.
-
-
-Section 3 -- License Conditions.
-
-Your exercise of the Licensed Rights is expressly made subject to the
-following conditions.
-
- a. Attribution.
-
- 1. If You Share the Licensed Material (including in modified
- form), You must:
-
- a. retain the following if it is supplied by the Licensor
- with the Licensed Material:
-
- i. identification of the creator(s) of the Licensed
- Material and any others designated to receive
- attribution, in any reasonable manner requested by
- the Licensor (including by pseudonym if
- designated);
-
- ii. a copyright notice;
-
- iii. a notice that refers to this Public License;
-
- iv. a notice that refers to the disclaimer of
- warranties;
-
- v. a URI or hyperlink to the Licensed Material to the
- extent reasonably practicable;
-
- b. indicate if You modified the Licensed Material and
- retain an indication of any previous modifications; and
-
- c. indicate the Licensed Material is licensed under this
- Public License, and include the text of, or the URI or
- hyperlink to, this Public License.
-
- 2. You may satisfy the conditions in Section 3(a)(1) in any
- reasonable manner based on the medium, means, and context in
- which You Share the Licensed Material. For example, it may be
- reasonable to satisfy the conditions by providing a URI or
- hyperlink to a resource that includes the required
- information.
-
- 3. If requested by the Licensor, You must remove any of the
- information required by Section 3(a)(1)(A) to the extent
- reasonably practicable.
-
- b. ShareAlike.
-
- In addition to the conditions in Section 3(a), if You Share
- Adapted Material You produce, the following conditions also apply.
-
- 1. The Adapter's License You apply must be a Creative Commons
- license with the same License Elements, this version or
- later, or a BY-SA Compatible License.
-
- 2. You must include the text of, or the URI or hyperlink to, the
- Adapter's License You apply. You may satisfy this condition
- in any reasonable manner based on the medium, means, and
- context in which You Share Adapted Material.
-
- 3. You may not offer or impose any additional or different terms
- or conditions on, or apply any Effective Technological
- Measures to, Adapted Material that restrict exercise of the
- rights granted under the Adapter's License You apply.
-
-
-Section 4 -- Sui Generis Database Rights.
-
-Where the Licensed Rights include Sui Generis Database Rights that
-apply to Your use of the Licensed Material:
-
- a. for the avoidance of doubt, Section 2(a)(1) grants You the right
- to extract, reuse, reproduce, and Share all or a substantial
- portion of the contents of the database;
-
- b. if You include all or a substantial portion of the database
- contents in a database in which You have Sui Generis Database
- Rights, then the database in which You have Sui Generis Database
- Rights (but not its individual contents) is Adapted Material,
- including for purposes of Section 3(b); and
-
- c. You must comply with the conditions in Section 3(a) if You Share
- all or a substantial portion of the contents of the database.
-
-For the avoidance of doubt, this Section 4 supplements and does not
-replace Your obligations under this Public License where the Licensed
-Rights include other Copyright and Similar Rights.
-
-
-Section 5 -- Disclaimer of Warranties and Limitation of Liability.
-
- a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
- EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
- AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
- ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
- IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
- WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
- PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
- ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
- KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
- ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
-
- b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
- TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
- NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
- INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
- COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
- USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
- DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
- IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
-
- c. The disclaimer of warranties and limitation of liability provided
- above shall be interpreted in a manner that, to the extent
- possible, most closely approximates an absolute disclaimer and
- waiver of all liability.
-
-
-Section 6 -- Term and Termination.
-
- a. This Public License applies for the term of the Copyright and
- Similar Rights licensed here. However, if You fail to comply with
- this Public License, then Your rights under this Public License
- terminate automatically.
-
- b. Where Your right to use the Licensed Material has terminated under
- Section 6(a), it reinstates:
-
- 1. automatically as of the date the violation is cured, provided
- it is cured within 30 days of Your discovery of the
- violation; or
-
- 2. upon express reinstatement by the Licensor.
-
- For the avoidance of doubt, this Section 6(b) does not affect any
- right the Licensor may have to seek remedies for Your violations
- of this Public License.
-
- c. For the avoidance of doubt, the Licensor may also offer the
- Licensed Material under separate terms or conditions or stop
- distributing the Licensed Material at any time; however, doing so
- will not terminate this Public License.
-
- d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
- License.
-
-
-Section 7 -- Other Terms and Conditions.
-
- a. The Licensor shall not be bound by any additional or different
- terms or conditions communicated by You unless expressly agreed.
-
- b. Any arrangements, understandings, or agreements regarding the
- Licensed Material not stated herein are separate from and
- independent of the terms and conditions of this Public License.
-
-
-Section 8 -- Interpretation.
-
- a. For the avoidance of doubt, this Public License does not, and
- shall not be interpreted to, reduce, limit, restrict, or impose
- conditions on any use of the Licensed Material that could lawfully
- be made without permission under this Public License.
-
- b. To the extent possible, if any provision of this Public License is
- deemed unenforceable, it shall be automatically reformed to the
- minimum extent necessary to make it enforceable. If the provision
- cannot be reformed, it shall be severed from this Public License
- without affecting the enforceability of the remaining terms and
- conditions.
-
- c. No term or condition of this Public License will be waived and no
- failure to comply consented to unless expressly agreed to by the
- Licensor.
-
- d. Nothing in this Public License constitutes or may be interpreted
- as a limitation upon, or waiver of, any privileges and immunities
- that apply to the Licensor or You, including from the legal
- processes of any jurisdiction or authority.
-
-
-=======================================================================
-
-Creative Commons is not a party to its public
-licenses. Notwithstanding, Creative Commons may elect to apply one of
-its public licenses to material it publishes and in those instances
-will be considered the “Licensor.” The text of the Creative Commons
-public licenses is dedicated to the public domain under the CC0 Public
-Domain Dedication. Except for the limited purpose of indicating that
-material is shared under a Creative Commons public license or as
-otherwise permitted by the Creative Commons policies published at
-creativecommons.org/policies, Creative Commons does not authorize the
-use of the trademark "Creative Commons" or any other trademark or logo
-of Creative Commons without its prior written consent including,
-without limitation, in connection with any unauthorized modifications
-to any of its public licenses or any other arrangements,
-understandings, or agreements concerning use of licensed material. For
-the avoidance of doubt, this paragraph does not form part of the
-public licenses.
-
-Creative Commons may be contacted at creativecommons.org.
diff --git a/ChangeLog b/ChangeLog
index 54b68744af86..c7795974ba23 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,2901 @@
+commit 3ec664d3f652133136587a51d4505b1abe1acdd7
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 18:03:51 +0300
+
+ Bump version and soname for 5.6.2
+
+ src/liblzma/Makefile.am | 2 +-
+ src/liblzma/api/lzma/version.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 3cc0aa702e50b786c52c6f3d3f831a635c4df197
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 18:03:04 +0300
+
+ Add NEWS for 5.6.2
+
+ NEWS | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 130 insertions(+)
+
+commit 526d3f7f2c2d5e134157d08b37fb5fd0b125799e
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 18:03:04 +0300
+
+ Add NEWS for 5.4.7
+
+ NEWS | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 89 insertions(+)
+
+commit 660b09279e8f544acf120d29194d5c3051b484eb
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 18:03:04 +0300
+
+ Add NEWS for 5.2.13
+
+ NEWS | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 115 insertions(+)
+
+commit 7d76282dac766c0ced8ae24e0f7ce0005f3e377d
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 17:47:13 +0300
+
+ Translations: Run po4a/update-po
+
+ Now the files are in the new formatting without source file
+ line numbers. Future updates should keep the diffs much smaller.
+
+ po4a/de.po | 1592 ++++++++++---------
+ po4a/fr.po | 4450 +++++++++++++++++-----------------------------------
+ po4a/ko.po | 1592 ++++++++++---------
+ po4a/pt_BR.po | 4817 ++++++++++++++++++---------------------------------------
+ po4a/ro.po | 1592 ++++++++++---------
+ po4a/uk.po | 1592 ++++++++++---------
+ 6 files changed, 6114 insertions(+), 9521 deletions(-)
+
+commit 4470c3f7d8954bb47b280ec07ad0bd4be2223083
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 17:44:53 +0300
+
+ Translations: Run "make -C po update-po"
+
+ In the past this wasn't done before releases; the Git repository
+ just contained the files from the Translation Project. But this
+ way it is clearer when comparing release tarballs against the
+ Git repository. In future releases this might no longer be necessary
+ within a stable branch as the .po files won't change so easily anymore
+ when creating a tarball.
+
+ po/ca.po | 567 +++++++++++++++++++++++++---------------
+ po/cs.po | 821 +++++++++++++++++++++++++++++++++++++--------------------
+ po/da.po | 809 +++++++++++++++++++++++++++++++++++---------------------
+ po/de.po | 403 ++++++++++++++--------------
+ po/eo.po | 403 ++++++++++++++--------------
+ po/es.po | 403 ++++++++++++++--------------
+ po/fi.po | 578 +++++++++++++++++++++++++---------------
+ po/fr.po | 538 +++++++++++++++++++++++---------------
+ po/hr.po | 403 ++++++++++++++--------------
+ po/hu.po | 403 ++++++++++++++--------------
+ po/it.po | 854 +++++++++++++++++++++++++++++++++++++++---------------------
+ po/ko.po | 403 ++++++++++++++--------------
+ po/pl.po | 403 ++++++++++++++--------------
+ po/pt.po | 842 +++++++++++++++++++++++++++++++++++++++--------------------
+ po/pt_BR.po | 567 +++++++++++++++++++++++++---------------
+ po/ro.po | 403 ++++++++++++++--------------
+ po/sr.po | 838 ++++++++++++++++++++++++++++++++++++++--------------------
+ po/sv.po | 403 ++++++++++++++--------------
+ po/tr.po | 567 +++++++++++++++++++++++++---------------
+ po/uk.po | 403 ++++++++++++++--------------
+ po/vi.po | 403 ++++++++++++++--------------
+ po/zh_CN.po | 417 +++++++++++++++--------------
+ po/zh_TW.po | 558 ++++++++++++++++++++++++---------------
+ 23 files changed, 7257 insertions(+), 5132 deletions(-)
+
+commit 33b8a85face5392b5ac843bdbe3a72f024cad6ef
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-29 16:33:24 +0300
+
+ Build: Update po/*.po files only when needed
+
+ When po/xz.pot doesn't exist, running "make" or "make dist" will
+ create it. Then the .po files will be updated but only if they
+ actually would change more than the POT-Creation-Date line.
+ Then the .gmo files would be generated from the .po files.
+ This is the case before and after this commit.
+
+ However, "make dist" and thus "make mydist" did a forced update
+ to the files, updating them even if the only change was the
+ POT-Creation-Date line. This had pros and cons: It made it clear
+ that the .po file really is in sync with the recent strings in
+ the package. On the other hand, it added noise in form of changed
+ files in the source tree and distribution tarballs. It can be
+ ignored with something like "diff -I'^"POT-Creation-Date: '" but
+ it's still a minor annoyance *if* there's not enough value in
+ having the most recent timestamp.
+
+ Setting DIST_DEPENDS_ON_UPDATE_PO = no means that such forced
+ update won't happen in "make dist" anymore. However, the "mydist"
+ target will use xz.pot-update target which is the same target that
+ is run when xz.pot doesn't exist at all yet. Thus "mydist" will
+ ensure that the translations are up to date, without noise from
+ changes that would affect only the POT-Creation-Date line.
+
+ Note that po4a always uses msgmerge with --update, so POT-Creation-Date
+ in the man page translations is never the only change in .po files.
+ In that sense this commit makes the message translations behave more
+ similarly to the man page translations.
+
+ Distribution tarballs will still have non-reproducible POT-Creation-Date
+ in po/xz.pot and po4a/xz-man.pot but those are just two files. Even they
+ could be made reproducible from a Git timestamp if desired.
+
+ (cherry picked from commit 9284f1aea31f0eb23e2ea72f7218b271e2234762)
+
+ Makefile.am | 3 ++-
+ po/Makevars | 6 +++++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 09daebd66b55799bbc495b84310a86c91bbfc1c8
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 21:10:33 +0300
+
+ po4a/update-po: Disable wrapping in .pot and .po files
+
+ The .po files from the Translation Project come with unwrapped
+ strings so this matches it.
+
+ This may reduce the noise in diffs too. When the beginning of
+ a paragraph had changed, the rest of the lines got rewrapped
+ in msgsid. Now it's just one very long line that changes when
+ a paragraph has been edited.
+
+ The --add-location=file option was removed as redundant. The line
+ numbers don't exist in the .pot file due to --porefs file and thus
+ they cannot get copied to the .po files either.
+
+ (cherry picked from commit 4beba1cd62d7f8f7a6f1e899b68292d94c53b599)
+
+ po4a/update-po | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+commit 51ad72dae4e516e9292f6f399bd1e4970b77f7c1
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 18:36:53 +0300
+
+ Update contact info in README
+
+ (cherry picked from commit b14c130a58a649f9a73392eeb122cb252327c569)
+
+ README | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+commit 18463917f9b255b8f925fa54ab9388319735b14a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 13:25:07 +0300
+
+ Translations: Use --package-name=xz-man with po4a
+
+ This is to match reality. See the added comment.
+
+ (cherry picked from commit 75f5f2e014b0ee646963f36bc6a9c840fb272353)
+
+ po4a/update-po | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit 26bbcb13cd2bbb56fe406544a484b4edfc7e0837
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 13:03:40 +0300
+
+ Translations: Omit --package-name from po/Makevars
+
+ This is closer to the reality in the po/*.po files.
+
+ (cherry picked from commit eb217d016cfbbba1babc19a61095b3ea25898af6)
+
+ po/Makevars | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit c35ee804b89556d15bc8cdc16867f4316e69392f
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 01:17:45 +0300
+
+ Translations: Omit man page line numbers from .pot and .po files
+
+ (cherry picked from commit 9114267038deaecf4832a5cacb5acbe6591ac839)
+
+ po4a/update-po | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 0f4429d47f9cfe2cdfbad115a7bc2f11221cb217
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 01:06:30 +0300
+
+ Translations: Use the xgettext option --add-location=file
+
+ (cherry picked from commit 093490b58271e9424ce38a7b1b38bcf61b9c86c6)
+
+ po/Makevars | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit a93e2c2d1d34a6f609d24a8e62072ce78df7a734
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-28 00:43:53 +0300
+
+ Translations: Use the msgmerge option --add-location=file
+
+ This way the PO file diffs are less noisy but the locations of the
+ strings are still present at file level, just without line numbers.
+
+ The option is available since gettext 0.19 (2014).
+ configure.ac requires 0.19.6.
+
+ (cherry picked from commit fccebe2b4fd513488fc920e4dac32562ed3c7637)
+
+ po/Makevars | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d4389895592e9a8e0f6391fdad816ae0537bb07b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-27 12:22:08 +0300
+
+ Build: Use $(SHELL) instead of sh to run scripts in Makefile.am
+
+ (cherry picked from commit f361d9ae85707a87eb28db400eb7229cec103d58)
+
+ Makefile.am | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 5781414b6e3120098b0060d073aa2b0580ff6f40
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-23 17:25:13 +0300
+
+ Translations: Change the home page URLs in man page translations
+
+ Since the source strings have changed, these would get marked as
+ fuzzy and the original string would be used instead. The original
+ and translated strings are identical in this case so it wouldn't
+ matter. But patching the translations helps still because then
+ po4a will show the correct translation percentage.
+
+ (cherry picked from commit a26dece34793a09aac2476f954d162d03e9cf62b)
+
+ po4a/de.po | 8 ++++----
+ po4a/fr.po | 4 ++--
+ po4a/ko.po | 4 ++--
+ po4a/pt_BR.po | 4 ++--
+ po4a/ro.po | 8 ++++----
+ po4a/uk.po | 8 ++++----
+ 6 files changed, 18 insertions(+), 18 deletions(-)
+
+commit 3670e0616eb9d86e7519d2b76242fd32c6e0c1ae
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-23 15:15:18 +0300
+
+ CMake: Add manual support for 32-bit x86 assembly files
+
+ One has to pass -DENABLE_X86_ASM=ON to cmake to enable the
+ CRC assembly code. Autodetection isn't done. Looking at
+ CMAKE_SYSTEM_PROCESSOR might not work as it comes from uname
+ unless cross-compilation is done using a CMake toolchain file.
+
+ On top of this, if the code is run on modern processors that support
+ the CLMUL instruction, then the C code should be faster (but then
+ one should also be using a x86-64 build if possible).
+
+ (cherry picked from commit 24387c234b4eed1ef9a7eaa107391740b4095568)
+
+ CMakeLists.txt | 34 +++++++++++++++++++++++++++++++---
+ 1 file changed, 31 insertions(+), 3 deletions(-)
+
+commit c1b001b09e902ecacabb8a2ae1fc991018a4d1f8
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-23 14:26:45 +0300
+
+ CMake: Rename USE_DOXYGEN to ENABLE_DOXYGEN
+
+ It's more consistent with the other option() uses.
+
+ (cherry picked from commit 0fb3c9c3f684f5a25bd425ed079a20a79f0c969d)
+
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 7213fe39c717d4623c92af715484a71d9a6ff8d0
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-22 15:21:53 +0300
+
+ Use more confident language in COPYING
+
+ (cherry picked from commit 62733592a1cc6f0b41f46ef52e06d1a6fe1ff38a)
+
+ COPYING | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 15358be94a4e3f9c20f331b64b3980f3e5283760
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-29 17:16:38 +0300
+
+ Add SPDX license identifiers to files under tests/ossfuzz
+
+ (cherry picked from commit 9ae2ebc1e504a1814b0788de95fb5c58c0328dde)
+
+ tests/ossfuzz/Makefile | 2 ++
+ tests/ossfuzz/config/fuzz_decode_alone.options | 2 ++
+ tests/ossfuzz/config/fuzz_decode_stream.options | 2 ++
+ tests/ossfuzz/config/fuzz_encode_stream.options | 2 ++
+ tests/ossfuzz/config/fuzz_lzma.dict | 2 ++
+ tests/ossfuzz/config/fuzz_xz.dict | 2 ++
+ 6 files changed, 12 insertions(+)
+
+commit 1aa92c7ffd0bf8f9738ebf3bd1263bd6f5f096a2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-29 17:16:06 +0300
+
+ Add SPDX license identifier to .codespellrc
+
+ (cherry picked from commit 9000d70eb9815bd7f43ffddc1c3316c507aa0e05)
+
+ .codespellrc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 3c7e400fdcabc0a1b78863948fc17964667a9401
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-22 15:12:09 +0300
+
+ Move entries po4a/.gitignore to the top level .gitignore
+
+ The po4a directory is in EXTRA_DIST and thus all files there
+ are included in the package. .gitignore doesn't belong in the
+ package so keep that file out of the po4a directory.
+
+ (cherry picked from commit 903c16fcfa5bfad0cdb2a7383d941243bcb12e76)
+
+ .gitignore | 4 ++++
+ po4a/.gitignore | 3 ---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 8a99272d4a9358dabdb5bc0b72f4c5240a9dc066
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ CMake: Add comments
+
+ (cherry picked from commit 9d997d6f9d4f042412e45c7b7a23a14ad2e4f9aa)
+
+ tests/tests.cmake | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit c35259c9e2400f6f88c269d95ecafdb223ff45d2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ CMake: Remove the note that some tests aren't run
+
+ They are now in the common build configurations.
+
+ (cherry picked from commit d35368b33e54bad2f566df99fac29ffea38e34de)
+
+ CMakeLists.txt | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 30982a215395f19b3837c3da540e1cb3f913569f
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ CMake: Add support for test_files.sh
+
+ (cherry picked from commit dc232d584619b2819a9c52d6ad5d8b5d56b392ba)
+
+ tests/tests.cmake | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+commit 3a8f81e0ad4cd1c102a03ff09e703cf8cb074afc
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ Tests: Make test_files.sh more flexible
+
+ Add a new optional argument to specify the directory of the xz and
+ xzdec executables.
+
+ If ../config.h doesn't exist, assume that all encoders and decoders
+ are available.
+
+ (cherry picked from commit a7e9230af9d1f87f474fe38886eb977d4149dc9b)
+
+ tests/test_files.sh | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+commit 0644675c829143112c85455f8a6aa91bfc4e1bbb
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ CMake: Add support for test_compress.sh tests
+
+ (cherry picked from commit b40e6efbb48d740b9b5b303e59e344801cbb5bd8)
+
+ tests/tests.cmake | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+commit dcc02a6ca0e0ac4e330e820683754badbcf9815b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ Tests: Make test_compress.sh more flexible
+
+ Add a new optional second argument: directory of the xz and xzdec
+ executables. This is need with the CMake build where the binaries
+ end up in the top-level build directory.
+
+ If ../config.h doesn't exist, assume that all encoders and decoders
+ are available. This will make this script usable from CMake in the
+ most common build configuration.
+
+ NOTE: Since the existence of ../config.h is checked, the working
+ directory of the test script must be a subdir in the build tree!
+ Otherwise ../config.h would look outside the build tree.
+
+ Use the default check type instead of forcing CRC32 or CRC64.
+ Now the script doesn't need to check if CRC64 is available.
+
+ (cherry picked from commit ac3222d2cb1ff3a15eb6d58f9ea9bc78e8bc3bb2)
+
+ tests/test_compress.sh | 41 +++++++++++++++++++++++++++++------------
+ 1 file changed, 29 insertions(+), 12 deletions(-)
+
+commit c761b7051fb2ebb6da3cbecafe695fb5af7b2c9c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ CMake: Prepare to support the test_*.sh tests
+
+ This is a bit hacky since the scripts grep config.h to know which
+ features were built but the CMake build doesn't create config.h.
+ So instead those test scripts will be run only when all relevant
+ features have been enabled.
+
+ (cherry picked from commit 006040b29c83104403621e950ada0c8956c56b3d)
+
+ tests/tests.cmake | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 49 insertions(+)
+
+commit a71bc2d75b95f85fe046f0fd1fb25d36be2b20ba
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-20 16:55:00 +0300
+
+ Tests: test_suffix.sh: Add a comment
+
+ (cherry picked from commit 6167607a6ea72fb74eefb943c4566e3cab528cd2)
+
+ tests/test_suffix.sh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 8fda5ce872632e464a1f9660b3ab8dac939a03c6
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-18 00:34:07 +0300
+
+ Fix typos
+
+ Thanks to xx on #tukaani.
+
+ (cherry picked from commit 4e9023857d287f624562156b60dc23d2b64c0f10)
+
+ src/common/mythread.h | 2 +-
+ src/common/tuklib_integer.h | 2 +-
+ src/liblzma/api/lzma/base.h | 2 +-
+ src/liblzma/common/filter_buffer_decoder.c | 2 +-
+ src/liblzma/common/filter_common.c | 2 +-
+ src/scripts/xzgrep.in | 2 +-
+ 6 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 2729079bcb8dd1c3ab1a79426690d17f6f8e6f7d
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-18 00:23:52 +0300
+
+ liblzma: Fix white space
+
+ Thanks to xx on #tukaani.
+
+ (cherry picked from commit b14d08fbbc254485ace9ccfe7908674f608a62ae)
+
+ src/liblzma/simple/simple_coder.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit a289c4dfeb3ded35e129c48b13f46605f0138704
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-13 17:15:04 +0300
+
+ xz: Document the static function get_chains_memusage()
+
+ (cherry picked from commit 142e670a413a7bce1a2647f1cf1f33f8ee2dbe88)
+
+ src/xz/coder.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+commit 6f0db31713845386ce2419c55b2df89b53b80dd3
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-13 17:07:22 +0300
+
+ xz: Rename filters_memusage_max() to get_chains_memusage()
+
+ (cherry picked from commit 78e984399a64bfee5d11e7308e0bdbc1006db2ca)
+
+ src/xz/coder.c | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+commit d7e2bf7e2dc9289a7a5dd0311d19d10de6d7ea1b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-13 17:04:05 +0300
+
+ xz: Rename filter_memusages to chains_memusages
+
+ (cherry picked from commit 54c3db0a83d3e67d89aba92a0957f2dce9b111a7)
+
+ src/xz/coder.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 58f200b6d1dc4cbc1ab3315a359120ab6eb84878
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 22:26:30 +0300
+
+ xz: Simplify the memory usage scaling code
+
+ This is closer to what it was before the --filtersX support was added,
+ just extended to support for scaling all filter chains. The method
+ before this commit was an extended version of the original too but
+ it was done in a more complex way for no clear reason. In case of
+ an error, the complex version printed fewer informative messages
+ (a good thing) but it's not a sigificant benefit.
+
+ In the limit is too low even for single-threaded mode, the required
+ amount of memory is now reported like in 5.4.x instead of like in
+ 5.5.1alpha - 5.6.1 which showed the original non-scaled usage. It
+ had been a FIXME in the old code but it's not clear what message
+ makes the most sense.
+
+ Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a
+ (cherry picked from commit d9e1ae79ec90d6a7eafeaceaf0ece4f0c83d4417)
+
+ src/xz/coder.c | 163 ++++++++++++++++++++-------------------------------------
+ 1 file changed, 57 insertions(+), 106 deletions(-)
+
+commit 41bdc9fa5cc2fc2a70f4331329ac724773cc2f26
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-13 12:14:00 +0300
+
+ xz: Edit comments
+
+ (cherry picked from commit 0ee56983d198b776878432703de664049b1be32e)
+
+ src/xz/coder.h | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit 52e40c1912dfdbf8c7aa85e3a4c3eb138fa73d5d
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-13 12:03:51 +0300
+
+ xz: Rename chain_idx to chain_num
+
+ (cherry picked from commit ec82a49c3553f7206104582dbfb8b64fa433b491)
+
+ src/xz/coder.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 8a019633319c694423691f58c55fa23a46e45ded
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 22:29:11 +0300
+
+ xz: Edit coding style
+
+ (cherry picked from commit a731a6993c34bbbd55abaf9c166718682b1da24f)
+
+ src/xz/coder.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e3ad7eda74caea29849e2e9ec01212f5f7d0f574
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 22:16:05 +0300
+
+ xz: Edit comments
+
+ Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a
+ (cherry picked from commit 32eb176b89243fce3112347fe43a8ad14a9fd2be)
+
+ src/xz/coder.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+commit 09cabae2ab47a06f6eee02419a815d4bfd0d9490
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 21:57:49 +0300
+
+ xz: Fix grammar in a comment
+
+ Fixes: cb3111e3ed84152912b5138d690c8d9f00c6ef02
+ (cherry picked from commit b90339f4daa510d2b1b8c550f855a99667f1d004)
+
+ src/xz/coder.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c10b66fbf9b2442741a1f052bdb4ce7009af9cda
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 21:46:56 +0300
+
+ xz: Rename filter_memusages to encoder_memusages
+
+ (cherry picked from commit 4c0bdaf13d651b22ba13bd93f8379724d6ccdc13)
+
+ src/xz/coder.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 9132ce3564b2c003bffd6de6294a3d98dccf314e
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 21:42:05 +0300
+
+ xz: Edit coding style
+
+ (cherry picked from commit b54aa023e0ec291b06e976e5f094ab0549e7b09b)
+
+ src/xz/coder.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit d642e13874e93b03959d1de523f1c8ebe9428838
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 21:31:02 +0300
+
+ xz: Rename filters_index to chain_num
+
+ The reason is the same as in bd0782c1f13e52cd0fd8415208e30e47004a4c68.
+
+ (cherry picked from commit 49f67d3d3f42b640a7dfc4ca04c8934f658e10ce)
+
+ src/xz/args.c | 8 ++++----
+ src/xz/coder.c | 8 ++++----
+ src/xz/coder.h | 2 +-
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 47599f3b73f0a2bc18e0a8367d723f1eb0f11b63
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 21:22:43 +0300
+
+ xz: Replace a few uint32_t with "unsigned" to reduce the number of casts
+
+ These hold only tiny values.
+
+ (cherry picked from commit ff9e8b3d069ecfa52ec43dcdb198542d1692a492)
+
+ src/xz/args.c | 2 +-
+ src/xz/coder.c | 17 ++++++++---------
+ src/xz/coder.h | 2 +-
+ 3 files changed, 10 insertions(+), 11 deletions(-)
+
+commit 8f5ab75c454ea8676ed09c7f6eda8afe87b008ad
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 21:10:45 +0300
+
+ xz: Rename filters_used_mask to chains_used_mask
+
+ The reason is the same as in bd0782c1f13e52cd0fd8415208e30e47004a4c68.
+
+ (cherry picked from commit b5e6c1113b1ba02c282bd9163eccdb521c937a78)
+
+ src/xz/coder.c | 30 +++++++++++++++---------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
+
+commit 3eb7cf9dd5b90a074f741234225d7de51ad88774
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 17:14:43 +0300
+
+ xz: Move the setting of "check" in coder_set_compression_settings()
+
+ It's more logical to do it in the beginning instead of in the middle
+ of the filter chain handling.
+
+ Fixes: d6af7f347077b22403133239592e478931307759
+ (cherry picked from commit 32500dfaadae2ea36fda2e17b49ae7d9ac1acf52)
+
+ src/xz/coder.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit 067961ee0e1adaa66a43fbf8c3be31697554a839
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 17:09:17 +0300
+
+ xz: Rename "filters" to "chains"
+
+ The convention is that
+
+ lzma_filter filters[LZMA_FILTERS_MAX + 1];
+
+ contains the filters of a single filter chain.
+ It was so here as well before the commit
+ d6af7f347077b22403133239592e478931307759.
+ It changes "filters" to a ten-element array of filter chains.
+ It's clearer to call this array-of-arrays "chains".
+
+ This also renames "filter_idx" to "chain_idx" which is used
+ as an index as in chains[chain_idx].
+
+ (cherry picked from commit ad146b1f42bbb678175a503a45ce525e779f9b8b)
+
+ src/xz/coder.c | 68 +++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 34 insertions(+), 34 deletions(-)
+
+commit 6822f6f891d43c97ea379a51223ce8ea69439161
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 16:56:15 +0300
+
+ xz: Clean up a comment
+
+ (cherry picked from commit 5a4ae4e4d0105404184e9a82ee08f94e1b7783e0)
+
+ src/xz/coder.c | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+commit 0e5e3e7bdcfcdc4b4607665ff0f6ad794e5195af
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 16:52:09 +0300
+
+ xz: Add clarifying assertions
+
+ (cherry picked from commit 2de80494ed9a4dc7db395a32a5efb770ce769804)
+
+ src/xz/coder.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 77bcf6b76a26833923e62b2dec717474d5d44700
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-10 20:23:33 +0300
+
+ xz: Add a clarifying assertion
+
+ Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a
+ (cherry picked from commit 1eaad004bf7748976324672db028e34f42802e61)
+
+ src/xz/coder.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit df3efc058a256629ea0153b4750d3df308757038
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 16:47:17 +0300
+
+ xz: Clarify a comment
+
+ (cherry picked from commit 605094329b986244833c967c04963cacc41a868d)
+
+ src/xz/coder.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 4ebfe11cd33439675f03e1e3725abf03d6f8251b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 16:28:25 +0300
+
+ xz: Use the info collected in parse_block_list()
+
+ This is slightly simpler and it avoids looping through
+ the opt_block_list array.
+
+ (cherry picked from commit 8fac2577f2dbb9491afd8500f60d004c9071df3b)
+
+ src/xz/coder.c | 95 ++++++++++++++++++++++++----------------------------------
+ 1 file changed, 39 insertions(+), 56 deletions(-)
+
+commit bfea6913618357a7034a1d79079bccb688262124
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 15:48:45 +0300
+
+ xz: Remember the filter chains and the largest Block in parse_block_list()
+
+ (cherry picked from commit 81d350dab864b985b740742772f3b132d4c52914)
+
+ src/xz/args.c | 18 ++++++++++++++++++
+ src/xz/coder.c | 2 ++
+ src/xz/coder.h | 13 +++++++++++++
+ 3 files changed, 33 insertions(+)
+
+commit d4e33e73922427a0f5277b91b239af538fd41c06
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 15:38:48 +0300
+
+ xz: Update a comment and initialization of filters_used_mask
+
+ (cherry picked from commit 46ab56968f7dfdac187710a1223659d832fa1565)
+
+ src/xz/coder.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 3c130737c9bb4a5021bb14eb19e9ceae30ffef3a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 15:08:10 +0300
+
+ xz: parse_block_list: Edit integer type casting
+
+ (cherry picked from commit e89293a0baeb8663707c6b4a74fbb310ec698a8f)
+
+ src/xz/args.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 40c8513b4ee42b8c0fae9b2a229e078ac7e0f87a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-12 14:51:37 +0300
+
+ xz: Make filter_memusages a local variable
+
+ (cherry picked from commit 87011e40c168255cd2edea129ee68c901770603b)
+
+ src/xz/coder.c | 35 +++++++++++++++++++++--------------
+ 1 file changed, 21 insertions(+), 14 deletions(-)
+
+commit cacaf25aa71cd1110cc049d037c11e4075602c35
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-10 20:33:08 +0300
+
+ xz: Remove unused code and simplify
+
+ opt_mode == MODE_COMPRESS isn't possible when HAVE_ENCODERS isn't
+ defined. Thus, when *encoding*, the message about *decoder* memory
+ usage is possible to show only when both encoder and decoder have
+ been built.
+
+ Since the message is shown only at V_DEBUG, skip the memusage
+ calculation if verbosity level isn't high enough.
+
+ Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a
+ (cherry picked from commit 347b412a9374e0456bef9da0d7d79174c0b6f1a5)
+
+ src/xz/coder.c | 16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
+
+commit 3495a6b291f49079485854bb185a52c29d06cd2f
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-10 20:22:58 +0300
+
+ xz: Fix integer type from uint64_t to uint32_t
+
+ lzma_options_lzma.dict_size is uint32_t so use it here too.
+
+ Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a
+ (cherry picked from commit 31358c057c9de9d6aba96bae112b2d17942de7cb)
+
+ src/xz/coder.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2861d856deb557734f067c5c471d670f0b0c6684
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-08 21:40:07 +0300
+
+ debug/translation.bash: Remove an outdated test command
+
+ Since 5.3.5beta, "xz --lzma2=mf=bt4,nice=2" works even though bt4 needs
+ at least nice=4. It is rounded up internally by liblzma when needed.
+
+ Fixes: 5cd9f0df78cc4f8a7807bf6104adea13034fbb45
+ (cherry picked from commit 3f71e0f3a118e1012526f94fd640a626d30cb599)
+
+ debug/translation.bash | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 54546babc3feb2786e541b80f9e7216b8f1bd543
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-07 20:41:28 +0300
+
+ Fix the date of NEWS for 5.4.5
+
+ (cherry picked from commit b05a516830095a0e1937aeb31c937fb0400408b6)
+
+ NEWS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a7e58d1fdb493d58854ac599347cf64da0cecca4
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-07 16:21:15 +0300
+
+ Build: Update visibility.m4 from Gnulib
+
+ This fixes the syntax of the "serial" line and renames
+ a temporary variable.
+
+ (cherry picked from commit 6d336aeb97b69c496ddc626af403f6f21c753658)
+
+ m4/visibility.m4 | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+commit 07a9cda037042b262ba6c8c18fae4a5b3333d508
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-07 15:05:21 +0300
+
+ po4a/update-po: Delete the *.po.authors files
+
+ These are temporary files that are needed only when running po4a.
+ The top-level Makefile.am puts the whole po4a directory into
+ distribution tarball (it's simpler) so deleting these temporary
+ files is needed to prevent them from getting into tarballs.
+
+ (cherry picked from commit ab51e8ee610e2a893906859848f93d5cb0d5ba83)
+
+ po4a/update-po | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 1b4e7dca243d8ef297a245b5ee3ce9cd1ca20f56
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-07 13:12:17 +0300
+
+ xz: Edit comments and coding style
+
+ (cherry picked from commit e4780244a17420cc95d5498cd6e02ad10eac6e5f)
+
+ src/xz/coder.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+commit 18683525a78e96ec6d7c2b4e841e94ad39be7096
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-06 23:08:22 +0300
+
+ xz: Omit an incorrect comment
+
+ It likely was a leftover from a development version of the code.
+
+ Fixes: 183819bfd9efac8c184d9bf123325719b7eee30f
+ (cherry picked from commit fe4d8b0c80eaeca3381be302eeb89aba871a7e7c)
+
+ src/xz/coder.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+commit 005f0398645b0342c9c1915d422743c77ec1d435
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-06 23:04:31 +0300
+
+ xz: Add braces to a for-statement and to an if-statement
+
+ No functional changes.
+
+ Fixes: 5f0c5a04388f8334962c70bc37a8c2ff8f605e0a
+ Fixes: 479fd58d60622331fcbe48fddf756927b9f80d9a
+ (cherry picked from commit 9bef5b8d17dd5e009d6a6b2becc2dc535da53937)
+
+ src/xz/coder.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 34be4e6aa62376314fde250ea4f142c18274272f
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-06 23:00:09 +0300
+
+ liblzma: Omit an unneeded array from the x86 filter
+
+ Fixes: 6aa2a6deeba04808a0fe4461396e7fb70277f3d4
+ (cherry picked from commit de06b9f0c0a3f72569829ecadbc9c0a3ef099f57)
+
+ src/liblzma/simple/x86.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+commit 79e329b771210c30ea317dd4d99e8968f3e6f9b2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-06 22:56:31 +0300
+
+ CMake: Add test_suffix.sh to the tests
+
+ (cherry picked from commit 7da488cb933fdf51cfc14cb5810beb0766224380)
+
+ tests/tests.cmake | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit 86f33bb90c6cfe6950f1d36c9e5dd7fdc9798124
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-06 22:55:54 +0300
+
+ Test: Add CMake support to test_suffix.sh
+
+ It needs to find the xz executable from a different directory
+ and work without config.h.
+
+ (cherry picked from commit a805594ed0b4cbf7b81aa28ff46a8ab3c83c6876)
+
+ tests/test_suffix.sh | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+commit 1e243ab378e8f78ebb3af741fb38354954cf20f9
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-06 20:45:34 +0300
+
+ Update INSTALL about MINIX 3
+
+ The latest stable is 3.3.0 and it's from 2014.
+ Don't mention the older versions in INSTALL.
+ 3.3.0 ships with Clang already.
+
+ Testing with 3.4.0beta6 shows that tuklib_physmem
+ works too so omit comments about that from INSTALL.
+ Visibility warnigns weren't a problem either.
+
+ Thus it's enough to mention the need for --disable-threads
+ as configure doesn't autodetect the lack of pthreads.
+
+ (cherry picked from commit 50e19489387774bab3c4a988397d0d9c7a142a46)
+
+ INSTALL | 20 +++++++-------------
+ 1 file changed, 7 insertions(+), 13 deletions(-)
+
+commit 8595b5ab3ba766eb6daed890bfe91a16fe329c2c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-02 23:00:16 +0300
+
+ Windows: Remove the "doc/api" line from README-Windows.txt
+
+ Fixes: 252aa1d67bc015eeba462803ab72edeb7744d864
+ (cherry picked from commit 68d18aea1422a2b86b98b71d0b019233d84e01b0)
+
+ windows/README-Windows.txt | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit a3f163a4ad97189744107e964e4dea505fbcc252
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-02 22:59:04 +0300
+
+ Build: Don't copy doc/api from source tree to distribution tarball
+
+ It was copied if it existed. This was intentional when autogen.sh
+ still built liblzma API docs with Doxygen.
+
+ Fixes: d3a77ebc04bf1db8d52de2d9b0f07877bc4fd139
+ (cherry picked from commit 8ede961374613aa302a13571d662cfaea1cf91f7)
+
+ Makefile.am | 5 -----
+ 1 file changed, 5 deletions(-)
+
+commit cb0e847fe07099c1ef6d8076f6a46e17bc431acb
+Author: Sam James <sam@gentoo.org>
+Date: 2024-05-02 13:26:40 +0100
+
+ ci: add SPDX headers
+
+ I've checked over each of these and they're straightforward applications
+ of the relevant Github Actions.
+
+ (cherry picked from commit 9a6761aa35ed84d30bd2fda2333a4fdf3f46ecdc)
+
+ .github/workflows/freebsd.yml | 2 ++
+ .github/workflows/netbsd.yml | 2 ++
+ .github/workflows/openbsd.yml | 2 ++
+ 3 files changed, 6 insertions(+)
+
+commit c3c854dc759fe0c5549aa0a730be9e259243edb6
+Author: Yaroslav Halchenko <debian@onerussian.com>
+Date: 2024-03-29 14:37:24 -0400
+
+ codespell: Ignore the THANKS file and debbugs.gnu.org URL
+
+ This way "codespell -i 0" is silent.
+
+ This is the first commit from
+ https://github.com/tukaani-project/xz/pull/93
+ with trivial edits by Lasse Collin.
+
+ (cherry picked from commit 81efe6119f86e3274e512c9eca5ec22b2196c2b3)
+
+ .codespellrc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 3216301aa20fcf9d5a7485e35a295d5c451d9658
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-30 14:37:11 +0300
+
+ Add .gitattributes to clean up git-archive output
+
+ (cherry picked from commit 905bfc74fe2670fd9c39014803017ab53d325401)
+
+ .gitattributes | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit f99e7c69ada9e0db0ee1ebbc38c8ce9390cd9788
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 12:11:09 +0300
+
+ xzdec: Support Landlock ABI version 4
+
+ This was added to xz in 02e3505991233901575b7eabc06b2c6c62a96899
+ but I forgot to do the same in xzdec.
+
+ The Landlock sandbox in xzdec could be stricter as now it's
+ active only for the last file being decompressed. In xz,
+ read-only sandbox is used for multi-file case. On the other hand,
+ xz doesn't go to the strictest mode when processing the last file
+ when more than one file was specified; xzdec does.
+
+ (cherry picked from commit 3334c71d3d4294a4f6569df3ba9bcf2443dfa501)
+
+ src/xzdec/xzdec.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+commit bfe9be7a46cfd3b3069c15f7ba1432192bca1f5b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-30 22:22:45 +0300
+
+ liblzma: Fix incorrect function type error from sanitizer
+
+ Clang 17 with -fsanitize=address,undefined:
+
+ src/liblzma/common/filter_common.c:366:8: runtime error:
+ call to function encoder_find through pointer to incorrect
+ function type 'const lzma_filter_coder *(*)(unsigned long)'
+ src/liblzma/common/filter_encoder.c:187: note:
+ encoder_find defined here
+
+ Use a wrapper function to get the correct type neatly.
+ This reduces the number of casts needed too.
+
+ This issue could be a problem with control flow integrity (CFI)
+ methods that check the function type on indirect function calls.
+
+ Fixes: 3b34851de1eaf358cf9268922fa0eeed8278d680
+ (cherry picked from commit 278563ef8f2b8d98d7f2c85e1a64ec1bc21d26d8)
+
+ src/liblzma/common/filter_decoder.c | 15 ++++++++++++---
+ src/liblzma/common/filter_encoder.c | 17 +++++++++++++----
+ 2 files changed, 25 insertions(+), 7 deletions(-)
+
+commit 882eadc5b820b6b1495fc91ba3573ac2aa6c1df3
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-30 21:41:11 +0300
+
+ xz: Avoid arithmetic on a null pointer
+
+ It's undefined behavior. The result wasn't ever used as it occurred
+ in the last iteration of a loop.
+
+ Clang 17 with -fsanitize=address,undefined:
+
+ $ src/xz/xz --block-list=123
+ src/xz/args.c:164:12: runtime error: applying non-zero offset 1
+ to null pointer
+
+ Fixes: 88ccf47205d7f3aa314d358c72ef214f10f68b43
+ Co-authored-by: Sam James <sam@gentoo.org>
+ (cherry picked from commit 77c8f60547decefca8f2d0c905d9c708c38ee8ff)
+
+ src/xz/args.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit ec5458e1c9b2beb416781e81ad4ff22b0149b99d
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 20:42:00 +0300
+
+ CMake: Support building liblzma API docs using Doxygen
+
+ This is disabled by default to match the default in Autotools.
+ Use -DUSE_DOXYGEN=ON to enable Doxygen usage.
+
+ This uses the update-doxygen script, thus this is under if(UNIX)
+ although Doxygen itself can run on Windows too.
+
+ (cherry picked from commit 64503cc2b76a388ced4ec5f68234a07f0dcddcd5)
+
+ CMakeLists.txt | 40 +++++++++++++++++++++++++++++++---------
+ 1 file changed, 31 insertions(+), 9 deletions(-)
+
+commit 8c93ced56bcb23df723dab23b7477d580720f522
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-20 23:36:39 +0300
+
+ CMake: List API headers in LIBLZMA_API_HEADERS variable
+
+ This way the same list will be usable in more than one location.
+
+ (cherry picked from commit 0a7f5a80d8532a1d8cfa0a902c9d1ad7651eca37)
+
+ CMakeLists.txt | 21 ++++++++++++---------
+ 1 file changed, 12 insertions(+), 9 deletions(-)
+
+commit f7c9bab0372db357511e42c9c610a2cfe5fca9b1
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 15:16:42 +0300
+
+ PACKAGERS: Document the optional Doxygen usage
+
+ Also add a note that packagers should check the licensing
+ of the Doxygen output.
+
+ (cherry picked from commit 541406bee3f09e9813103c6406b10fc6ab2e0d30)
+
+ PACKAGERS | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+commit 28e7d130cb843e96d7e6b0358f8dd58bd1b2a275
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 17:47:09 +0300
+
+ Build: Add --enable-doxygen to generate and install API docs
+
+ It requires Doxygen. This option is disabled by default.
+
+ (cherry picked from commit e21efdf96f39378fe417479f89e97046680406f5)
+
+ INSTALL | 6 ++++++
+ configure.ac | 10 +++++++++-
+ src/liblzma/api/Makefile.am | 19 +++++++++++++++++++
+ 3 files changed, 34 insertions(+), 1 deletion(-)
+
+commit cca7e6c05bc6cc51c0271c36856b7fe29f65c648
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 15:15:17 +0300
+
+ Doxygen: update-doxygen: Support out-of-tree builds
+
+ Also, now $0 is used to refer to the script itself.
+
+ (cherry picked from commit 0ece09a575d7e542bda8825808ddd6cf7de8cc4b)
+
+ doxygen/update-doxygen | 110 ++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 68 insertions(+), 42 deletions(-)
+
+commit 8090d3dc7f0eea4a3a61f4f6d46a0d0866e345fe
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-28 21:08:00 +0300
+
+ Doxygen: Simplify Doxyfile and add SPDX license identifier
+
+ This omits all comments and a few non-default options that weren't
+ needed. Now it contains no copyrighted content from Doxygen itself.
+
+ (cherry picked from commit 2c519f641f266fd897edf680827d9c905f411440)
+
+ doxygen/Doxyfile | 2698 +-----------------------------------------------------
+ 1 file changed, 25 insertions(+), 2673 deletions(-)
+
+commit 0721b8bfe558502669f06c97601fe59ad0d52541
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 15:14:02 +0300
+
+ Doxygen: Don't strip JavaScript anymore
+
+ The stripping method worked well with Doxygen 1.8 and 1.9 but
+ it doesn't work with Doxygen 1.10 anymore. Since we won't ship
+ pre-generated liblzma API docs anymore, the extra bloat and
+ extra license info of the JavaScript files won't affect the
+ upstream source package anymore.
+
+ (cherry picked from commit bdba39a57530d11b88440df8024002be3d09e4a1)
+
+ doxygen/update-doxygen | 21 ---------------------
+ 1 file changed, 21 deletions(-)
+
+commit 1ddb40f6fd286c3c6ef510735112db1ac1b60936
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 17:26:41 +0300
+
+ Build: Remove old Doxygen rules from top-level Makefile.am
+
+ (cherry picked from commit d3a77ebc04bf1db8d52de2d9b0f07877bc4fd139)
+
+ Makefile.am | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+commit 092af76234b1bc79380427456b3215aa0b80f339
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 15:10:06 +0300
+
+ Update COPYING to match the autogen.sh and mydist changes
+
+ (cherry picked from commit fd7faa4c338a42a6a40e854b837d285ae2e8c609)
+
+ COPYING | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+commit 77bce9a0a250cfb20333ee0dca036b3193dd4941
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 17:23:43 +0300
+
+ Build: Don't run update-doxygen as part of "make mydist"
+
+ (cherry picked from commit b2bc55d8a0a9f2f59bfd4302067300e650f6baa3)
+
+ Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 3a2fc62f59b2e8cc45f8d8fd9988b4305efe4bff
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 15:09:48 +0300
+
+ autogen.sh: Don't generated Doxygen docs anymore
+
+ (cherry picked from commit e9be74f5b129fe8a5388d588e68b1b7f5168a310)
+
+ autogen.sh | 18 +++---------------
+ 1 file changed, 3 insertions(+), 15 deletions(-)
+
+commit b04c16f9a5a8675a87783305568cadfa3f17d999
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 17:41:36 +0300
+
+ windows/build.bash: Omit Doxygen docs from the package
+
+ They will be omitted from the source tarball and I don't want
+ to make Doxygen a dependency of build.bash.
+
+ (cherry picked from commit 252aa1d67bc015eeba462803ab72edeb7744d864)
+
+ windows/build.bash | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d4dd3c8f6169adf50cad8fe6872e0f5fcb82475c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 14:14:47 +0300
+
+ README: Don't mention PDF man pages anymore
+
+ (cherry picked from commit 634095364d87444d62d8ec54c134c0cd4705f5d7)
+
+ README | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit be90720d6cd7fbb1b170794445815f579b444a6f
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 14:10:39 +0300
+
+ Build: Omit PDF man pages from the package
+
+ pdf-local rule was added to create the PDFs still with "make pdf".
+ The install rules are missing but that likely doesn't matter at all.
+
+ (cherry picked from commit dc684bf76ea23574ee9d88382057381e04e6089a)
+
+ Makefile.am | 29 +++++++++++++++++++----------
+ 1 file changed, 19 insertions(+), 10 deletions(-)
+
+commit f724552d0c1ae2e3aa693d80d8d0da962dfac4e8
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 13:54:39 +0300
+
+ windows/build.bash: Don't copy PDF man pages to the package
+
+ (cherry picked from commit e3531ab4125cbd5c01ebd3200791350960547189)
+
+ windows/README-Windows.txt | 2 +-
+ windows/build.bash | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 00e774819c6550a8eac219e9f6f083ab2b155505
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-28 01:34:50 +0300
+
+ Tests: test_index: Fix failures when features are disabled
+
+ Fixes: cd88423e76d54eb72aea037364f3ebb21f122503
+ (cherry picked from commit 710a4573ef2cbd19c66318c3b2d1388e418e26c7)
+
+ tests/test_index.c | 13 ++++++++-----
+ 1 file changed, 8 insertions(+), 5 deletions(-)
+
+commit 51133ad71eecc19bdb3ab287a0732fd9441753f4
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-20 17:09:11 +0300
+
+ CMake: Keep the build working if the "tests" directory is missing
+
+ This moves the tests section as is from CMakeLists.txt into
+ tests/tests.cmake. CMakeLists.txt now includes tests/tests.cmake
+ if the latter file exists.
+
+ Now it's possible to delete the whole "tests" directory and
+ building with CMake will still work normally, just without
+ the tests. This way the tests are readily available for those
+ who want them, and those who won't run the tests anyway have
+ a straightforward way to ensure that nothing from the "tests"
+ directory can affect the build process.
+
+ (cherry picked from commit aaff75c3486c4489ce88b0efb36b41cf138af7c3)
+
+ CMakeLists.txt | 76 ++---------------------------------------------
+ tests/Makefile.am | 1 +
+ tests/tests.cmake | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 92 insertions(+), 73 deletions(-)
+
+commit 85b5595b67f0081b2a900104ed7589de4bb75e12
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-20 13:12:50 +0300
+
+ Tests: Remove x86 and SPARC BCJ tests
+
+ These are very old but the exact test file isn't easy to reproduce
+ as it was compiled from a short C program (bcj_test.c) long ago.
+ These tests weren't very good anyway, just a little better than nothing.
+
+ (cherry picked from commit a5f2aa5618fe9183706c9c514c3067985f6c338b)
+
+ tests/Makefile.am | 7 ----
+ tests/bcj_test.c | 64 ---------------------------------
+ tests/compress_prepared_bcj_sparc | Bin 1240 -> 0 bytes
+ tests/compress_prepared_bcj_x86 | Bin 1388 -> 0 bytes
+ tests/files/README | 8 -----
+ tests/files/good-1-sparc-lzma2.xz | Bin 612 -> 0 bytes
+ tests/files/good-1-x86-lzma2.xz | Bin 716 -> 0 bytes
+ tests/test_compress_prepared_bcj_sparc | 4 ---
+ tests/test_compress_prepared_bcj_x86 | 4 ---
+ 9 files changed, 87 deletions(-)
+
+commit d8228d1ea08155a17acaadd76ed95805d3b0a929
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 18:30:40 +0300
+
+ Tests: test_index: Edit a misleading test
+
+ (cherry picked from commit d879686469c9c4bf2a7c0bb6420ebe4530fc8f07)
+
+ tests/test_index.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 2358ef8238f166c49e66f438e7494d4d352eb113
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 16:46:01 +0300
+
+ Tests: test_index: Use minimal values to test integer overflow
+
+ (cherry picked from commit 612005bbdb0dea9dc09e9e2e9cc16a15c1480acd)
+
+ tests/test_index.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 54f4a4162aae8796580489013583d6148be5a473
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 15:13:39 +0300
+
+ Tests: test_index: Test lzma_index_buffer_decode() more
+
+ (cherry picked from commit 4ad88b2544c2aaf8de8f38af54587098cbe66c1d)
+
+ tests/test_index.c | 29 ++++++++++++++++++++++++++---
+ 1 file changed, 26 insertions(+), 3 deletions(-)
+
+commit 85ab59a6b70db33f320a3ea7a854249cb693dea2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 15:08:29 +0300
+
+ Tests: test_index: Test that *i = NULL is done on LZMA_PROG_ERROR
+
+ On LZMA_DATA_ERROR from lzma_index_buffer_decode(), *i = NULL was
+ already done but this adds a test for that case too.
+
+ (cherry picked from commit 575b11b0d291e66c5fce31ce7a72f11436d57c83)
+
+ tests/test_index.c | 31 +++++++++++++++++++++++++++----
+ 1 file changed, 27 insertions(+), 4 deletions(-)
+
+commit fb42599e44dde417305c7d92fd782147ca923079
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 15:01:25 +0300
+
+ Tests: test_index: Test lzma_index_buffer_encode() with empty output buf
+
+ (cherry picked from commit 2c970debdb285823f01f75e875561d893345ac2b)
+
+ tests/test_index.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 20cac20f63a96a39391f2d613bef0f7bd6553495
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 14:59:55 +0300
+
+ Tests: test_index: Replace if-statements with tuktest assertions
+
+ (cherry picked from commit cd88423e76d54eb72aea037364f3ebb21f122503)
+
+ tests/test_index.c | 22 +++++++++-------------
+ 1 file changed, 9 insertions(+), 13 deletions(-)
+
+commit 91e3ea8735752db5d0373991e84607196070aeaa
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 14:56:16 +0300
+
+ Tests: test_index: Make it clear that my_alloc() has no integer overflows
+
+ liblzma guarantees that the product of the allocation size arguments
+ will fit in size_t.
+
+ Putting the pre-increment in the if-statement was clearly wrong
+ although in practice it didn't matter here as the function is
+ called only a couple of times.
+
+ (cherry picked from commit 7f865577a6224fbbb5f5ca52574b62ea8ac9bf51)
+
+ tests/test_index.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit df1659a6c8367db69e82e2ea59ad5f959cf4e615
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 14:51:52 +0300
+
+ Tests: test_index: Verify also iter.block.number_in_stream
+
+ (cherry picked from commit 12313a3b6596cdcf012e180597f84d231f8730d3)
+
+ tests/test_index.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit e083e95dbfda73900109cca4c82c8713d0a1da21
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 14:51:06 +0300
+
+ Tests: test_index: Check cases that aren't a multiple of 4 bytes
+
+ (cherry picked from commit ad2654010d9d641ce1601beeff00630027e6bcd4)
+
+ tests/test_index.c | 33 +++++++++++++++++++++++++--------
+ 1 file changed, 25 insertions(+), 8 deletions(-)
+
+commit b0d3b86ecf1881d10e6614b64b0fcc6c16a3b08f
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 14:40:25 +0300
+
+ Tests: test_index: Edit comments and white space
+
+ (cherry picked from commit 2524fcf2b68b662035437cee8edbe80067c0c240)
+
+ tests/test_index.c | 18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
+
+commit bae288ea6ffb976c36e2387c03d75ce84a8a1034
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-27 14:33:38 +0300
+
+ liblzma: index_decoder: Fix missing initializations on LZMA_PROG_ERROR
+
+ If the arguments to lzma_index_decoder() or lzma_index_buffer_decode()
+ were such that LZMA_PROG_ERROR was returned, the lzma_index **i
+ argument wasn't touched even though the API docs say that *i = NULL
+ is done if an error occurs. This obviously won't be done even now
+ if i == NULL but otherwise it is best to do it due to the wording
+ in the API docs.
+
+ In practice this matters very little: The problem can occur only
+ if the functions are called with invalid arguments, that is,
+ the calling application must already have a bug.
+
+ (cherry picked from commit 71eed2520e2eecae89bade9dceea16e56cfa2ea0)
+
+ src/liblzma/common/index_decoder.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit f10cb93f335900a29e50f990b751996ef026b3a3
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-26 18:25:18 +0300
+
+ CMake: Bump maximum policy version to 3.29
+
+ (cherry picked from commit 0478473953f50716a2bc37b619b1c7dc2682b1ad)
+
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 59055d70cdd3df091264ae9da793821bfd65314d
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-13 22:30:44 +0100
+
+ ci: add NetBSD
+
+ (cherry picked from commit a607e2b40d23f7d998dbaba76692aa30b4c3d9d3)
+
+ .github/workflows/netbsd.yml | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+commit 812c1f95f37751aaa1e020fc2360949a674842fd
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-13 23:49:26 +0100
+
+ ci: add FreeBSD
+
+ (cherry picked from commit 72c210336de26fb87a928160d025fa10a638d23b)
+
+ .github/workflows/freebsd.yml | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+commit d2a4f963c28b864aa179464f7827cc10c6e1365d
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-13 23:16:08 +0100
+
+ ci: add OpenBSD
+
+ (cherry picked from commit b526ec2dbfb5889845ea60548c4f5b1f97d84ab2)
+
+ .github/workflows/openbsd.yml | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+commit 493bc57c33385bda5ad32d01ab73dcfe8f5e7ced
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-15 05:53:01 +0100
+
+ liblzma: outqueue: add header guard
+
+ Reported by github's codeql.
+
+ (cherry picked from commit c7ef767c49351743d8d011574abb9e200bf6b24f)
+
+ src/liblzma/common/outqueue.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit cede418d4f8e1fb4c8a30839fa5d3b14743e83d4
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-15 05:53:56 +0100
+
+ liblzma: easy_preset: add header guard
+
+ Reported by github's codeql.
+
+ (cherry picked from commit 55dcae3056d95cb2ddb8b560c12ba7596bc79f2c)
+
+ src/liblzma/common/easy_preset.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 6e76a25df28b47407a201bf0381fa6d3c80cb0bb
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-25 14:00:57 +0300
+
+ tuklib_integer: Rename bswapXX to byteswapXX
+
+ The __builtin_bswapXX from GCC and Clang are preferred when
+ they are available. This can allow compilers to emit the x86 MOVBE
+ instruction instead of doing a load + byteswap as two instructions
+ (which would happen if the byteswapping is done in inline asm).
+
+ bswap16, bswap32, and bswap64 exist in system headers on *BSDs
+ and Darwin. #defining bswap16 on NetBSD results in a warning about
+ macro redefinition. It's safest to avoid this namespace conflict
+ completely.
+
+ No OS supported by tuklib_integer.h uses byteswapXX names and
+ a web search doesn't immediately find any obvious danger of
+ namespace conflicts. So let's try these still-pretty-short names
+ for the macros.
+
+ Thanks to Sam James for pointing out the compiler warning on
+ NetBSD 10.0.
+
+ (cherry picked from commit 4ffc60f32397371769b7d6b5e3ed8626292d58df)
+
+ src/common/tuklib_integer.h | 47 ++++++++++++++++++++------------------
+ src/liblzma/check/crc32_fast.c | 4 ++--
+ src/liblzma/check/crc32_tablegen.c | 2 +-
+ src/liblzma/check/crc64_fast.c | 4 ++--
+ src/liblzma/check/crc64_tablegen.c | 2 +-
+ 5 files changed, 31 insertions(+), 28 deletions(-)
+
+commit 0ca14871f306b97ce81bfe44c4a39b6b2af31bb3
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-24 01:20:26 +0300
+
+ liblzma: API doc cleanups
+
+ (cherry picked from commit 08ab0966a75b501aa7c717622223f0c13a113c75)
+
+ src/liblzma/api/lzma/container.h | 2 +-
+ src/liblzma/api/lzma/index.h | 6 +++---
+ src/liblzma/api/lzma/vli.h | 5 ++---
+ 3 files changed, 6 insertions(+), 7 deletions(-)
+
+commit 94a462850bc8718f5dd5b30116bce2165b2403c2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-23 16:35:33 +0300
+
+ Tests: test_filter_str: Add a few assertions
+
+ (cherry picked from commit 3ac8a9bb4cccbee88350696dc9c645c48d77c989)
+
+ tests/test_filter_str.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 72058ca22a7f3c9c67ed58be624f8302c6337cd7
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-23 16:35:08 +0300
+
+ Tests: test_filter_str: Move one assertion and add a comment
+
+ (cherry picked from commit 26c69be80523b05c84dea86c47c4ddd9a10945d7)
+
+ tests/test_filter_str.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit c59ebbe1c6dd18b78a046aae3133702dd52c352e
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-23 16:26:06 +0300
+
+ Tests: test_filter_str: Tweak comments and white space
+
+ (cherry picked from commit 4f6af853bc99904efb8b6c28a0af7b81a8476c1b)
+
+ tests/test_filter_str.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit ceda860934b0272689d0722ceeb490cf9c559956
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-23 16:25:22 +0300
+
+ Tests: test_filter_str: Add missing RISC-V case
+
+ Fixes: 89ea1a22f4ed3685b053b7260bc5acf6c75d1664
+ (cherry picked from commit c92663aa1bd576e0615498a4189acf0df12e84b9)
+
+ tests/test_filter_str.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 2234b7cc472e62f3401216a71261579342fa2959
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-22 22:23:32 +0300
+
+ Tests: test_filter_str: Test *error_pos more thoroughly
+
+ (cherry picked from commit b0366df1d7ed26268101f9303a001c91c0806dfc)
+
+ tests/test_filter_str.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 76 insertions(+), 1 deletion(-)
+
+commit 3ba3ef57f929670adb1f9c5e5207a81a29374237
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-22 21:54:39 +0300
+
+ liblzma: lzma_str_to_filters: Set *error_pos on all errors
+
+ The API docs clearly say that if error_pos isn't NULL then *error
+ is always set on any error. However, it wasn't touched if str == NULL
+ or filters == NULL or unsupported flags were specified.
+
+ Fixes: cedeeca2ea6ada5b0411b2ae10d7a859e837f203
+ (cherry picked from commit 70d12dd069bb9bb0d6bb1c8fafc4e6f77780263d)
+
+ src/liblzma/common/string_conversion.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 57ad820e15381344a812c78ce9b67a77a60b9cf3
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-22 20:31:25 +0300
+
+ liblzma: Clean up white space
+
+ (cherry picked from commit ed8e552395701fbf046027cebc8be4a6755b263f)
+
+ src/liblzma/lz/lz_encoder.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ba0b5bfe7cb3cdbd9a4e3c268e10c304cb834e8a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-22 18:35:19 +0300
+
+ Tests: test_filter_flags: Edit comments and style
+
+ (cherry picked from commit 2f06920f20b1ad63b7953dc09569e1d424998849)
+
+ tests/test_filter_flags.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+commit d2ed6759596185ac6a9c69ea713c27cd4bd1d9ba
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-22 16:39:44 +0300
+
+ Tests: Fix C99/C11 compatibility when features are disabled
+
+ The array could become empty and then the initializer would be
+ simply {} which is allowed only in GNU-C and C23.
+
+ (cherry picked from commit b101e1d1dbc81577c0c9aa0cb89cf2e46a15eb82)
+
+ tests/test_filter_flags.c | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+commit 9a70e93fef3fd5943484e56f1881a7c6e3296027
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-21 20:32:16 +0300
+
+ DOS: Omit useless defines from config.h
+
+ (cherry picked from commit f8f3a220ac8afcb8cb2812917d3b77e00c2eab0d)
+
+ dos/config.h | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+commit dc4740f720e08bdd496aa2736db3b7aea6dd3d1e
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-21 20:27:50 +0300
+
+ Build: Omit useless checks for fcntl.h, limits.h, and sys/time.h
+
+ (cherry picked from commit fc1921b04b8840caaa777c2bd5340d41b259da20)
+
+ configure.ac | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 6e210d5766b25d36729152a13c5889bb0605a1e3
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 22:04:21 +0300
+
+ liblzma: Silence a warning from Coverity static analysis
+
+ It is logical why it cannot know for sure that the value has
+ to be at most 4 if it is less than 16.
+
+ The x86 filter is based on a very old LZMA SDK version. Newer
+ ones have quite a different implementation for the same filter.
+
+ Thanks to Sam James.
+
+ (cherry picked from commit 6aa2a6deeba04808a0fe4461396e7fb70277f3d4)
+
+ src/liblzma/simple/x86.c | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+commit 4019b012f29008ea6545aba6fe6c141a2d920ae2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 23:18:19 +0300
+
+ Update .gitignore
+
+ (cherry picked from commit e89d3e83b4496d0b5410870634970c0aa9721d59)
+
+ .gitignore | 21 ++++++++-------------
+ 1 file changed, 8 insertions(+), 13 deletions(-)
+
+commit 09a0311a1e8cdefbcfab9e490cdd41c97a459d24
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 20:53:24 +0300
+
+ Tests: test_lzip_decoder: Tweak coding style and comments
+
+ (cherry picked from commit 86fc4ee859709da0ff9617a1490f13ddac0a109b)
+
+ tests/test_lzip_decoder.c | 58 +++++++++++++++++++++++------------------------
+ 1 file changed, 28 insertions(+), 30 deletions(-)
+
+commit 3117336a0291309ddd2a54d2966a589f9f806850
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 20:51:36 +0300
+
+ Tests: test_lzip_decoder: Remove redundant initializations
+
+ (cherry picked from commit 38be573a279bd7b608ee7d8509ec10884e6fb0d5)
+
+ tests/test_lzip_decoder.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit f78081eb12c804ec4f5a3dc569b859646b16e9e5
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-19 20:47:24 +0300
+
+ Tests: test_lzip_decoder: Remove unneeded tuktest_malloc() calls
+
+ (cherry picked from commit d7e4bc53eacfab9f3de95d8252bdfdc9419079c9)
+
+ tests/test_lzip_decoder.c | 12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+commit 7413383e4280065b79ca70abe4d8ebc78055b35a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-15 20:35:07 +0300
+
+ xz: Fix white space error.
+
+ Thanks to xx on #tukaani.
+
+ (cherry picked from commit eeca8f7c5baf1ad69606bb734d5001763466d58f)
+
+ src/xz/args.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit eed2f26c0edb6e31a50d48bab4ff619778690a1e
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-11 23:01:44 +0100
+
+ xz: add missing noreturn for message_filters_help
+
+ Fixes: a165d7df1964121eb9df715e6f836a31c865beef
+ (cherry picked from commit 462ca9409940a19f743daee6b3bcc611277d0007)
+
+ src/xz/message.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 2633d8df616405bd54fd748d7bf887ebc4505b88
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-11 19:34:04 +0100
+
+ xz: signals: suppress -Wsign-conversion on macOS
+
+ On macOS, we get:
+ ```
+ signals.c: In function 'signals_init':
+ signals.c:76:17: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion]
+ 76 | sigaddset(&hooked_signals, sigs[i]);
+ | ^~~~~~~~~
+ signals.c:81:17: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion]
+ 81 | sigaddset(&hooked_signals, message_progress_sigs[i]);
+ | ^~~~~~~~~
+ signals.c:86:9: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion]
+ 86 | sigaddset(&hooked_signals, SIGTSTP);
+ | ^~~~~~~~~
+ ```
+
+ We use `int` for `hooked_signals` but we can't just cast to whatever
+ `sigset_t` is because `sigset_t` is an opaque type. It's an unsigned int
+ on macOS. On macOS, `sigaddset` is implemented as a macro.
+
+ Just suppress -Wsign-conversion for `signals_init` for macOS given
+ there's no real nice way of fixing this.
+
+ (cherry picked from commit 863f13d2828b99b0539ce73f9cf85bde32358034)
+
+ src/xz/signals.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 50fb269c7a9cf62a9f3fe08859e2aa4348b600a7
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-13 22:19:40 +0300
+
+ Tests: test_microlzma: Add a "FIXME?" about LZMA_FINISH handling
+
+ (cherry picked from commit fcbd0d199933a69713cb293cbd7409a757d854cd)
+
+ tests/test_microlzma.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 3e2ff2d38c54c8fc7ce15aaf91185dc105d9c92c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-13 18:05:31 +0300
+
+ Tests: test_microlzma: Tweak comments, coding style, and minor details
+
+ A few lines were reordered, a few ARRAY_SIZE were changed to sizeof,
+ and a few uint32_t were changed to size_t. No real functional changes
+ were intended.
+
+ (cherry picked from commit 0fe2dfa68355d2b165544b2bc8babf77dcc2039e)
+
+ tests/test_microlzma.c | 149 +++++++++++++++++++++++++++----------------------
+ 1 file changed, 83 insertions(+), 66 deletions(-)
+
+commit ebc8b8de19d641c37ab7959a224bcd0ff4c0833f
+Author: Ryan Carsten Schmidt <git@ryandesign.com>
+Date: 2024-04-12 19:31:13 -0500
+
+ CI: Use only the active CPUs on macOS
+
+ hw.ncpu counts all CPUs including inactive ones. hw.activecpu counts
+ only the active CPUs.
+
+ (cherry picked from commit 97f0ee0f1f903f4e7c4ea23e9b89d687025d2992)
+
+ build-aux/ci_build.bash | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1e63f7d53648beb6dd5acb5771850d7c4bc30477
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-10 18:33:55 +0100
+
+ ci: rename ci_build.sh -> ci_build.bash
+
+ We discussed the name and it's less cognitive load to just call it '.bash'
+ so you don't have an immediate question about if bashisms are OK.
+
+ (cherry picked from commit 73f629e321b74f68c9954728fa4f19261afccf46)
+
+ .github/workflows/ci.yml | 52 ++++++++++++++++----------------
+ .github/workflows/windows-ci.yml | 20 ++++++------
+ build-aux/{ci_build.sh => ci_build.bash} | 0
+ 3 files changed, 36 insertions(+), 36 deletions(-)
+
+commit aea54a4724414466a20afd7493156d40d0a2741c
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-10 17:42:23 +0100
+
+ ci: build in parallel by default
+
+ (cherry picked from commit 8709407a9ef8e7e8aec117879400e4dd3e227ada)
+
+ build-aux/ci_build.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 4381fcf00b2fabb6dcc9fd5cf35d520feb9e775a
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-10 15:41:08 +0100
+
+ ci: default to -O2
+
+ We need this for when we're passing sanitizer flags or -gdwarf-4 for Clang
+ with Valgrind. Just always start with -O2 if CFLAGS isn't set in the
+ environment and append what was passed on the command line.
+
+ (cherry picked from commit 65bf7e0a1ca6386f17608e8afb84ac470c18d23f)
+
+ build-aux/ci_build.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 752ba5ed99ec754bafbdc4d87a2876cb2566ecc4
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-10 15:17:47 +0100
+
+ ci: make automake's test runner verbose on failures
+
+ This is a lot easier to work with than the save-logs thing the action
+ tries to do...
+
+ (cherry picked from commit bc899f9e0700ad153bd65f4804c4de7515c8a847)
+
+ build-aux/ci_build.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit cc21af171599ffe0419fc32a30edd3ef7d479865
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-10 12:38:51 +0100
+
+ ci: make UBSAN abort on errors
+
+ Unfortunately, UBSAN doesn't do this by default. See also the change
+ I made in Meson for this in October [0].
+
+ [0] https://github.com/mesonbuild/meson/commit/7b7d2e060b447de9c2642848847370a58711ac1c
+
+ (cherry picked from commit b5e3470442531717b2457b40ab412740296af1bc)
+
+ .github/workflows/ci.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 2d2d5f14b392cd1aeddab7ce34fd50ba5422e5b5
+Author: Sam James <sam@gentoo.org>
+Date: 2024-04-10 11:43:10 +0100
+
+ ci: test Valgrind
+
+ Using `--trace-children=yes` has a trade-off here, as it makes
+ `test_scripts.sh` pretty slow when calling various non-xz utilities.
+
+ But I also feel like it's not useless to have Valgrind used there and it's
+ not easy to exclude Valgrind just for that one test...
+
+ I did consider using AX_VALGRIND_CHECK [0][1] but I couldn't get it working
+ immediately with some conditionally-built tests and I wondered if it was
+ worth spending time on at least while we're debating xz's future build
+ system situation.
+
+ [0] https://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html
+ [1] https://tecnocode.co.uk/2014/12/23/automatically-valgrinding-code-with-ax_valgrind_check/
+
+ (cherry picked from commit 6c095a98fbec70b790253a663173ecdb669108c4)
+
+ .github/workflows/ci.yml | 11 ++++++++++-
+ build-aux/ci_build.sh | 8 +++++---
+ 2 files changed, 15 insertions(+), 4 deletions(-)
+
+commit 5d20a612051fac3ca6d99abe3cd7e0e3370e5b67
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 23:20:02 +0300
+
+ liblzma: CRC: Simplify table omission macros
+
+ A macro is useful to prevent a single #if directive from
+ getting too ugly but only one macro is needed for all archs.
+
+ (cherry picked from commit 6286c1900c2d2ca33d9b1b397122c7bcdb9a4d59)
+
+ src/liblzma/check/crc32_table.c | 10 ++++------
+ src/liblzma/check/crc64_table.c | 4 ++--
+ src/liblzma/check/crc_common.h | 5 +++--
+ 3 files changed, 9 insertions(+), 10 deletions(-)
+
+commit 2a80827e23169c624560ac89714bf5084cbead43
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 23:09:40 +0300
+
+ liblzma: ARM64 CRC: Fix omission of CRC32 table
+
+ The macro name had an odd typo so the table wasn't omitted
+ when it should have.
+
+ Fixes: 1940f0ec28f08c0ac72c1413d9706fb82eabe6ad
+ (cherry picked from commit 45da936c879acf4f053a3055665bf1b10ded4462)
+
+ src/liblzma/check/crc32_table.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a54117377151356c1e2494ba1febc245cb71b51c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 22:21:51 +0300
+
+ Build: If ARM64 feature detection func is found, stop looking for others
+
+ This can speed up configure a tiny bit.
+
+ Fixes: c5f6d79cc9515a7f22d7ea4860c6cc394b295732
+ (cherry picked from commit 308a9af85400b0e2019f0f012c8354e831d06d65)
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9223ad6e78a666cc9f9aba135d1755fec184a24a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 22:04:27 +0300
+
+ liblzma: ARM64 CRC32: Change style of the macOS code to match FreeBSD
+
+ I didn't test this but it shouldn't change any functionality.
+
+ Fixes: 761f5b69a4c778c8bcb09279b845b07c28790575
+ (cherry picked from commit fc43cecd32bf9d5f8caa599206b15c9569af1eb6)
+
+ src/liblzma/check/crc32_arm64.h | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit 32ceb2c36a0e450037bbe906c2a1ea42607b9d21
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 21:59:27 +0300
+
+ liblzma: ARM64 CRC32: Add error checking to FreeBSD-specific code
+
+ Also add parenthesis to the return statement.
+
+ I didn't test this.
+
+ Fixes: 761f5b69a4c778c8bcb09279b845b07c28790575
+ (cherry picked from commit 1024cd4cd966b998fedec51e385e9ee9a49b3c57)
+
+ src/liblzma/check/crc32_arm64.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 42915101e914dba353c236925bc1d5e4826d3f7a
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 21:56:33 +0300
+
+ liblzma: ARM64 CRC32: Use negation instead of subtracting from 8
+
+ Subtracting from 0 is negation, this just keeps warnings away.
+
+ Fixes: 761f5b69a4c778c8bcb09279b845b07c28790575
+ (cherry picked from commit 2337f7021c860b026e3e849e60a9ae8d09ec0ea0)
+
+ src/liblzma/check/crc32_arm64.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 42a9482b48f0171852fbaddbdc729a56f2daa547
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-10 21:55:10 +0300
+
+ liblzma: ARM64 CRC32: Tweak coding style and comments
+
+ (cherry picked from commit d8fffd01aa1a3c18e437a222abd34699e23ff5e7)
+
+ src/liblzma/check/crc32_arm64.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 38a3ec5a7e2ddeee3686be64b037aa1377f31fd1
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-09 17:47:01 +0300
+
+ CI: Remove ifunc support.
+
+ (cherry picked from commit 986865ea2f9d1f8dbef4a130926df106b0f6d41a)
+
+ .github/workflows/ci.yml | 13 +++----------
+ build-aux/ci_build.sh | 5 +----
+ 2 files changed, 4 insertions(+), 14 deletions(-)
+
+commit 34d1252f093944ff350a88a6196539f95902ad41
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-09 17:43:16 +0300
+
+ liblzma: Remove ifunc support.
+
+ This is *NOT* done for security reasons even though the backdoor
+ relied on the ifunc code. Instead, the reason is that in this
+ project ifunc provides little benefits but it's quite a bit of
+ extra code to support it. The only case where ifunc *might* matter
+ for performance is if the CRC functions are used directly by an
+ application. In normal compression use it's completely irrelevant.
+
+ (cherry picked from commit 689ae2427342a2ea1206eb5ca08301baf410e7e0)
+
+ CMakeLists.txt | 79 ---------------------------------------
+ INSTALL | 8 ----
+ configure.ac | 79 ---------------------------------------
+ src/liblzma/check/crc32_fast.c | 48 +++---------------------
+ src/liblzma/check/crc64_fast.c | 21 -----------
+ src/liblzma/check/crc_common.h | 9 +----
+ src/liblzma/check/crc_x86_clmul.h | 11 +-----
+ 7 files changed, 8 insertions(+), 247 deletions(-)
+
+commit a594b39685051cd1ec866360bc4dd6c22f301bb4
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 22:04:41 +0300
+
+ tests/files/README: Update the main heading.
+
+ (cherry picked from commit 6b4c859059a7eb9b0547590c081668e14ecf8af6)
+
+ tests/files/README | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit fa76e3ef597ee2e9d150461a42d270a386204042
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 22:02:45 +0300
+
+ tests/files/README: Explain how to recreate the ARM64 test files.
+
+ (cherry picked from commit 2a851e06b891ce894f918faff32a6cca6fdecee6)
+
+ tests/files/README | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+commit 112fa0aba6be30968811c9131f1b995cf9e92e75
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 21:51:55 +0300
+
+ debug: Add generator for the ARM64 test file data.
+
+ (cherry picked from commit 3d09b721b94e18fe1f853a04799697f5de10b291)
+
+ debug/Makefile.am | 3 +-
+ debug/testfilegen-arm64.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 118 insertions(+), 1 deletion(-)
+
+commit 1a1f3d0323d5991a3238566e8f517d5116358b5c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 21:19:38 +0300
+
+ xz man page: Use .ft CR instead of CW to silence warnings from groff.
+
+ (cherry picked from commit 31ef676567c9d6fcc4ec9fc833c312f7a7c21c48)
+
+ src/xz/xz.1 | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+commit 9f9203f574f895c40a86a83c45c6bb79c25bb5d2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 19:28:35 +0300
+
+ Fix NEWS for 5.6.0 and 5.6.1.
+
+ (cherry picked from commit 780cbf29d5a88db2b546e9b7b019c4c33ca72685)
+
+ NEWS | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 12876b33c79e36d7e51e8ba6ab7162bd2129cb5b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 19:22:26 +0300
+
+ Remove the XZ logo.
+
+ (cherry picked from commit bfd0c7c478e93a1911b845459549ff94587b6ea2)
+
+ COPYING | 5 -
+ COPYING.CC-BY-SA-4.0 | 427 ---------------------------------------------------
+ Makefile.am | 2 -
+ README | 2 -
+ doc/xz-logo.png | Bin 6771 -> 0 bytes
+ doxygen/Doxyfile | 6 +-
+ doxygen/footer.html | 13 --
+ 7 files changed, 3 insertions(+), 452 deletions(-)
+
+commit 879295d91f06c241fd8a8fc1ca95776dbeb45f93
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 18:27:39 +0300
+
+ Update maintainer and author info.
+
+ The other maintainer suddenly disappeared.
+
+ (cherry picked from commit 77a294d98a9d2d48f7e4ac273711518bf689f5c4)
+
+ AUTHORS | 9 +++++++--
+ README | 10 +++-------
+ THANKS | 1 -
+ src/liblzma/api/lzma.h | 2 +-
+ 4 files changed, 11 insertions(+), 11 deletions(-)
+
+commit 859617d30d81317236e004b323fed0883f932dcf
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 18:05:32 +0300
+
+ Docs: Update .xz file format specification to 1.2.1.
+
+ This only reverts the XZ URL changes.
+
+ (cherry picked from commit 8dd03d4484ccf80022722a16d0ed9b37f2b58072)
+
+ doc/xz-file-format.txt | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit eeb74fba1f6ea334a519015938b4a26c6ba5d4eb
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 17:33:56 +0300
+
+ Update website URLs back to tukaani.org.
+
+ The XZ projects were moved back to their original URLs.
+
+ (cherry picked from commit 17aa2e1a796d3f758802df29afc89dcf335db567)
+
+ CMakeLists.txt | 2 +-
+ COPYING | 3 +--
+ README | 4 ++--
+ configure.ac | 2 +-
+ doc/faq.txt | 2 +-
+ doc/lzma-file-format.txt | 12 ++++++------
+ dos/config.h | 2 +-
+ src/liblzma/api/lzma.h | 2 +-
+ src/xz/xz.1 | 6 +++---
+ src/xzdec/xzdec.1 | 4 ++--
+ windows/README-Windows.txt | 2 +-
+ 11 files changed, 20 insertions(+), 21 deletions(-)
+
+commit a7b9cd70004bfc1abadc7e865dfce765f7b8b59d
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 17:07:08 +0300
+
+ xzdec: Tweak coding style and comments.
+
+ (cherry picked from commit 2739db981023373a2ddabc7b456c7e658bb4f582)
+
+ src/xzdec/xzdec.c | 32 +++++++++++++++++++++-----------
+ 1 file changed, 21 insertions(+), 11 deletions(-)
+
+commit ebe9d6d8cb27168706078009b3f64da8fde63833
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 15:53:46 +0300
+
+ tests/ossfuzz: Tiny fix to a comment.
+
+ (cherry picked from commit 408b6adb2a07d07c6535f859571cca38837caaf3)
+
+ tests/ossfuzz/fuzz_decode_stream.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 78ab47d65d916207233abbcdb0ccfd6efb946c05
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-30 14:36:28 +0200
+
+ CMake: Fix sabotaged Landlock sandbox check.
+
+ It never enabled it.
+
+ (cherry picked from commit f9cf4c05edd14dedfe63833f8ccbe41b55823b00)
+
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5f178c364c3b5c6fe87099b7624d5c76995ff8e6
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-05-22 14:08:33 +0300
+
+ Delete SECURITY.md from v5.6
+
+ It's too easily out of date in the stable branches.
+ It's not included in the release packages anyway.
+
+ .github/SECURITY.md | 29 -----------------------------
+ 1 file changed, 29 deletions(-)
+
+commit b3a756188004a16de5956c368e3b0efd1a9bccb0
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-22 17:46:30 +0200
+
+ liblzma: memcmplen.h: Add a comment why subtraction is used.
+
+ (cherry picked from commit 0b99783d63f27606936bb79a16c52d0d70c0b56f)
+
+ src/liblzma/common/memcmplen.h | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit 94939a145f362ff8b09fb37fc72901743f7f5cb2
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-15 17:43:39 +0200
+
+ INSTALL: Document arguments of --enable-symbol-versions.
+
+ (cherry picked from commit 8a25ba024d55610c448c6e4f1400a00bae51b493)
+
+ INSTALL | 43 +++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 39 insertions(+), 4 deletions(-)
+
+commit fa14c8aaf0d0266b7e0c3b7c766159299c1a0f18
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-15 17:15:50 +0200
+
+ Build: Use only the generic symbol versioning with NVIDIA HPC Compiler.
+
+ This does the previous commit with CMake.
+
+ AC_EGREP_CPP uses AC_REQUIRE so the outermost if-commands must
+ be changed to AS_IF to ensure that things wont break some day.
+ See 5a5bd7f871818029d5ccbe189f087f591258c294.
+
+ (cherry picked from commit 49324b711f9d42b3543bf2f3ae598eaa03360bd5)
+
+ configure.ac | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+commit 73baa8d99b51c7623ed95afe6411302d9ff56864
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-15 16:36:35 +0200
+
+ CMake: Use only the generic symbol versioning with NVIDIA HPC Compiler.
+
+ It doesn't support the __symver__ attribute or __asm__(".symver ...").
+ The generic symbol versioning can still be used since it only needs
+ linker support.
+
+ (cherry picked from commit c273123ed0ebaebf49994057a7fe98aae7f42c40)
+
+ CMakeLists.txt | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 886633f42376f4648d931917733c8a59fb2e1f6c
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-13 21:38:24 +0200
+
+ Update THANKS.
+
+ (cherry picked from commit df7f487648d18a3992386a59b8a061edca862d17)
+
+ THANKS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 760f622f0d73632df2347aaca7ac7ff5761e98b6
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-13 21:30:18 +0200
+
+ liblzma: Minor comment edits.
+
+ (cherry picked from commit 3217b82b3ec023bf8338249134a076bea0ea30ec)
+
+ src/liblzma/common/string_conversion.c | 4 ++--
+ src/liblzma/delta/delta_decoder.c | 2 ++
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+commit 403b4c78b81f67bc3787542f55f555407253316c
+Author: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de>
+Date: 2024-03-13 13:07:13 +0100
+
+ liblzma: Fix building with NVHPC (NVIDIA HPC SDK).
+
+ NVHPC compiler has several issues that make it impossible to
+ build liblzma:
+ - the compiler cannot handle unions that contain pointers that
+ are not the first members;
+ - the compiler cannot handle the assembler code in range_decoder.h
+ (LZMA_RANGE_DECODER_CONFIG has to be set to zero);
+ - the compiler fails to produce valid code for delta_decode if the
+ vectorization is enabled, which results in failed tests.
+
+ This introduces NVHPC-specific workarounds that address the issues.
+
+ (cherry picked from commit 096bc0e3f8fb4bfc4d2f3f64a7f219401ffb4c31)
+
+ src/liblzma/common/string_conversion.c | 6 ++++--
+ src/liblzma/delta/delta_decoder.c | 3 +++
+ src/liblzma/rangecoder/range_decoder.h | 1 +
+ 3 files changed, 8 insertions(+), 2 deletions(-)
+
+commit 1888fb49f629340758e98e69d5aa328f6f73c5e1
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-13 21:17:10 +0200
+
+ CMake: Disable symbol versioning on non-glibc Linux.
+
+ This better matches what configure.ac does. For example, musl has
+ only basic symbol versioning support:
+
+ https://wiki.musl-libc.org/functional-differences-from-glibc.html#Symbol_versioning
+
+ configure.ac tries to enable symbol versioning only with glibc
+ so now CMake does the same.
+
+ (cherry picked from commit 2ad7fad67080e88fa7fc191f9d613d8b7add9c62)
+
+ CMakeLists.txt | 22 ++++++++++++++++++++--
+ 1 file changed, 20 insertions(+), 2 deletions(-)
+
+commit 4b3c84e8eebbcf712fc2396dbb8117cce2d72464
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-13 20:32:46 +0200
+
+ CMake: Make symbol versioning configurable.
+
+ (cherry picked from commit 82f0c0d39eb2c026b1d96ee706f70ace868d4ed4)
+
+ CMakeLists.txt | 62 +++++++++++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 42 insertions(+), 20 deletions(-)
+
+commit 69d1e20208eb9bd1f4f1c8ee4e49cc82d681a877
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-13 19:47:36 +0200
+
+ Build: Style tweaks to configure.ac.
+
+ The AC_MSG_ERROR line is overlong anyway as are a few other
+ AC_MSG_ERROR lines already.
+
+ (cherry picked from commit 45d33bfc45e4295b8ad743bc2ae61cc724f98076)
+
+ configure.ac | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+commit 051d6b5c85a874c78249693865fd751088f403a2
+Author: Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de>
+Date: 2024-03-12 20:03:49 +0100
+
+ Build: Let the users override the symbol versioning variant.
+
+ There are cases when the users want to decide themselves whether
+ they want to have the generic (even on GNU/Linux) or the linux
+ (even if we do not recommend that) symbol versioning variant.
+ The former might be needed to circumvent compiler issues (i.e.
+ the compiler does not support all features that are required
+ for the linux versioning), the latter might help in overriding
+ the assumptions made in the configure script.
+
+ (cherry picked from commit f56ed6fac6619b56b005878d3b5210e2f0d721c0)
+
+ configure.ac | 91 +++++++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 50 insertions(+), 41 deletions(-)
+
+commit 95dcea4b5df0b180af461e4584d2bcf7725e3aef
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-09 18:22:16 +0300
+
+ Update THANKS.
+
+ THANKS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 1107712e372f7593ad729764c0c2644d0e4aa675
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-04-08 15:32:58 +0300
+
+ Remove the backdoor found in 5.6.0 and 5.6.1 (CVE-2024-3094).
+
+ While the backdoor was inactive (and thus harmless) without inserting
+ a small trigger code into the build system when the source package was
+ created, it's good to remove this anyway:
+
+ - The executable payloads were embedded as binary blobs in
+ the test files. This was a blatant violation of the
+ Debian Free Software Guidelines.
+
+ - On machines that see lots bots poking at the SSH port, the backdoor
+ noticeably increased CPU load, resulting in degraded user experience
+ and thus overwhelmingly negative user feedback.
+
+ - The maintainer who added the backdoor has disappeared.
+
+ - Backdoors are bad for security.
+
+ This reverts the following without making any other changes:
+
+ 6e636819 Tests: Update two test files.
+ a3a29bbd Tests: Test --single-stream can decompress bad-3-corrupt_lzma2.xz.
+ 0b4ccc91 Tests: Update RISC-V test files.
+ 8c9b8b20 liblzma: Fix typos in crc32_fast.c and crc64_fast.c.
+ 82ecc538 liblzma: Fix false Valgrind error report with GCC.
+ cf44e4b7 Tests: Add a few test files.
+ 3060e107 Tests: Use smaller dictionary size in RISC-V test files.
+ e2870db5 Tests: Add two RISC-V Filter test files.
+
+ The RISC-V test files also have real content that tests the filter
+ but the real content would fit into much smaller files. A generator
+ program would need to be available as well.
+
+ Thanks to Andres Freund for finding and reporting it and making
+ it public quickly so others could act without a delay.
+ See: https://www.openwall.com/lists/oss-security/2024/03/29/4
+
+ src/liblzma/check/crc32_fast.c | 7 +++++--
+ src/liblzma/check/crc64_fast.c | 4 +++-
+ src/liblzma/check/crc_common.h | 25 -------------------------
+ tests/files/README | 27 ---------------------------
+ tests/files/bad-3-corrupt_lzma2.xz | Bin 512 -> 0 bytes
+ tests/files/bad-dict_size.lzma | Bin 41 -> 0 bytes
+ tests/files/good-1-riscv-lzma2-1.xz | Bin 7424 -> 0 bytes
+ tests/files/good-1-riscv-lzma2-2.xz | Bin 7432 -> 0 bytes
+ tests/files/good-2cat.xz | Bin 136 -> 0 bytes
+ tests/files/good-large_compressed.lzma | Bin 35421 -> 0 bytes
+ tests/files/good-small_compressed.lzma | Bin 258 -> 0 bytes
+ tests/test_files.sh | 11 -----------
+ 12 files changed, 8 insertions(+), 66 deletions(-)
+
+commit fd1b975b7851e081ed6e5cf63df946cd5cbdbb94
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 11:42:50 +0800
+
+ Bump version and soname for 5.6.1.
+
+ src/liblzma/Makefile.am | 2 +-
+ src/liblzma/api/lzma/version.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit a2cda572498e96163fe4e2bde096d5dd7b814668
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 11:27:27 +0800
+
+ Add NEWS for 5.6.1
+
+ NEWS | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+commit 8583c6021124e388bce044a09f00ebabfd6165a7
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 10:43:20 +0800
+
+ Translations: Add missing --riscv option to man page translations.
+
+ po4a/de.po | 702 +++++++++++++++++++++++++++++-----------------------------
+ po4a/fr.po | 549 ++++++++++++++++++++++-----------------------
+ po4a/ko.po | 702 +++++++++++++++++++++++++++++-----------------------------
+ po4a/pt_BR.po | 641 +++++++++++++++++++++++++++--------------------------
+ po4a/ro.po | 702 +++++++++++++++++++++++++++++-----------------------------
+ po4a/uk.po | 702 +++++++++++++++++++++++++++++-----------------------------
+ 6 files changed, 2024 insertions(+), 1974 deletions(-)
+
+commit 74b138d2a6529f2c07729d7c77b1725a8e8b16f1
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 10:18:29 +0800
+
+ Tests: Update two test files.
+
+ The original files were generated with random local to my machine.
+ To better reproduce these files in the future, a constant seed was used
+ to recreate these files.
+
+ tests/files/bad-3-corrupt_lzma2.xz | Bin 484 -> 512 bytes
+ tests/files/good-large_compressed.lzma | Bin 35430 -> 35421 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+commit 3ec6dfd656bdd40ede2a5f11e6be338988e38be4
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 10:08:32 +0800
+
+ Tests: Test --single-stream can decompress bad-3-corrupt_lzma2.xz.
+
+ The first stream in this file is valid, so this tests that xz properly
+ stops after decompressing it.
+
+ tests/test_files.sh | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit a67dcce6109c2f932a0a86abb0d7a95d3c31fb3e
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 10:05:32 +0800
+
+ Tests: Update RISC-V test files.
+
+ This increases code coverage and tests for possible shifting bugs.
+
+ tests/files/good-1-riscv-lzma2-1.xz | Bin 7512 -> 7424 bytes
+ tests/files/good-1-riscv-lzma2-2.xz | Bin 7512 -> 7432 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+commit 058337b0f1da9f166049ecc972fa5c499c1af08c
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 09:52:32 +0800
+
+ liblzma: Fix typos in crc32_fast.c and crc64_fast.c.
+
+ src/liblzma/check/crc32_fast.c | 4 ++--
+ src/liblzma/check/crc64_fast.c | 3 +--
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+commit cd5de9c1bbab3dd41b34b37a89c193fb6ff51ca5
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 09:49:55 +0800
+
+ Tests: Replace HAVE_MICROLZMA usage in CMake and Autotools builds.
+
+ This reverts commit adaacafde6661496ca2814b1e94a3ba5186428cb.
+
+ CMakeLists.txt | 15 ++++++++++-----
+ configure.ac | 9 ++-------
+ tests/Makefile.am | 9 ++++++---
+ tests/test_microlzma.c | 12 ++++--------
+ 4 files changed, 22 insertions(+), 23 deletions(-)
+
+commit 651a1545c8b6150051a0b44857136efd419afc6f
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-09 09:20:57 +0800
+
+ liblzma: Fix false Valgrind error report with GCC.
+
+ With GCC and a certain combination of flags, Valgrind will falsely
+ trigger an invalid write. This appears to be due to the omission of
+ instructions to properly save, set up, and restore the frame pointer.
+
+ The IFUNC resolver is a leaf function since it only calls a function
+ that is inlined. So sometimes GCC omits the frame pointer instructions
+ in the resolver unless this optimization is explictly disabled.
+
+ This fixes https://bugzilla.redhat.com/show_bug.cgi?id=2267598.
+
+ src/liblzma/check/crc32_fast.c | 9 +++------
+ src/liblzma/check/crc64_fast.c | 7 +++----
+ src/liblzma/check/crc_common.h | 25 +++++++++++++++++++++++++
+ 3 files changed, 31 insertions(+), 10 deletions(-)
+
+commit 6e97b299f1b22e366ec42ba5dc5b9d0746e87b84
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-05 23:21:26 +0200
+
+ liblzma: Fix a typo in a comment in the RISC-V filter.
+
+ src/liblzma/simple/riscv.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4e1c97052b5f14f4d6dda99d12cbbd01e66e3712
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-05 00:34:46 +0800
+
+ liblzma: Use attribute no_profile_instrument_function with ifunc.
+
+ Thanks to Sam James for determining this was the attribute needed to
+ workaround the GCC bug and for his version of the patch in Gentoo.
+
+ src/liblzma/check/crc32_fast.c | 5 +++++
+ src/liblzma/check/crc64_fast.c | 3 +++
+ 2 files changed, 8 insertions(+)
+
+commit ed957d39426695e948b06de0ed952a2fbbe84bd1
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-03-05 00:27:31 +0800
+
+ Build: Require attribute no_profile_instrument_function for ifunc usage.
+
+ Using __attribute__((__no_profile_instrument_function__)) on the ifunc
+ resolver works around a bug in GCC -fprofile-generate:
+ it adds profiling code even to ifunc resolvers which can make
+ the ifunc resolver crash at program startup. This attribute
+ was not introduced until GCC 7 and Clang 13, so ifunc won't
+ be used with prior versions of these compilers.
+
+ This bug was brought to our attention by:
+
+ https://bugs.gentoo.org/925415
+
+ And was reported to upstream GCC by:
+
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=11411
+
+ CMakeLists.txt | 7 +++++++
+ configure.ac | 7 +++++++
+ 2 files changed, 14 insertions(+)
+
+commit e98ddaf85a1a8fb3cc863637f83356cc9db31e13
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-03-04 19:23:18 +0200
+
+ liblzma: Fix a comment in the RISC-V filter.
+
+ src/liblzma/simple/riscv.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 319cec142f67fe294e0486402f1569f223d9a83d
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-02-29 16:35:52 +0200
+
+ CMake: Warn if translated man pages are missing.
+
+ CMakeLists.txt | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 46c3e113d8eeb1a731a60829fa7f5d1b519f7f26
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-02-29 16:35:52 +0200
+
+ CMake: Warn if gettext tools and pre-created .gmo files are missing.
+
+ It's only done with CMake >= 3.20 and if library support
+ for translation was already found.
+
+ Sort of fixes: https://github.com/tukaani-project/xz/issues/82
+
+ CMakeLists.txt | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+commit 86bec8334bb1dcb6d9293a11cdccd895b17f364b
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-02-28 18:26:25 +0200
+
+ xz: Add comments.
+
+ src/xz/coder.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit 5c91b454c24e043ca8f2cc7d2b09bd091dafe655
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-02-27 23:42:41 +0800
+
+ xz: Change logging level for thread reduction to highest verbosity only.
+
+ Now that multi threaded encoding is the default, users do not need to
+ see a warning message everytime the number of threads is reduced. On
+ some machines, this could happen very often. It is not unreasonable for
+ users to need to set double verbose mode to see this kind of
+ information.
+
+ To see these warning messages -vv or --verbose --verbose must be passed
+ to set xz into the highest possible verbosity mode.
+
+ These warnings had caused automated testing frameworks to fail when they
+ expected no output to stderr.
+
+ Thanks to Sebastian Andrzej Siewior for reporting this and for the
+ initial version of the patch.
+
+ src/xz/coder.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d0e57b2f159f8fd03a9a89f2f593a768d0487898
+Author: Lasse Collin <lasse.collin@tukaani.org>
+Date: 2024-02-26 23:06:13 +0200
+
+ Fix sorting in THANKS.
+
+ THANKS | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d416be55ac02af1144fed455fb18b710147bb490
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-02-26 23:39:29 +0800
+
+ Update THANKS.
+
+ THANKS | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f06b33edd2aeabdb11836a2bf0b681768dad29d3
+Author: Chien Wong <m@xv97.com>
+Date: 2024-02-25 21:38:13 +0800
+
+ xz: Add missing RISC-V on the filter list in the man page
+
+ Signed-off-by: Chien Wong <m@xv97.com>
+
+ src/xz/xz.1 | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit a100f9111c8cc7f5b5f0e4a5e8af3de7161c7975
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-02-26 23:02:06 +0800
+
+ Build: Fix Linux Landlock feature test in Autotools and CMake builds.
+
+ The previous Linux Landlock feature test assumed that having the
+ linux/landlock.h header file was enough. The new feature tests also
+ requires that prctl() and the required Landlock system calls are
+ supported.
+
+ CMakeLists.txt | 25 ++++++++++++++++++++++---
+ configure.ac | 27 ++++++++++++++++++++++++++-
+ src/xz/sandbox.c | 2 +-
+ src/xz/sandbox.h | 2 +-
+ src/xzdec/xzdec.c | 8 ++++----
+ 5 files changed, 54 insertions(+), 10 deletions(-)
+
+commit d85efdc8911e6e8964ec920af44c8a6fe0a4c3c2
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-02-26 20:06:10 +0800
+
+ Tests: Add test_microlzma to .gitignore and CMakeLists.txt.
+
+ .gitignore | 1 +
+ CMakeLists.txt | 1 +
+ 2 files changed, 2 insertions(+)
+
+commit 42ee4256739779005a7f921946c8a8e483d1f2ed
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-02-26 19:56:25 +0800
+
+ Tests: Correct license header in test_microlzma.c.
+
+ tests/test_microlzma.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit c83349dfd9cf9c495005b6d30e2fd34a9cafc18a
+Author: Jia Tan <jiat0218@gmail.com>
+Date: 2024-02-25 21:41:55 +0800
+
+ Fix typos in NEWS and CMakeLists.
+
+ CMakeLists.txt | 2 +-
+ NEWS | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
commit 2d7d862e3ffa8cec4fd3fdffcd84e984a17aa429
Author: Jia Tan <jiat0218@gmail.com>
Date: 2024-02-24 15:55:08 +0800
diff --git a/README b/README
index ac812ff150ca..9d097deff371 100644
--- a/README
+++ b/README
@@ -79,8 +79,6 @@ XZ Utils
COPYING.GPLv2 GNU General Public License version 2
COPYING.GPLv3 GNU General Public License version 3
COPYING.LGPLv2.1 GNU Lesser General Public License version 2.1
- COPYING.CC-BY-SA-4.0 Creative Commons Attribution-ShareAlike 4.0
- International Public License
AUTHORS The main authors of XZ Utils
THANKS Incomplete list of people who have helped making
@@ -97,9 +95,9 @@ XZ Utils
The command-line tools are documented as man pages. In source code
releases (and possibly also in some binary packages), the man pages
- are also provided in plain text (ASCII only) and PDF formats in the
- directory "doc/man" to make the man pages more accessible to those
- whose operating system doesn't provide an easy way to view man pages.
+ are also provided in plain text (ASCII only) format in the directory
+ "doc/man" to make the man pages more accessible to those whose
+ operating system doesn't provide an easy way to view man pages.
1.3. Documentation for liblzma
@@ -290,21 +288,23 @@ XZ Utils
XZ Embedded is a limited implementation written for use in the Linux
kernel, but it is also suitable for other embedded use.
- https://xz.tukaani.org/xz-embedded/
+ https://tukaani.org/xz/embedded.html
XZ for Java is a complete implementation written in pure Java.
- https://xz.tukaani.org/xz-for-java/
+ https://tukaani.org/xz/java.html
6. Contact information
----------------------
- If you have questions, bug reports, patches etc. related to XZ Utils,
- the project maintainers Lasse Collin and Jia Tan can be reached via
- <xz@tukaani.org>.
+ XZ Utils in general:
+ - Home page: https://tukaani.org/xz/
+ - Email to maintainer(s): xz@tukaani.org
+ - IRC: #tukaani on Libera Chat
+ - GitHub: https://github.com/tukaani-project/xz
- You might find Lasse also from #tukaani on Libera Chat (IRC).
- The nick is Larhzu. The channel tends to be pretty quiet,
- so just ask your question and someone might wake up.
+ Lead maintainer:
+ - Email: Lasse Collin <lasse.collin@tukaani.org>
+ - IRC: Larhzu on Libera Chat
diff --git a/THANKS b/THANKS
index 9bb90c77640c..7d2d4fe82ad8 100644
--- a/THANKS
+++ b/THANKS
@@ -46,6 +46,7 @@ has been important. :-) In alphabetical order:
- Vincent Fazio
- Michael Felt
- Michael Fox
+ - Andres Freund
- Mike Frysinger
- Daniel Richard G.
- Tomasz Gajc
@@ -76,6 +77,7 @@ has been important. :-) In alphabetical order:
- Richard Koch
- Anton Kochkov
- Ville Koskinen
+ - Sergey Kosukhin
- Marcin Kowalczyk
- Jan Kratochvil
- Christian Kujau
@@ -150,11 +152,10 @@ has been important. :-) In alphabetical order:
- Martin Storsjö
- Jonathan Stott
- Dan Stromberg
- - Jia Tan
- Vincent Torri
+ - Alexey Tourbin
- Paul Townsend
- Mohammed Adnène Trojette
- - Alexey Tourbin
- Taiki Tsunekawa
- Maksym Vatsyk
- Loganaden Velvindron
@@ -171,6 +172,7 @@ has been important. :-) In alphabetical order:
- Charles Wilson
- Lars Wirzenius
- Pilorz Wojciech
+ - Chien Wong
- Ryan Young
- Andreas Zieringer
diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile
index b96ba5cab413..25428e925168 100644
--- a/doxygen/Doxyfile
+++ b/doxygen/Doxyfile
@@ -1,2687 +1,39 @@
-# Doxyfile 1.9.6
+# SPDX-License-Identifier: 0BSD
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
+# Run "doxygen" in this directory to generate the liblzma API documentation
+# into ../doc/api.
#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
+# Use the "update-doxygen" script for more choices:
+# - Include the liblzma version number in the generated documentation.
+# - Instead of API docs, docs of XZ Utils internals may be built.
+# - Change the output directory for out-of-tree builds.
#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-#
-# Note:
-#
-# Use doxygen to compare the used configuration file with the template
-# configuration file:
-# doxygen -x [configFile]
-# Use doxygen to compare the used configuration file with the template
-# configuration file without replacing the environment variables or CMake type
-# replacement variables:
-# doxygen -x_noenv [configFile]
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the configuration
-# file that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
+# These options were tested with Doxygen 1.10.0.
PROJECT_NAME = "liblzma (XZ Utils)"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF =
-
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-# in the documentation. The maximum height of the logo should not exceed 55
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-# the logo to the output directory.
-
-PROJECT_LOGO = ../doc/xz-logo.png
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
OUTPUT_DIRECTORY = ../doc
-
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
-# sub-directories (in 2 levels) under the output directory of each output format
-# and will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
-# control the number of sub-directories.
-# The default value is: NO.
-
-CREATE_SUBDIRS = NO
-
-# Controls the number of sub-directories that will be created when
-# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
-# level increment doubles the number of directories, resulting in 4096
-# directories at level 8 which is the default and also the maximum value. The
-# sub-directories are organized in 2 levels, the first level always has a fixed
-# number of 16 directories.
-# Minimum value: 0, maximum value: 8, default value: 8.
-# This tag requires that the tag CREATE_SUBDIRS is set to YES.
-
-CREATE_SUBDIRS_LEVEL = 8
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
-# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
-# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
-# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
-# English messages), Korean, Korean-en (Korean with English messages), Latvian,
-# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
-# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
-# Swedish, Turkish, Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
STRIP_FROM_PATH = ../src/liblzma/api
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF = NO
-
-# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
-# such as
-# /***************
-# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
-# Javadoc-style will behave just like regular comments and it will not be
-# interpreted by doxygen.
-# The default value is: NO.
-
-JAVADOC_BANNER = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# By default Python docstrings are displayed as preformatted text and doxygen's
-# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
-# doxygen's special commands can be used and the contents of the docstring
-# documentation blocks is shown as doxygen documentation.
-# The default value is: YES.
-
-PYTHON_DOCSTRING = YES
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-# page for each member. If set to NO, the documentation of a member will be part
-# of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE = 8
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:^^"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". Note that you cannot put \n's in the value part of an alias
-# to insert newlines (in the resulting output). You can put ^^ in the value part
-# of an alias to insert a newline as if a physical newline was in the original
-# file. When you need a literal { or } or , in the value part of an alias you
-# have to escape them by means of a backslash (\), this can lead to conflicts
-# with the commands \{ and \} for these it is advised to use the version @{ and
-# @} or use a double escape (\\{ and \\})
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL = NO
-
-# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
-# sources only. Doxygen will then generate output that is more tailored for that
-# language. For instance, namespaces will be presented as modules, types will be
-# separated into more groups, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_SLICE = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
-# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
-# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
-# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
-# tries to guess whether the code is fixed or free formatted code, this is the
-# default for Fortran type files). For instance to make doxygen treat .inc files
-# as Fortran files (default is PHP), and .f files as C (default is Fortran),
-# use: inc=Fortran f=C.
-#
-# Note: For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen. When specifying no_extension you should add
-# * to the FILE_PATTERNS.
-#
-# Note see also the list of default file extension mappings.
-
-EXTENSION_MAPPING =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See https://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT = NO
-
-# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
-# to that level are automatically included in the table of contents, even if
-# they do not have an id attribute.
-# Note: This feature currently applies only to Markdown headings.
-# Minimum value: 0, maximum value: 99, default value: 5.
-# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
-
-TOC_INCLUDE_HEADINGS = 5
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by putting a % sign in front of the word or
-# globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# If one adds a struct or class to a group and this option is enabled, then also
-# any nested class or struct is added to the same group. By default this option
-# is disabled and one has to add nested compounds explicitly via \ingroup.
-# The default value is: NO.
-
-GROUP_NESTED_COMPOUNDS = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE = 0
-
-# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
-# during processing. When set to 0 doxygen will based this on the number of
-# cores available in the system. You can set it explicitly to a value larger
-# than 0 to get more control over the balance between CPU load and processing
-# speed. At this moment only the input processing can be done using multiple
-# threads. Since this is still an experimental feature the default is set to 1,
-# which effectively disables parallel processing. Please report any issues you
-# encounter. Generating dot graphs in parallel is controlled by the
-# DOT_NUM_THREADS setting.
-# Minimum value: 0, maximum value: 32, default value: 1.
-
-NUM_PROC_THREADS = 1
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
-# methods of a class will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIV_VIRTUAL = NO
-
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE = NO
-
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO,
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES = NO
-
-# This flag is only useful for Objective-C code. If set to YES, local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO, only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES = NO
-
-# If this flag is set to YES, the name of an unnamed parameter in a declaration
-# will be determined by the corresponding definition. By default unnamed
-# parameters remain unnamed in the output.
-# The default value is: YES.
-
-RESOLVE_UNNAMED_PARAMS = YES
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO, these classes will be included in the various overviews. This option
-# will also hide undocumented C++ concepts if enabled. This option has no effect
-# if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# declarations. If set to NO, these declarations will be included in the
-# documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO, these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS = NO
-
-# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
-# able to match the capabilities of the underlying filesystem. In case the
-# filesystem is case sensitive (i.e. it supports files in the same directory
-# whose names only differ in casing), the option must be set to YES to properly
-# deal with such files in case they appear in the input. For filesystems that
-# are not case sensitive the option should be set to NO to properly deal with
-# output files written for symbols that only differ in casing, such as for two
-# classes, one named CLASS and the other named Class, and to also support
-# references to files without having to specify the exact matching casing. On
-# Windows (including Cygwin) and MacOS, users should typically set this option
-# to NO, whereas on Linux or other Unix flavors it should typically be set to
-# YES.
-# Possible values are: SYSTEM, NO and YES.
-# The default value is: SYSTEM.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES, the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= NO
-
-# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
-# will show which file needs to be included to use the class.
-# The default value is: YES.
-
-SHOW_HEADERFILE = YES
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-# list. This list is created by putting \todo commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-# list. This list is created by putting \test commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES, the
-# list will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES = NO
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file. See also section "Changing the
-# layout of pages" for information.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as documenting some parameters in
-# a documented function twice, or documenting parameters that don't exist or
-# using markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR = YES
-
-# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
-# function parameter documentation. If set to NO, doxygen will accept that some
-# parameters have no documentation without warning.
-# The default value is: YES.
-
-WARN_IF_INCOMPLETE_DOC = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO, doxygen will only warn about wrong parameter
-# documentation, but not about the absence of documentation. If EXTRACT_ALL is
-# set to YES then this flag will automatically be disabled. See also
-# WARN_IF_INCOMPLETE_DOC
-# The default value is: NO.
-
-WARN_NO_PARAMDOC = NO
-
-# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
-# undocumented enumeration values. If set to NO, doxygen will accept
-# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: NO.
-
-WARN_IF_UNDOC_ENUM_VAL = NO
-
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
-# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
-# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
-# at the end of the doxygen process doxygen will return with a non-zero status.
-# Possible values are: NO, YES and FAIL_ON_WARNINGS.
-# The default value is: NO.
-
-WARN_AS_ERROR = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# See also: WARN_LINE_FORMAT
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT = "$file:$line: $text"
-
-# In the $text part of the WARN_FORMAT command it is possible that a reference
-# to a more specific place is given. To make it easier to jump to this place
-# (outside of doxygen) the user can define a custom "cut" / "paste" string.
-# Example:
-# WARN_LINE_FORMAT = "'vi $file +$line'"
-# See also: WARN_FORMAT
-# The default value is: at line $line of file $file.
-
-WARN_LINE_FORMAT = "at line $line of file $file"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr). In case the file specified cannot be opened for writing the
-# warning and error messages are written to standard error. When as file - is
-# specified the warning and error messages are written to standard output
-# (stdout).
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-# Note: If this tag is empty the current directory is searched.
-
INPUT = ../src/liblzma/api
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see:
-# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
-# See also: INPUT_FILE_ENCODING
-# The default value is: UTF-8.
-
-INPUT_ENCODING = UTF-8
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
-# character encoding on a per file pattern basis. Doxygen will compare the file
-# name with each pattern and apply the encoding instead of the default
-# INPUT_ENCODING) if there is a match. The character encodings are a list of the
-# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
-# "INPUT_ENCODING" for further information on supported encodings.
-
-INPUT_FILE_ENCODING =
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# read by doxygen.
-#
-# Note the list of default checked file patterns might differ from the list of
-# default file extension mappings.
-#
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml,
-# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C
-# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
-# *.vhdl, *.ucf, *.qsf and *.ice.
-
-FILE_PATTERNS = *.c \
- *.h
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
+FILE_PATTERNS = *.c *.h
RECURSIVE = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS = YES
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# ANamespace::AClass, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-#
-# Note that doxygen will use the data processed and written to standard output
-# for further processing, therefore nothing else, like debug statements or used
-# commands (so in case of a Windows batch file always use @echo OFF), should be
-# written to standard output.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-INPUT_FILTER =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-FILTER_PATTERNS =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE =
-
-# The Fortran standard specifies that for fixed formatted Fortran code all
-# characters from position 72 are to be considered as comment. A common
-# extension is to allow longer lines before the automatic comment starts. The
-# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
-# be processed before the automatic comment starts.
-# Minimum value: 7, maximum value: 10000, default value: 72.
-
-FORTRAN_COMMENT_AFTER = 72
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# entity all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
+OPTIMIZE_OUTPUT_FOR_C = YES
+EXTRACT_STATIC = YES
+SORT_MEMBER_DOCS = NO
SOURCE_TOOLTIPS = NO
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see https://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
VERBATIM_HEADERS = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
ALPHABETICAL_INDEX = NO
-
-# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
-# that should be ignored while generating the index headers. The IGNORE_PREFIX
-# tag works for classes, function and member names. The entity will be placed in
-# the alphabetical list under the first letter of the entity name that remains
-# after removing the prefix.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
HTML_OUTPUT = api
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER = footer.html
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# Note: Since the styling of scrollbars can currently not be overruled in
-# Webkit/Chromium, the styling will be left out of the default doxygen.css if
-# one or more extra stylesheets have been specified. So if scrollbar
-# customization is desired it has to be added explicitly. For an example see the
-# documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES = ../COPYING.CC-BY-SA-4.0
-
-# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
-# should be rendered with a dark or light theme.
-# Possible values are: LIGHT always generate light mode output, DARK always
-# generate dark mode output, AUTO_LIGHT automatically set the mode according to
-# the user preference, use light mode if no preference is set (the default),
-# AUTO_DARK automatically set the mode according to the user preference, use
-# dark mode if no preference is set and TOGGLE allow to user to switch between
-# light and dark mode via a button.
-# The default value is: AUTO_LIGHT.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE = AUTO_LIGHT
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the style sheet and background images according to
-# this color. Hue is specified as an angle on a color-wheel, see
-# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
HTML_COLORSTYLE_HUE = 210
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use gray-scales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
HTML_COLORSTYLE_SAT = 180
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
HTML_COLORSTYLE_GAMMA = 110
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP = NO
-
-# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
-# documentation will contain a main index with vertical navigation menus that
-# are dynamically created via JavaScript. If disabled, the navigation index will
-# consists of multiple levels of tabs that are statically embedded in every HTML
-# page. Disable this option to support browsers that do not have JavaScript,
-# like the Qt help browser.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
HTML_DYNAMIC_MENUS = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS = NO
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see:
-# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
-# create a documentation set, doxygen will generate a Makefile in the HTML
-# output directory. Running make will produce the docset in that directory and
-# running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
-# genXcode/_index.html for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME = "Doxygen generated docs"
-
-# This tag determines the URL of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDURL =
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# on Windows. In the beginning of 2021 Microsoft took the original page, with
-# a.o. the download links, offline the HTML help workshop was already many years
-# in maintenance mode). You can download the HTML help workshop from the web
-# archives at Installation executable (see:
-# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
-# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the main .chm file (NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS =
-
-# The QHG_LOCATION tag can be used to specify the location (absolute path
-# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
-# run qhelpgenerator on the generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine tune the look of the index (see "Fine-tuning the output"). As an
-# example, the default style sheet generated by doxygen has an example that
-# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
-# Since the tree basically has the same information as the tab index, you could
-# consider setting DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW = NO
-
-# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
-# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
-# area (value NO) or if it should extend to the full height of the window (value
-# YES). Setting this to YES gives a layout similar to
-# https://docs.readthedocs.io with more room for contents, but less room for the
-# project logo, title, and description. If either GENERATE_TREEVIEW or
-# DISABLE_INDEX is set to NO, this option has no effect.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FULL_SIDEBAR = NO
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH = 250
-
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW = NO
-
-# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
-# addresses.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-OBFUSCATE_EMAILS = YES
-
-# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
-# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
-# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
-# the HTML output. These images will generally look nicer at scaled resolutions.
-# Possible values are: png (the default) and svg (looks nicer but requires the
-# pdf2svg or inkscape tool).
-# The default value is: png.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FORMULA_FORMAT = png
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE = 10
-
-# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
-# to create new LaTeX commands to be used in formulas as building blocks. See
-# the section "Including formulas" for details.
-
-FORMULA_MACROFILE =
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# https://www.mathjax.org) which uses client side JavaScript for the rendering
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX = NO
-
-# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
-# Note that the different versions of MathJax have different requirements with
-# regards to the different settings, so it is possible that also other MathJax
-# settings have to be changed when switching between the different MathJax
-# versions.
-# Possible values are: MathJax_2 and MathJax_3.
-# The default value is: MathJax_2.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_VERSION = MathJax_2
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. For more details about the output format see MathJax
-# version 2 (see:
-# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
-# (see:
-# http://docs.mathjax.org/en/latest/web/components/output.html).
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility. This is the name for Mathjax version 2, for MathJax version 3
-# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
-# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
-# is the name for Mathjax version 3, for MathJax version 2 this will be
-# translated into HTML-CSS) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from https://www.mathjax.org before deployment. The default value is:
-# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
-# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# for MathJax version 2 (see
-# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# For example for MathJax version 3 (see
-# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
-# MATHJAX_EXTENSIONS = ams
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see:
-# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
SEARCHENGINE = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using JavaScript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see:
-# https://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see:
-# https://xapian.org/). See the section "External Indexing and Searching" for
-# details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
GENERATE_LATEX = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when not enabling USE_PDFLATEX the default is latex when enabling
-# USE_PDFLATEX the default is pdflatex and when in the later case latex is
-# chosen this is overwritten by pdflatex. For specific output languages the
-# default can have been set differently, this depends on the implementation of
-# the output language.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# Note: This tag is used in the Makefile / make.bat.
-# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
-# (.tex).
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
-# generate index for LaTeX. In case there is no backslash (\) as first character
-# it will be automatically added in the LaTeX code.
-# Note: This tag is used in the generated output file (.tex).
-# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
-# The default value is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_MAKEINDEX_CMD = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. The package can be specified just
-# by its name or with the correct syntax as to be used with the LaTeX
-# \usepackage command. To get the times font for instance you can specify :
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-# To use the option intlimits with the amsmath package you can specify:
-# EXTRA_PACKAGES=[intlimits]{amsmath}
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
-# the generated LaTeX document. The header should contain everything until the
-# first chapter. If it is left blank doxygen will generate a standard header. It
-# is highly recommended to start with a default header using
-# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
-# and then modify the file new_header.tex. See also section "Doxygen usage" for
-# information on how to generate the default header that doxygen normally uses.
-#
-# Note: Only use a user-defined header if you know what you are doing!
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. The following
-# commands have a special meaning inside the header (and footer): For a
-# description of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER =
-
-# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
-# the generated LaTeX document. The footer should contain everything after the
-# last chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer. See also section "Doxygen
-# usage" for information on how to generate the default footer that doxygen
-# normally uses. Note: Only use a user-defined footer if you know what you are
-# doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS = NO
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
-# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
-# files. Set this option to YES, to get a higher quality PDF documentation.
-#
-# See also section LATEX_CMD_NAME for selecting the engine.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE = plain
-
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP = NO
-
-# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
-# path from which the emoji images will be read. If a relative path is entered,
-# it will be relative to the LATEX_OUTPUT directory. If left blank the
-# LATEX_OUTPUT directory will be used.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EMOJI_DIRECTORY =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# configuration file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's configuration file. A template extensions file can be
-# generated using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING = NO
-
-# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
-# namespace members in file scope as well, matching the HTML output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_NS_MEMB_FILE_SCOPE = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT = docbook
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
-# the structure of the code including all documentation. Note that this feature
-# is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
MACRO_EXPANSION = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
EXPAND_ONLY_PREDEF = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
-# RECURSIVE has no effect here.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
PREDEFINED = LZMA_API(type)=type \
LZMA_API_IMPORT= \
LZMA_API_CALL= \
tuklib_attr_noreturn= \
lzma_attribute(attr)= \
lzma_attr_alloc_size(size)=
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS = 0
-
-# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
-# subgraphs. When you want a differently looking font in the dot files that
-# doxygen generates you can specify fontname, fontcolor and fontsize attributes.
-# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
-# Edge and Graph Attributes specification</a> You need to make sure dot is able
-# to find the font, which can be done by putting it in a standard location or by
-# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
-# directory containing the font. Default graphviz fontsize is 14.
-# The default value is: fontname=Helvetica,fontsize=10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10"
-
-# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
-# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
-# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
-# arrows shapes.</a>
-# The default value is: labelfontname=Helvetica,labelfontsize=10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10"
-
-# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
-# around nodes set 'shape=plain' or 'shape=plaintext' <a
-# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
-# The default value is: shape=box,height=0.2,width=0.4.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4"
-
-# You can set the path where dot can find font specified with fontname in
-# DOT_COMMON_ATTR and others dot attributes.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH =
-
-# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a
-# graph for each documented class showing the direct and indirect inheritance
-# relations. In case HAVE_DOT is set as well dot will be used to draw the graph,
-# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set
-# to TEXT the direct and indirect inheritance relations will be shown as texts /
-# links.
-# Possible values are: NO, YES, TEXT and GRAPH.
-# The default value is: YES.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies. See also the chapter Grouping
-# in the manual.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS = YES
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag UML_LOOK is set to YES.
-
-UML_LIMIT_NUM_FIELDS = 10
-
-# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
-# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
-# tag is set to YES, doxygen will add type and arguments for attributes and
-# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
-# will not generate fields with class member information in the UML graphs. The
-# class diagrams will look similar to the default class diagrams but using UML
-# notation for the relationships.
-# Possible values are: NO, YES and NONE.
-# The default value is: NO.
-# This tag requires that the tag UML_LOOK is set to YES.
-
-DOT_UML_DETAILS = NO
-
-# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
-# to display on a single line. If the actual line length exceeds this threshold
-# significantly it will wrapped across multiple lines. Some heuristics are apply
-# to avoid ugly line breaks.
-# Minimum value: 0, maximum value: 1000, default value: 17.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_WRAP_THRESHOLD = 17
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command. Disabling a call graph can be
-# accomplished by means of the command \hidecallgraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command. Disabling a caller graph can be
-# accomplished by means of the command \hidecallergraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH = YES
-
-# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
-# of child directories generated in directory dependency graphs by dot.
-# Minimum value: 1, maximum value: 25, default value: 1.
-# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
-
-DIR_GRAPH_MAX_DEPTH = 1
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. For an explanation of the image formats see the section
-# output formats in the documentation of the dot tool (Graphviz (see:
-# http://www.graphviz.org/)).
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-# png:gdiplus:gdiplus.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file or to the filename of jar file
-# to be used. If left blank, it is assumed PlantUML is not used or called during
-# a preprocessing step. Doxygen will generate a warning when it encounters a
-# \startuml command in this case and will not generate output for the diagram.
-
-PLANTUML_JAR_PATH =
-
-# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
-# configuration file for plantuml.
-
-PLANTUML_CFG_FILE =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH = 0
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
-# graphical representation for inheritance and collaboration diagrams is used.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
-# files that are used to generate the various graphs.
-#
-# Note: This setting is not only used for dot files but also for msc temporary
-# files.
-# The default value is: YES.
-
-DOT_CLEANUP = YES
diff --git a/doxygen/footer.html b/doxygen/footer.html
deleted file mode 100644
index 38d6ea0f4364..000000000000
--- a/doxygen/footer.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<hr class="footer"/>
-
-<p style="text-align: right;padding-right: 12px;">
- XZ logo &copy; 2023 by Jia Tan is licensed under
- <a href="COPYING.CC-BY-SA-4.0"
- rel="license"
- style="display:inline-block;">
- CC BY-SA 4.0
- </a>
-</p>
-
-</body>
-</html>
diff --git a/doxygen/update-doxygen b/doxygen/update-doxygen
index 87dfffb29e75..c5d6ad39f1b1 100755
--- a/doxygen/update-doxygen
+++ b/doxygen/update-doxygen
@@ -3,14 +3,13 @@
#############################################################################
#
-# Updates the Doxygen generated documentation files in the source tree.
-# If the doxygen command is not installed, it will exit with an error.
-# This script can generate Doxygen documentation for all source files or for
-# just liblzma API header files.
+# While it's possible to use the Doxyfile as is to generate liblzma API
+# documentation, it is recommended to use this script because this adds
+# the XZ Utils version number to the generated HTML.
#
-# It is recommended to use this script to update the Doxygen-generated HTML
-# files since this will include the package version in the output and,
-# in case of liblzma API docs, strip JavaScript files from the output.
+# Other features:
+# - Generate documentation of the XZ Utils internals.
+# - Set input and output paths for out-of-tree builds.
#
#############################################################################
#
@@ -21,31 +20,67 @@
set -e
+show_usage()
+{
+ echo "Usage: $0 <api|internal> [ABS_TOP_SRCDIR ABS_OUTDIR]"
+ echo
+ echo "Supported modes:"
+ echo " - 'api' (default): liblzma API docs into doc/api"
+ echo " - 'internal': internal docs into doc/internal"
+ echo
+ echo "Absolute source and output dirs may be set" \
+ "to do an out-of-tree build."
+ echo "The output directory must already exist."
+ exit 1
+}
+
+case $1 in
+ api|internal)
+ ;;
+ *)
+ show_usage
+ ;;
+esac
+
if type doxygen > /dev/null 2>&1; then
:
else
- echo "doxygen/update-doxygen: 'doxygen' command not found." >&2
- echo "doxygen/update-doxygen: Skipping Doxygen docs generation." >&2
+ echo "$0: 'doxygen' command not found" >&2
exit 1
fi
-if test ! -f Doxyfile; then
- cd `dirname "$0"` || exit 1
- if test ! -f Doxyfile; then
- echo "doxygen/update-doxygen: Cannot find Doxyfile" >&2
- exit 1
- fi
+case $# in
+ 1)
+ # One argument: Building inside the source tree
+ ABS_TOP_SRCDIR=`dirname "$0"`/..
+ ABS_OUTDIR=$ABS_TOP_SRCDIR/doc
+ ;;
+ 3)
+ # Three arguments: Possibly an out of tree build
+ ABS_TOP_SRCDIR=$2
+ ABS_OUTDIR=$3
+ ;;
+ *)
+ show_usage
+ ;;
+esac
+
+if test ! -f "$ABS_TOP_SRCDIR/doxygen/Doxyfile"; then
+ echo "$0: Source dir '$ABS_TOP_SRCDIR/doxygen/Doxyfile' not found" >&2
+ exit 1
+fi
+if test ! -d "$ABS_OUTDIR"; then
+ echo "$0: Output dir '$ABS_OUTDIR' not found" >&2
+ exit 1
fi
# Get the package version so that it can be included in the generated docs.
-PACKAGE_VERSION=`cd .. && sh build-aux/version.sh` || exit 1
+PACKAGE_VERSION=`cd "$ABS_TOP_SRCDIR" && sh build-aux/version.sh`
-# If no arguments are specified, default to generating liblzma API header
-# documentation only.
case $1 in
- '' | api)
+ api)
# Remove old documentation before re-generating the new.
- rm -rf ../doc/api
+ rm -rf "$ABS_OUTDIR/api"
# Generate the HTML documentation by preparing the Doxyfile
# in stdin and piping the result to the doxygen command.
@@ -53,57 +88,27 @@ case $1 in
# override any earlier assignment. So, we can use this
# feature to override the tags that need to change between
# "api" and "internal" modes.
+ ABS_SRCDIR=$ABS_TOP_SRCDIR/src/liblzma/api
(
- cat Doxyfile
+ cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile"
echo "PROJECT_NUMBER = $PACKAGE_VERSION"
- ) | doxygen -
-
- # As of Doxygen 1.8.0 - 1.9.6 and the Doxyfile options we use,
- # the output is good without any JavaScript. Unfortunately
- # Doxygen doesn't have an option to disable JavaScript usage
- # completely so we strip it away with the hack below.
- #
- # Omitting the JavaScript code avoids some license hassle
- # as jquery.js is fairly big, it contains more than jQuery
- # itself, and doesn't include the actual license text (it
- # only refers to the MIT license by name).
- echo "Stripping JavaScript from Doxygen output..."
- for F in ../doc/api/*.html
- do
- sed 's/<script [^>]*><\/script>//g
- s/onclick="[^"]*"//g' \
- "$F" > ../doc/api/tmp
- mv -f ../doc/api/tmp "$F"
- done
- rm -f ../doc/api/*.js
+ echo "OUTPUT_DIRECTORY = $ABS_OUTDIR"
+ echo "STRIP_FROM_PATH = $ABS_SRCDIR"
+ echo "INPUT = $ABS_SRCDIR"
+ ) | doxygen -q -
;;
internal)
- # The docs from internal aren't for distribution so
- # the JavaScript files aren't an issue here.
- rm -rf ../doc/internal
+ rm -rf "$ABS_OUTDIR/internal"
(
- cat Doxyfile
- echo "PROJECT_NUMBER = $PACKAGE_VERSION"
+ cat "$ABS_TOP_SRCDIR/doxygen/Doxyfile"
echo 'PROJECT_NAME = "XZ Utils"'
- echo 'STRIP_FROM_PATH = ../src'
- echo 'INPUT = ../src'
+ echo "PROJECT_NUMBER = $PACKAGE_VERSION"
+ echo "OUTPUT_DIRECTORY = $ABS_OUTDIR"
+ echo "STRIP_FROM_PATH = $ABS_TOP_SRCDIR"
+ echo "INPUT = $ABS_TOP_SRCDIR/src"
echo 'HTML_OUTPUT = internal'
- echo 'EXTRACT_PRIVATE = YES'
- echo 'EXTRACT_STATIC = YES'
- echo 'EXTRACT_LOCAL_CLASSES = YES'
echo 'SEARCHENGINE = YES'
- ) | doxygen -
- ;;
-
- *)
- echo "doxygen/update-doxygen: Error: mode argument '$1'" \
- "is not supported." >&2
- echo "doxygen/update-doxygen: Supported modes:" >&2
- echo "doxygen/update-doxygen: - 'api' (default):" \
- "liblzma API docs into doc/api" >&2
- echo "doxygen/update-doxygen: - 'internal':"\
- "internal docs into doc/internal" >&2
- exit 1
+ ) | doxygen -q -
;;
esac
diff --git a/src/common/mythread.h b/src/common/mythread.h
index 589901c7d3e1..10ea2d42c24d 100644
--- a/src/common/mythread.h
+++ b/src/common/mythread.h
@@ -200,7 +200,7 @@ mythread_join(mythread thread)
}
-// Initiatlizes a mutex. Returns zero on success and non-zero on error.
+// Initializes a mutex. Returns zero on success and non-zero on error.
static inline int
mythread_mutex_init(mythread_mutex *mutex)
{
diff --git a/src/common/tuklib_integer.h b/src/common/tuklib_integer.h
index c0004531a710..fbd5fb2369a2 100644
--- a/src/common/tuklib_integer.h
+++ b/src/common/tuklib_integer.h
@@ -16,7 +16,7 @@
///
/// Endianness-converting integer operations (these can be macros!)
/// (XX = 16, 32, or 64; Y = b or l):
-/// - Byte swapping: bswapXX(num)
+/// - Byte swapping: byteswapXX(num)
/// - Byte order conversions to/from native (byteswaps if Y isn't
/// the native endianness): convXXYe(num)
/// - Unaligned reads: readXXYe(ptr)
@@ -66,38 +66,41 @@
#if defined(HAVE___BUILTIN_BSWAPXX)
// GCC >= 4.8 and Clang
-# define bswap16(n) __builtin_bswap16(n)
-# define bswap32(n) __builtin_bswap32(n)
-# define bswap64(n) __builtin_bswap64(n)
+# define byteswap16(num) __builtin_bswap16(num)
+# define byteswap32(num) __builtin_bswap32(num)
+# define byteswap64(num) __builtin_bswap64(num)
#elif defined(HAVE_BYTESWAP_H)
// glibc, uClibc, dietlibc
# include <byteswap.h>
# ifdef HAVE_BSWAP_16
-# define bswap16(num) bswap_16(num)
+# define byteswap16(num) bswap_16(num)
# endif
# ifdef HAVE_BSWAP_32
-# define bswap32(num) bswap_32(num)
+# define byteswap32(num) bswap_32(num)
# endif
# ifdef HAVE_BSWAP_64
-# define bswap64(num) bswap_64(num)
+# define byteswap64(num) bswap_64(num)
# endif
#elif defined(HAVE_SYS_ENDIAN_H)
// *BSDs and Darwin
# include <sys/endian.h>
+# define byteswap16(num) bswap16(num)
+# define byteswap32(num) bswap32(num)
+# define byteswap64(num) bswap64(num)
#elif defined(HAVE_SYS_BYTEORDER_H)
// Solaris
# include <sys/byteorder.h>
# ifdef BSWAP_16
-# define bswap16(num) BSWAP_16(num)
+# define byteswap16(num) BSWAP_16(num)
# endif
# ifdef BSWAP_32
-# define bswap32(num) BSWAP_32(num)
+# define byteswap32(num) BSWAP_32(num)
# endif
# ifdef BSWAP_64
-# define bswap64(num) BSWAP_64(num)
+# define byteswap64(num) BSWAP_64(num)
# endif
# ifdef BE_16
# define conv16be(num) BE_16(num)
@@ -119,15 +122,15 @@
# endif
#endif
-#ifndef bswap16
-# define bswap16(n) (uint16_t)( \
+#ifndef byteswap16
+# define byteswap16(n) (uint16_t)( \
(((n) & 0x00FFU) << 8) \
| (((n) & 0xFF00U) >> 8) \
)
#endif
-#ifndef bswap32
-# define bswap32(n) (uint32_t)( \
+#ifndef byteswap32
+# define byteswap32(n) (uint32_t)( \
(((n) & UINT32_C(0x000000FF)) << 24) \
| (((n) & UINT32_C(0x0000FF00)) << 8) \
| (((n) & UINT32_C(0x00FF0000)) >> 8) \
@@ -135,8 +138,8 @@
)
#endif
-#ifndef bswap64
-# define bswap64(n) (uint64_t)( \
+#ifndef byteswap64
+# define byteswap64(n) (uint64_t)( \
(((n) & UINT64_C(0x00000000000000FF)) << 56) \
| (((n) & UINT64_C(0x000000000000FF00)) << 40) \
| (((n) & UINT64_C(0x0000000000FF0000)) << 24) \
@@ -160,23 +163,23 @@
# define conv64be(num) ((uint64_t)(num))
# endif
# ifndef conv16le
-# define conv16le(num) bswap16(num)
+# define conv16le(num) byteswap16(num)
# endif
# ifndef conv32le
-# define conv32le(num) bswap32(num)
+# define conv32le(num) byteswap32(num)
# endif
# ifndef conv64le
-# define conv64le(num) bswap64(num)
+# define conv64le(num) byteswap64(num)
# endif
#else
# ifndef conv16be
-# define conv16be(num) bswap16(num)
+# define conv16be(num) byteswap16(num)
# endif
# ifndef conv32be
-# define conv32be(num) bswap32(num)
+# define conv32be(num) byteswap32(num)
# endif
# ifndef conv64be
-# define conv64be(num) bswap64(num)
+# define conv64be(num) byteswap64(num)
# endif
# ifndef conv16le
# define conv16le(num) ((uint16_t)(num))
@@ -624,7 +627,7 @@ write64le(uint8_t *buf, uint64_t num)
// aligned but some compilers have language extensions to do that. With
// such language extensions the memcpy() method gives excellent results.
//
-// What to do on a strict-align system when no known language extentensions
+// What to do on a strict-align system when no known language extensions
// are available? Falling back to byte-by-byte access would be safe but ruin
// optimizations that have been made specifically with aligned access in mind.
// As a compromise, aligned reads will fall back to non-compliant type punning
diff --git a/src/liblzma/api/lzma.h b/src/liblzma/api/lzma.h
index d55349f47ec9..6ca6e503d8a6 100644
--- a/src/liblzma/api/lzma.h
+++ b/src/liblzma/api/lzma.h
@@ -10,9 +10,9 @@
* headers) streams are supported. Multiple compression algorithms (filters)
* are supported. Currently LZMA2 is the primary filter.
*
- * liblzma is part of XZ Utils <https://xz.tukaani.org/xz-utils/>. XZ Utils
+ * liblzma is part of XZ Utils <https://tukaani.org/xz/>. XZ Utils
* includes a gzip-like command line tool named xz and some other tools.
- * XZ Utils is developed and maintained by Lasse Collin and Jia Tan.
+ * XZ Utils is developed and maintained by Lasse Collin.
*
* Major parts of liblzma are based on code written by Igor Pavlov,
* specifically the LZMA SDK <https://7-zip.org/sdk.html>.
diff --git a/src/liblzma/api/lzma/base.h b/src/liblzma/api/lzma/base.h
index 20d485b97bec..590e1d22bb0f 100644
--- a/src/liblzma/api/lzma/base.h
+++ b/src/liblzma/api/lzma/base.h
@@ -257,7 +257,7 @@ typedef enum {
*/
/*
- * These eumerations may be used internally by liblzma
+ * These enumerations may be used internally by liblzma
* but they will never be returned to applications.
*/
LZMA_RET_INTERNAL1 = 101,
diff --git a/src/liblzma/api/lzma/container.h b/src/liblzma/api/lzma/container.h
index ad3f99057a32..8e4af420389b 100644
--- a/src/liblzma/api/lzma/container.h
+++ b/src/liblzma/api/lzma/container.h
@@ -792,7 +792,7 @@ extern LZMA_API(lzma_ret) lzma_stream_decoder_mt(
* as it doesn't support any decoder flags. It will return LZMA_STREAM_END
* after one .lzma stream.)
*
- * \param strm Pointer to lzma_stream that is at least initialized
+ * \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param memlimit Memory usage limit as bytes. Use UINT64_MAX
* to effectively disable the limiter. liblzma
diff --git a/src/liblzma/api/lzma/index.h b/src/liblzma/api/lzma/index.h
index 7d8a9950ceaf..b17025e3d901 100644
--- a/src/liblzma/api/lzma/index.h
+++ b/src/liblzma/api/lzma/index.h
@@ -233,7 +233,7 @@ typedef struct {
} block;
/**
- * \private Internal struct.
+ * \private Internal data
*
* Internal data which is used to store the state of the iterator.
* The exact format may vary between liblzma versions, so don't
@@ -673,7 +673,7 @@ extern LZMA_API(lzma_bool) lzma_index_iter_locate(
* function succeeds, the memory allocated for src
* is freed or moved to be part of dest, and all
* iterators pointing to src will become invalid.
-* \param allocator lzma_allocator for custom allocator functions.
+ * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return Possible lzma_ret values:
@@ -793,7 +793,7 @@ extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i,
* lzma_index is allowed to require. The value
* pointed by this pointer is modified if and only
* if LZMA_MEMLIMIT_ERROR is returned.
- * \param allocator lzma_allocator for custom allocator functions.
+ * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer
* \param in_pos The next byte will be read from in[*in_pos].
diff --git a/src/liblzma/api/lzma/version.h b/src/liblzma/api/lzma/version.h
index c13a82d5f3b5..53526b992c95 100644
--- a/src/liblzma/api/lzma/version.h
+++ b/src/liblzma/api/lzma/version.h
@@ -22,7 +22,7 @@
#define LZMA_VERSION_MINOR 6
/** \brief Patch version number of the liblzma release. */
-#define LZMA_VERSION_PATCH 0
+#define LZMA_VERSION_PATCH 2
/**
* \brief Version stability marker
diff --git a/src/liblzma/api/lzma/vli.h b/src/liblzma/api/lzma/vli.h
index 7f3e398aae5b..6b049021b909 100644
--- a/src/liblzma/api/lzma/vli.h
+++ b/src/liblzma/api/lzma/vli.h
@@ -67,9 +67,8 @@ typedef uint64_t lzma_vli;
* This is useful to test that application has given acceptable values
* for example in the uncompressed_size and compressed_size variables.
*
- * \return True if the integer is representable as VLI or if it
- * indicates unknown value. False if the integer cannot be
- * represented as VLI.
+ * \return True if the integer is representable as a VLI or if it
+ * indicates an unknown value. False otherwise.
*/
#define lzma_vli_is_valid(vli) \
((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN)
diff --git a/src/liblzma/check/crc32_arm64.h b/src/liblzma/check/crc32_arm64.h
index 6cdb5dab32e6..39c1c63ec0ec 100644
--- a/src/liblzma/check/crc32_arm64.h
+++ b/src/liblzma/check/crc32_arm64.h
@@ -11,7 +11,6 @@
//
///////////////////////////////////////////////////////////////////////////////
-
#ifndef LZMA_CRC32_ARM64_H
#define LZMA_CRC32_ARM64_H
@@ -21,6 +20,8 @@
# include <arm_acle.h>
#endif
+// If both versions are going to be built, we need runtime detection
+// to check if the instructions are supported.
#if defined(CRC32_GENERIC) && defined(CRC32_ARCH_OPTIMIZED)
# if defined(HAVE_GETAUXVAL) || defined(HAVE_ELF_AUX_INFO)
# include <sys/auxv.h>
@@ -36,8 +37,7 @@
//
// NOTE: Build systems check for this too, keep them in sync with this.
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
-# define crc_attr_target \
- __attribute__((__target__("+crc")))
+# define crc_attr_target __attribute__((__target__("+crc")))
#else
# define crc_attr_target
#endif
@@ -51,7 +51,7 @@ crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc)
// Align the input buffer because this was shown to be
// significantly faster than unaligned accesses.
- const size_t align_amount = my_min(size, (8 - (uintptr_t)buf) & 7);
+ const size_t align_amount = my_min(size, (0U - (uintptr_t)buf) & 7);
for (const uint8_t *limit = buf + align_amount; buf < limit; ++buf)
crc = __crc32b(crc, *buf);
@@ -62,7 +62,7 @@ crc32_arch_optimized(const uint8_t *buf, size_t size, uint32_t crc)
// ignoring the least significant three bits of size to ensure
// we do not process past the bounds of the buffer. This guarantees
// that limit is a multiple of 8 and is strictly less than size.
- for (const uint8_t *limit = buf + (size & ~((size_t)7));
+ for (const uint8_t *limit = buf + (size & ~(size_t)7);
buf < limit; buf += 8)
crc = __crc32d(crc, aligned_read64le(buf));
@@ -84,8 +84,10 @@ is_arch_extension_supported(void)
#elif defined(HAVE_ELF_AUX_INFO)
unsigned long feature_flags;
- elf_aux_info(AT_HWCAP, &feature_flags, sizeof(feature_flags));
- return feature_flags & HWCAP_CRC32 != 0;
+ if (elf_aux_info(AT_HWCAP, &feature_flags, sizeof(feature_flags)) != 0)
+ return false;
+
+ return (feature_flags & HWCAP_CRC32) != 0;
#elif defined(_WIN32)
return IsProcessorFeaturePresent(
@@ -98,11 +100,12 @@ is_arch_extension_supported(void)
// The sysctlbyname() function requires a string identifier for the
// CPU feature it tests. The Apple documentation lists the string
// "hw.optional.armv8_crc32", which can be found here:
- // (https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619)
- int err = sysctlbyname("hw.optional.armv8_crc32", &has_crc32,
- &size, NULL, 0);
+ // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619
+ if (sysctlbyname("hw.optional.armv8_crc32", &has_crc32,
+ &size, NULL, 0) != 0)
+ return false;
- return !err && has_crc32;
+ return has_crc32;
#else
// If a runtime detection method cannot be found, then this must
diff --git a/src/liblzma/check/crc32_fast.c b/src/liblzma/check/crc32_fast.c
index 5e26914a4d1b..16dbb7467513 100644
--- a/src/liblzma/check/crc32_fast.c
+++ b/src/liblzma/check/crc32_fast.c
@@ -34,7 +34,7 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc)
crc = ~crc;
#ifdef WORDS_BIGENDIAN
- crc = bswap32(crc);
+ crc = byteswap32(crc);
#endif
if (size > 8) {
@@ -80,7 +80,7 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc)
crc = lzma_crc32_table[0][*buf++ ^ A(crc)] ^ S8(crc);
#ifdef WORDS_BIGENDIAN
- crc = bswap32(crc);
+ crc = byteswap32(crc);
#endif
return ~crc;
@@ -97,24 +97,14 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc)
// If both the generic and arch-optimized implementations are built, then
// the function to use is selected at runtime because the system running
// the binary might not have the arch-specific instruction set extension(s)
-// available. The three dispatch methods in order of priority:
+// available. The dispatch methods in order of priority:
//
-// 1. Indirect function (ifunc). This method is slightly more efficient
-// than the constructor method because it will change the entry in the
-// Procedure Linkage Table (PLT) for the function either at load time or
-// at the first call. This avoids having to call the function through a
-// function pointer and will treat the function call like a regular call
-// through the PLT. ifuncs are created by using
-// __attribute__((__ifunc__("resolver"))) on a function which has no
-// body. The "resolver" is the name of the function that chooses at
-// runtime which implementation to use.
-//
-// 2. Constructor. This method uses __attribute__((__constructor__)) to
+// 1. Constructor. This method uses __attribute__((__constructor__)) to
// set crc32_func at load time. This avoids extra computation (and any
// unlikely threading bugs) on the first call to lzma_crc32() to decide
// which implementation should be used.
//
-// 3. First Call Resolution. On the very first call to lzma_crc32(), the
+// 2. First Call Resolution. On the very first call to lzma_crc32(), the
// call will be directed to crc32_dispatch() instead. This will set the
// appropriate implementation function and will not be called again.
// This method does not use any kind of locking but is safe because if
@@ -124,17 +114,7 @@ crc32_generic(const uint8_t *buf, size_t size, uint32_t crc)
typedef uint32_t (*crc32_func_type)(
const uint8_t *buf, size_t size, uint32_t crc);
-// Clang 16.0.0 and older has a bug where it marks the ifunc resolver
-// function as unused since it is static and never used outside of
-// __attribute__((__ifunc__())).
-#if defined(CRC_USE_IFUNC) && defined(__clang__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-function"
-#endif
-
-// This resolver is shared between all three dispatch methods. It serves as
-// the ifunc resolver if ifunc is supported, otherwise it is called as a
-// regular function by the constructor or first call resolution methods.
+// This resolver is shared between all dispatch methods.
static crc32_func_type
crc32_resolve(void)
{
@@ -142,11 +122,6 @@ crc32_resolve(void)
? &crc32_arch_optimized : &crc32_generic;
}
-#if defined(CRC_USE_IFUNC) && defined(__clang__)
-# pragma GCC diagnostic pop
-#endif
-
-#ifndef CRC_USE_IFUNC
#ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR
// Constructor method.
@@ -171,8 +146,7 @@ crc32_set_func(void)
static uint32_t
crc32_dispatch(const uint8_t *buf, size_t size, uint32_t crc)
{
- // When __attribute__((__ifunc__(...))) and
- // __attribute__((__constructor__)) isn't supported, set the
+ // When __attribute__((__constructor__)) isn't supported, set the
// function pointer without any locking. If multiple threads run
// the detection code in parallel, they will all end up setting
// the pointer to the same value. This avoids the use of
@@ -184,14 +158,8 @@ crc32_dispatch(const uint8_t *buf, size_t size, uint32_t crc)
#endif
#endif
-#endif
-#ifdef CRC_USE_IFUNC
-extern LZMA_API(uint32_t)
-lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc)
- __attribute__((__ifunc__("crc32_resolve")));
-#else
extern LZMA_API(uint32_t)
lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc)
{
@@ -234,4 +202,3 @@ lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc)
return crc32_generic(buf, size, crc);
#endif
}
-#endif
diff --git a/src/liblzma/check/crc32_table.c b/src/liblzma/check/crc32_table.c
index fb1b6585422a..c141cefe5a40 100644
--- a/src/liblzma/check/crc32_table.c
+++ b/src/liblzma/check/crc32_table.c
@@ -17,18 +17,16 @@
#if defined(HAVE_USABLE_CLMUL) && ((defined(__x86_64__) && defined(__SSSE3__) \
&& defined(__SSE4_1__) && defined(__PCLMUL__)) \
|| (defined(__e2k__) && __iset__ >= 6))
-# define X86_CLMUL_NO_TABLE 1
-#endif
+# define NO_CRC32_TABLE
-#if defined(HAVE_ARM64_CRC32) \
+#elif defined(HAVE_ARM64_CRC32) \
&& !defined(WORDS_BIGENDIAN) \
&& defined(__ARM_FEATURE_CRC32)
-# define ARM64_CRC32_NO_TABLE 1
+# define NO_CRC32_TABLE
#endif
-#if !defined(HAVE_ENCODERS) && (defined(X86_CLMUL_NO_TABLE) \
- || defined(ARM64_CRC32_NO_TABLE_))
+#if !defined(HAVE_ENCODERS) && defined(NO_CRC32_TABLE)
// No table needed. Use a typedef to avoid an empty translation unit.
typedef void lzma_crc32_dummy;
diff --git a/src/liblzma/check/crc32_tablegen.c b/src/liblzma/check/crc32_tablegen.c
index 01047d3eca47..b8cf459f8e76 100644
--- a/src/liblzma/check/crc32_tablegen.c
+++ b/src/liblzma/check/crc32_tablegen.c
@@ -43,7 +43,7 @@ init_crc32_table(void)
#ifdef WORDS_BIGENDIAN
for (size_t s = 0; s < 8; ++s)
for (size_t b = 0; b < 256; ++b)
- crc32_table[s][b] = bswap32(crc32_table[s][b]);
+ crc32_table[s][b] = byteswap32(crc32_table[s][b]);
#endif
return;
diff --git a/src/liblzma/check/crc64_fast.c b/src/liblzma/check/crc64_fast.c
index f29fe3d3c5e6..0ce83fe4ad36 100644
--- a/src/liblzma/check/crc64_fast.c
+++ b/src/liblzma/check/crc64_fast.c
@@ -39,7 +39,7 @@ crc64_generic(const uint8_t *buf, size_t size, uint64_t crc)
crc = ~crc;
#ifdef WORDS_BIGENDIAN
- crc = bswap64(crc);
+ crc = byteswap64(crc);
#endif
if (size > 4) {
@@ -73,7 +73,7 @@ crc64_generic(const uint8_t *buf, size_t size, uint64_t crc)
crc = lzma_crc64_table[0][*buf++ ^ A1(crc)] ^ S8(crc);
#ifdef WORDS_BIGENDIAN
- crc = bswap64(crc);
+ crc = byteswap64(crc);
#endif
return ~crc;
@@ -93,11 +93,6 @@ crc64_generic(const uint8_t *buf, size_t size, uint64_t crc)
typedef uint64_t (*crc64_func_type)(
const uint8_t *buf, size_t size, uint64_t crc);
-#if defined(CRC_USE_IFUNC) && defined(__clang__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-function"
-#endif
-
static crc64_func_type
crc64_resolve(void)
{
@@ -105,12 +100,6 @@ crc64_resolve(void)
? &crc64_arch_optimized : &crc64_generic;
}
-#if defined(CRC_USE_IFUNC) && defined(__clang__)
-# pragma GCC diagnostic pop
-#endif
-
-#ifndef CRC_USE_IFUNC
-
#ifdef HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR
# define CRC64_SET_FUNC_ATTR __attribute__((__constructor__))
static crc64_func_type crc64_func;
@@ -139,14 +128,8 @@ crc64_dispatch(const uint8_t *buf, size_t size, uint64_t crc)
}
#endif
#endif
-#endif
-#ifdef CRC_USE_IFUNC
-extern LZMA_API(uint64_t)
-lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc)
- __attribute__((__ifunc__("crc64_resolve")));
-#else
extern LZMA_API(uint64_t)
lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc)
{
@@ -171,4 +154,3 @@ lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc)
return crc64_generic(buf, size, crc);
#endif
}
-#endif
diff --git a/src/liblzma/check/crc64_table.c b/src/liblzma/check/crc64_table.c
index 6dee387a1fcf..78e427597ce6 100644
--- a/src/liblzma/check/crc64_table.c
+++ b/src/liblzma/check/crc64_table.c
@@ -17,11 +17,11 @@
#if defined(HAVE_USABLE_CLMUL) && ((defined(__x86_64__) && defined(__SSSE3__) \
&& defined(__SSE4_1__) && defined(__PCLMUL__)) \
|| (defined(__e2k__) && __iset__ >= 6))
-# define X86_CLMUL_NO_TABLE 1
+# define NO_CRC64_TABLE
#endif
-#ifdef X86_CLMUL_NO_TABLE
+#ifdef NO_CRC64_TABLE
// No table needed. Use a typedef to avoid an empty translation unit.
typedef void lzma_crc64_dummy;
diff --git a/src/liblzma/check/crc64_tablegen.c b/src/liblzma/check/crc64_tablegen.c
index af93e011ca21..2035127a1123 100644
--- a/src/liblzma/check/crc64_tablegen.c
+++ b/src/liblzma/check/crc64_tablegen.c
@@ -42,7 +42,7 @@ init_crc64_table(void)
#ifdef WORDS_BIGENDIAN
for (size_t s = 0; s < 4; ++s)
for (size_t b = 0; b < 256; ++b)
- crc64_table[s][b] = bswap64(crc64_table[s][b]);
+ crc64_table[s][b] = byteswap64(crc64_table[s][b]);
#endif
return;
diff --git a/src/liblzma/check/crc_common.h b/src/liblzma/check/crc_common.h
index 856665db79a8..63a7b5cefebf 100644
--- a/src/liblzma/check/crc_common.h
+++ b/src/liblzma/check/crc_common.h
@@ -67,8 +67,6 @@
#undef CRC32_ARM64
#undef CRC64_ARM64_CLMUL
-#undef CRC_USE_IFUNC
-
#undef CRC_USE_GENERIC_FOR_SMALL_INPUTS
// ARM64 CRC32 instruction is only useful for CRC32. Currently, only
@@ -76,7 +74,7 @@
// endian machine.
//
// NOTE: Keep this and the next check in sync with the macro
-// ARM64_CRC32_NO_TABLE in crc32_table.c
+// NO_CRC32_TABLE in crc32_table.c
#if defined(HAVE_ARM64_CRC32) && !defined(WORDS_BIGENDIAN)
// Allow ARM64 CRC32 instruction without a runtime check if
// __ARM_FEATURE_CRC32 is defined. GCC and Clang only define this if the
@@ -96,7 +94,8 @@
// generic version can be omitted. Note that this doesn't work with MSVC
// as I don't know how to detect the features here.
//
-// NOTE: Keep this in sync with the CLMUL_NO_TABLE macro in crc32_table.c.
+// NOTE: Keep this in sync with the NO_CRC32_TABLE macro in crc32_table.c
+// and NO_CRC64_TABLE in crc64_table.c.
# if (defined(__SSSE3__) && defined(__SSE4_1__) && defined(__PCLMUL__)) \
|| (defined(__e2k__) && __iset__ >= 6)
# define CRC32_ARCH_OPTIMIZED 1
@@ -109,9 +108,6 @@
# define CRC64_ARCH_OPTIMIZED 1
# define CRC_X86_CLMUL 1
-# ifdef HAVE_FUNC_ATTRIBUTE_IFUNC
-# define CRC_USE_IFUNC 1
-# endif
/*
// The generic code is much faster with 1-8-byte inputs and
// has similar performance up to 16 bytes at least in
@@ -121,9 +117,7 @@
// for bigger inputs. It saves a little in code size since
// the special cases for 0-16-byte inputs will be omitted
// from the CLMUL code.
-# ifndef CRC_USE_IFUNC
-# define CRC_USE_GENERIC_FOR_SMALL_INPUTS 1
-# endif
+# define CRC_USE_GENERIC_FOR_SMALL_INPUTS 1
*/
# endif
#endif
diff --git a/src/liblzma/check/crc_x86_clmul.h b/src/liblzma/check/crc_x86_clmul.h
index ae66ca9f8c71..f1254ece18ed 100644
--- a/src/liblzma/check/crc_x86_clmul.h
+++ b/src/liblzma/check/crc_x86_clmul.h
@@ -385,15 +385,8 @@ crc64_arch_optimized(const uint8_t *buf, size_t size, uint64_t crc)
#endif // BUILDING_CRC64_CLMUL
-// is_arch_extension_supported() must be inlined in this header file because
-// the ifunc resolver function may not support calling a function in another
-// translation unit. Depending on compiler-toolchain and flags, a call to
-// a function defined in another translation unit could result in a
-// reference to the PLT, which is unsafe to do in an ifunc resolver. The
-// ifunc resolver runs very early when loading a shared library, so the PLT
-// entries may not be setup at that time. Inlining this function duplicates
-// the function body in crc32_resolve() and crc64_resolve(), but this is
-// acceptable because the function results in very few instructions.
+// Inlining this function duplicates the function body in crc32_resolve() and
+// crc64_resolve(), but this is acceptable because this is a tiny function.
static inline bool
is_arch_extension_supported(void)
{
diff --git a/src/liblzma/common/easy_preset.h b/src/liblzma/common/easy_preset.h
index d0ca1a6234a1..4ef6d044ad57 100644
--- a/src/liblzma/common/easy_preset.h
+++ b/src/liblzma/common/easy_preset.h
@@ -9,6 +9,9 @@
//
///////////////////////////////////////////////////////////////////////////////
+#ifndef LZMA_EASY_PRESET_H
+#define LZMA_EASY_PRESET_H
+
#include "common.h"
@@ -29,3 +32,5 @@ typedef struct {
/// Set *easy to the settings given by the preset. Returns true on error,
/// false on success.
extern bool lzma_easy_preset(lzma_options_easy *easy, uint32_t preset);
+
+#endif
diff --git a/src/liblzma/common/filter_buffer_decoder.c b/src/liblzma/common/filter_buffer_decoder.c
index e80c582c916f..cc0d88cc71c1 100644
--- a/src/liblzma/common/filter_buffer_decoder.c
+++ b/src/liblzma/common/filter_buffer_decoder.c
@@ -23,7 +23,7 @@ lzma_raw_buffer_decode(
|| out_pos == NULL || *out_pos > out_size)
return LZMA_PROG_ERROR;
- // Initialize the decoer.
+ // Initialize the decoder.
lzma_next_coder next = LZMA_NEXT_CODER_INIT;
return_if_error(lzma_raw_decoder_init(&next, allocator, filters));
diff --git a/src/liblzma/common/filter_common.c b/src/liblzma/common/filter_common.c
index 2da6bd9c7781..d15d9cc94f99 100644
--- a/src/liblzma/common/filter_common.c
+++ b/src/liblzma/common/filter_common.c
@@ -153,7 +153,7 @@ lzma_filters_copy(const lzma_filter *src, lzma_filter *real_dest,
return LZMA_PROG_ERROR;
// Use a temporary destination so that the real destination
- // will never be modied if an error occurs.
+ // will never be modified if an error occurs.
lzma_filter dest[LZMA_FILTERS_MAX + 1];
lzma_ret ret;
diff --git a/src/liblzma/common/filter_decoder.c b/src/liblzma/common/filter_decoder.c
index 77441e5449c3..cbdeb5858f66 100644
--- a/src/liblzma/common/filter_decoder.c
+++ b/src/liblzma/common/filter_decoder.c
@@ -150,6 +150,16 @@ decoder_find(lzma_vli id)
}
+// lzma_filter_coder begins with the same members as lzma_filter_decoder.
+// This function is a wrapper with a type that is compatible with the
+// typedef of lzma_filter_find in filter_common.h.
+static const lzma_filter_coder *
+coder_find(lzma_vli id)
+{
+ return (const lzma_filter_coder *)decoder_find(id);
+}
+
+
extern LZMA_API(lzma_bool)
lzma_filter_decoder_is_supported(lzma_vli id)
{
@@ -162,7 +172,7 @@ lzma_raw_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
const lzma_filter *options)
{
return lzma_raw_coder_init(next, allocator,
- options, (lzma_filter_find)(&decoder_find), false);
+ options, &coder_find, false);
}
@@ -181,8 +191,7 @@ lzma_raw_decoder(lzma_stream *strm, const lzma_filter *options)
extern LZMA_API(uint64_t)
lzma_raw_decoder_memusage(const lzma_filter *filters)
{
- return lzma_raw_coder_memusage(
- (lzma_filter_find)(&decoder_find), filters);
+ return lzma_raw_coder_memusage(&coder_find, filters);
}
diff --git a/src/liblzma/common/filter_encoder.c b/src/liblzma/common/filter_encoder.c
index 523d37310010..bc394448985a 100644
--- a/src/liblzma/common/filter_encoder.c
+++ b/src/liblzma/common/filter_encoder.c
@@ -193,6 +193,16 @@ encoder_find(lzma_vli id)
}
+// lzma_filter_coder begins with the same members as lzma_filter_encoder.
+// This function is a wrapper with a type that is compatible with the
+// typedef of lzma_filter_find in filter_common.h.
+static const lzma_filter_coder *
+coder_find(lzma_vli id)
+{
+ return (const lzma_filter_coder *)encoder_find(id);
+}
+
+
extern LZMA_API(lzma_bool)
lzma_filter_encoder_is_supported(lzma_vli id)
{
@@ -232,7 +242,7 @@ lzma_raw_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
const lzma_filter *filters)
{
return lzma_raw_coder_init(next, allocator,
- filters, (lzma_filter_find)(&encoder_find), true);
+ filters, &coder_find, true);
}
@@ -240,7 +250,7 @@ extern LZMA_API(lzma_ret)
lzma_raw_encoder(lzma_stream *strm, const lzma_filter *filters)
{
lzma_next_strm_init(lzma_raw_coder_init, strm, filters,
- (lzma_filter_find)(&encoder_find), true);
+ &coder_find, true);
strm->internal->supported_actions[LZMA_RUN] = true;
strm->internal->supported_actions[LZMA_SYNC_FLUSH] = true;
@@ -253,8 +263,7 @@ lzma_raw_encoder(lzma_stream *strm, const lzma_filter *filters)
extern LZMA_API(uint64_t)
lzma_raw_encoder_memusage(const lzma_filter *filters)
{
- return lzma_raw_coder_memusage(
- (lzma_filter_find)(&encoder_find), filters);
+ return lzma_raw_coder_memusage(&coder_find, filters);
}
diff --git a/src/liblzma/common/index_decoder.c b/src/liblzma/common/index_decoder.c
index f105ff04e8a1..4bcb30692115 100644
--- a/src/liblzma/common/index_decoder.c
+++ b/src/liblzma/common/index_decoder.c
@@ -305,6 +305,12 @@ lzma_index_decoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
extern LZMA_API(lzma_ret)
lzma_index_decoder(lzma_stream *strm, lzma_index **i, uint64_t memlimit)
{
+ // If i isn't NULL, *i must always be initialized due to
+ // the wording in the API docs. This way it is initialized
+ // if we return LZMA_PROG_ERROR due to strm == NULL.
+ if (i != NULL)
+ *i = NULL;
+
lzma_next_strm_init(lzma_index_decoder_init, strm, i, memlimit);
strm->internal->supported_actions[LZMA_RUN] = true;
@@ -319,6 +325,11 @@ lzma_index_buffer_decode(lzma_index **i, uint64_t *memlimit,
const lzma_allocator *allocator,
const uint8_t *in, size_t *in_pos, size_t in_size)
{
+ // If i isn't NULL, *i must always be initialized due to
+ // the wording in the API docs.
+ if (i != NULL)
+ *i = NULL;
+
// Sanity checks
if (i == NULL || memlimit == NULL
|| in == NULL || in_pos == NULL || *in_pos > in_size)
diff --git a/src/liblzma/common/memcmplen.h b/src/liblzma/common/memcmplen.h
index d8c42040d368..394a4856dd6a 100644
--- a/src/liblzma/common/memcmplen.h
+++ b/src/liblzma/common/memcmplen.h
@@ -67,6 +67,19 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
// This is only for x86-64 and ARM64 for now. This might be fine on
// other 64-bit processors too. On big endian one should use xor
// instead of subtraction and switch to __builtin_clzll().
+ //
+ // Reasons to use subtraction instead of xor:
+ //
+ // - On some x86-64 processors (Intel Sandy Bridge to Tiger Lake),
+ // sub+jz and sub+jnz can be fused but xor+jz or xor+jnz cannot.
+ // Thus using subtraction has potential to be a tiny amount faster
+ // since the code checks if the quotient is non-zero.
+ //
+ // - Some processors (Intel Pentium 4) used to have more ALU
+ // resources for add/sub instructions than and/or/xor.
+ //
+ // The processor info is based on Agner Fog's microarchitecture.pdf
+ // version 2023-05-26. https://www.agner.org/optimize/
#define LZMA_MEMCMPLEN_EXTRA 8
while (len < limit) {
const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len);
diff --git a/src/liblzma/common/outqueue.h b/src/liblzma/common/outqueue.h
index ae56f636e8b1..25f071977a8f 100644
--- a/src/liblzma/common/outqueue.h
+++ b/src/liblzma/common/outqueue.h
@@ -9,6 +9,9 @@
//
///////////////////////////////////////////////////////////////////////////////
+#ifndef LZMA_OUTQUEUE_H
+#define LZMA_OUTQUEUE_H
+
#include "common.h"
@@ -251,3 +254,5 @@ lzma_outq_outbuf_memusage(size_t buf_size)
assert(buf_size <= SIZE_MAX - sizeof(lzma_outbuf));
return sizeof(lzma_outbuf) + buf_size;
}
+
+#endif
diff --git a/src/liblzma/common/string_conversion.c b/src/liblzma/common/string_conversion.c
index 92d9032bdd18..c899783c642a 100644
--- a/src/liblzma/common/string_conversion.c
+++ b/src/liblzma/common/string_conversion.c
@@ -217,12 +217,14 @@ typedef struct {
uint16_t offset;
union {
+ // NVHPC has problems with unions that contain pointers that
+ // are not the first members, so keep "map" at the top.
+ const name_value_map *map;
+
struct {
uint32_t min;
uint32_t max;
} range;
-
- const name_value_map *map;
} u;
} option_map;
@@ -1000,6 +1002,12 @@ extern LZMA_API(const char *)
lzma_str_to_filters(const char *str, int *error_pos, lzma_filter *filters,
uint32_t flags, const lzma_allocator *allocator)
{
+ // If error_pos isn't NULL, *error_pos must always be set.
+ // liblzma <= 5.4.6 and <= 5.6.1 have a bug and don't do this
+ // when str == NULL or filters == NULL or flags are unsupported.
+ if (error_pos != NULL)
+ *error_pos = 0;
+
if (str == NULL || filters == NULL)
return "Unexpected NULL pointer argument(s) "
"to lzma_str_to_filters()";
diff --git a/src/liblzma/delta/delta_decoder.c b/src/liblzma/delta/delta_decoder.c
index 10d53687894e..9f0d49ca415a 100644
--- a/src/liblzma/delta/delta_decoder.c
+++ b/src/liblzma/delta/delta_decoder.c
@@ -25,6 +25,11 @@ decode_buffer(lzma_delta_coder *coder, uint8_t *buffer, size_t size)
}
+// For an unknown reason NVIDIA HPC Compiler needs this pragma
+// to produce working code.
+#ifdef __NVCOMPILER
+# pragma routine novector
+#endif
static lzma_ret
delta_decode(void *coder_ptr, const lzma_allocator *allocator,
const uint8_t *restrict in, size_t *restrict in_pos,
diff --git a/src/liblzma/lz/lz_encoder.h b/src/liblzma/lz/lz_encoder.h
index 429836c8bc4e..eb197c6b6cd8 100644
--- a/src/liblzma/lz/lz_encoder.h
+++ b/src/liblzma/lz/lz_encoder.h
@@ -21,7 +21,7 @@
// changing this check.
#define IS_ENC_DICT_SIZE_VALID(size) \
((size) >= LZMA_DICT_SIZE_MIN \
- && (size) <= (UINT32_C(1) << 30) + (UINT32_C(1) << 29))
+ && (size) <= (UINT32_C(1) << 30) + (UINT32_C(1) << 29))
/// A table of these is used by the LZ-based encoder to hold
diff --git a/src/liblzma/rangecoder/range_decoder.h b/src/liblzma/rangecoder/range_decoder.h
index b6422247f3c3..31a58d1ffbed 100644
--- a/src/liblzma/rangecoder/range_decoder.h
+++ b/src/liblzma/rangecoder/range_decoder.h
@@ -45,6 +45,7 @@
// and different processors. Overall 0x1F0 seems to be the best choice.
#ifndef LZMA_RANGE_DECODER_CONFIG
# if defined(__x86_64__) && !defined(__ILP32__) \
+ && !defined(__NVCOMPILER) \
&& (defined(__GNUC__) || defined(__clang__))
# define LZMA_RANGE_DECODER_CONFIG 0x1F0
# else
diff --git a/src/liblzma/simple/riscv.c b/src/liblzma/simple/riscv.c
index aabbb0520577..b18df8b637d0 100644
--- a/src/liblzma/simple/riscv.c
+++ b/src/liblzma/simple/riscv.c
@@ -116,7 +116,7 @@ AUIPC with rd != x0
Zfh, F, D, and Q:
* RV32I: LB, LH, LW, LBU, LHU, SB, SH, SW
* RV64I has also: LD, LWU, SD
- * Zhf: FLH, FSH
+ * Zfh: FLH, FSH
* F: FLW, FSW
* D: FLD, FSD
* Q: FLQ, FSQ
@@ -320,11 +320,11 @@ AUIPC with rd == x0
// The left-hand side takes care of (1) and (2).
// (a) The lowest 7 bits are already known to be AUIPC so subtracting 0x17
// makes those bits zeros.
-// (b) If AUIPC rd equals x2, subtracting 0x10 makes bits [11:7] zeros.
+// (b) If AUIPC rd equals x2, subtracting 0x100 makes bits [11:7] zeros.
// If rd doesn't equal x2, then there will be at least one non-zero bit
// and the next step (c) is irrelevant.
// (c) If the lowest two opcode bits of the packed inst2 are set in [13:12],
-// then subtracting 0x300 will make those bits zeros. Otherwise there
+// then subtracting 0x3000 will make those bits zeros. Otherwise there
// will be at least one non-zero bit.
//
// The shift by 18 removes the high bits from the final '>=' comparison and
diff --git a/src/liblzma/simple/simple_coder.h b/src/liblzma/simple/simple_coder.h
index c9ccc3f1e634..2b762d50071d 100644
--- a/src/liblzma/simple/simple_coder.h
+++ b/src/liblzma/simple/simple_coder.h
@@ -61,12 +61,12 @@ extern lzma_ret lzma_simple_armthumb_decoder_init(lzma_next_coder *next,
extern lzma_ret lzma_simple_arm64_encoder_init(lzma_next_coder *next,
- const lzma_allocator *allocator,
- const lzma_filter_info *filters);
+ const lzma_allocator *allocator,
+ const lzma_filter_info *filters);
extern lzma_ret lzma_simple_arm64_decoder_init(lzma_next_coder *next,
- const lzma_allocator *allocator,
- const lzma_filter_info *filters);
+ const lzma_allocator *allocator,
+ const lzma_filter_info *filters);
extern lzma_ret lzma_simple_sparc_encoder_init(lzma_next_coder *next,
diff --git a/src/liblzma/simple/x86.c b/src/liblzma/simple/x86.c
index 10d70e91697b..f216231f2d12 100644
--- a/src/liblzma/simple/x86.c
+++ b/src/liblzma/simple/x86.c
@@ -26,11 +26,7 @@ static size_t
x86_code(void *simple_ptr, uint32_t now_pos, bool is_encoder,
uint8_t *buffer, size_t size)
{
- static const bool MASK_TO_ALLOWED_STATUS[8]
- = { true, true, true, false, true, false, false, false };
-
- static const uint32_t MASK_TO_BIT_NUMBER[8]
- = { 0, 1, 2, 2, 3, 3, 3, 3 };
+ static const uint32_t MASK_TO_BIT_NUMBER[5] = { 0, 1, 2, 2, 3 };
lzma_simple_x86 *simple = simple_ptr;
uint32_t prev_mask = simple->prev_mask;
@@ -67,9 +63,8 @@ x86_code(void *simple_ptr, uint32_t now_pos, bool is_encoder,
b = buffer[buffer_pos + 4];
- if (Test86MSByte(b)
- && MASK_TO_ALLOWED_STATUS[(prev_mask >> 1) & 0x7]
- && (prev_mask >> 1) < 0x10) {
+ if (Test86MSByte(b) && (prev_mask >> 1) <= 4
+ && (prev_mask >> 1) != 3) {
uint32_t src = ((uint32_t)(b) << 24)
| ((uint32_t)(buffer[buffer_pos + 3]) << 16)
diff --git a/src/xz/args.c b/src/xz/args.c
index de84950a2987..eba1b97dc464 100644
--- a/src/xz/args.c
+++ b/src/xz/args.c
@@ -92,6 +92,12 @@ parse_block_list(const char *str_const)
free(opt_block_list);
opt_block_list = xmalloc((count + 1) * sizeof(block_list_entry));
+ // Clear the bitmask of filter chains in use.
+ block_list_chain_mask = 0;
+
+ // Reset the largest Block size found in --block-list.
+ block_list_largest = 0;
+
for (size_t i = 0; i < count; ++i) {
// Locate the next comma and replace it with \0.
char *p = strchr(str, ',');
@@ -99,7 +105,7 @@ parse_block_list(const char *str_const)
*p = '\0';
// Use the default filter chain unless overridden.
- opt_block_list[i].filters_index = 0;
+ opt_block_list[i].chain_num = 0;
// To specify a filter chain, the block list entry may be
// prepended with "[filter-chain-number]:". The size is
@@ -126,10 +132,13 @@ parse_block_list(const char *str_const)
"filter chain number '%c:'"),
str[0]);
- int filter_num = str[0] - '0';
- opt_block_list[i].filters_index =
- (uint32_t)filter_num;
+ const unsigned chain_num = (unsigned)(str[0] - '0');
+ opt_block_list[i].chain_num = chain_num;
+ block_list_chain_mask |= 1U << chain_num;
str += 2;
+ } else {
+ // This Block uses the default filter chain.
+ block_list_chain_mask |= 1U << 0;
}
if (str[0] == '\0') {
@@ -153,9 +162,23 @@ parse_block_list(const char *str_const)
opt_block_list[i].size = UINT64_MAX;
}
+
+ // Remember the largest Block size in the list.
+ //
+ // NOTE: Do this after handling the special value 0
+ // because when 0 is used, we don't want to reduce
+ // the Block size of the multithreaded encoder.
+ if (block_list_largest < opt_block_list[i].size)
+ block_list_largest = opt_block_list[i].size;
}
- str = p + 1;
+ // Be standards compliant: p + 1 is undefined behavior
+ // if p == NULL. That occurs on the last iteration of
+ // the loop when we won't care about the value of str
+ // anymore anyway. That is, this is done conditionally
+ // solely for standard conformance reasons.
+ if (p != NULL)
+ str = p + 1;
}
// Terminate the array.
@@ -238,7 +261,7 @@ parse_real(args_info *args, int argc, char **argv)
{ "check", required_argument, NULL, 'C' },
{ "ignore-check", no_argument, NULL, OPT_IGNORE_CHECK },
{ "block-size", required_argument, NULL, OPT_BLOCK_SIZE },
- { "block-list", required_argument, NULL, OPT_BLOCK_LIST },
+ { "block-list", required_argument, NULL, OPT_BLOCK_LIST },
{ "memlimit-compress", required_argument, NULL, OPT_MEM_COMPRESS },
{ "memlimit-decompress", required_argument, NULL, OPT_MEM_DECOMPRESS },
{ "memlimit-mt-decompress", required_argument, NULL, OPT_MEM_MT_DECOMPRESS },
diff --git a/src/xz/coder.c b/src/xz/coder.c
index 4efaa802b9bb..5e41f0df6802 100644
--- a/src/xz/coder.c
+++ b/src/xz/coder.c
@@ -11,6 +11,7 @@
///////////////////////////////////////////////////////////////////////////////
#include "private.h"
+#include "tuklib_integer.h"
/// Return value type for coder_init().
@@ -27,6 +28,8 @@ bool opt_auto_adjust = true;
bool opt_single_stream = false;
uint64_t opt_block_size = 0;
block_list_entry *opt_block_list = NULL;
+uint64_t block_list_largest;
+uint32_t block_list_chain_mask;
/// Stream used to communicate with liblzma
static lzma_stream strm = LZMA_STREAM_INIT;
@@ -35,25 +38,19 @@ static lzma_stream strm = LZMA_STREAM_INIT;
/// and 9 other filter chains can be specified with --filtersX.
#define NUM_FILTER_CHAIN_MAX 10
-/// The default filter chain is in filters[0]. It is used for encoding
+/// The default filter chain is in chains[0]. It is used for encoding
/// in all supported formats and also for decdoing raw streams. The other
/// filter chains are set by --filtersX to support changing filters with
/// the --block-list option.
-static lzma_filter filters[NUM_FILTER_CHAIN_MAX][LZMA_FILTERS_MAX + 1];
+static lzma_filter chains[NUM_FILTER_CHAIN_MAX][LZMA_FILTERS_MAX + 1];
-/// Bit mask representing the filters that are actually used when encoding
-/// in the xz format. This is needed since a filter chain could be
-/// specified in --filtersX (or the default filter chain), but never used
-/// in --block-list. The default filter chain is always assumed to be used,
-/// unless --block-list is specified and does not have a block using the
-/// default filter chain.
-static uint32_t filters_used_mask = 1;
-
-#ifdef HAVE_ENCODERS
-/// Track the memory usage for all filter chains (default or --filtersX).
-/// The memory usage may need to be scaled down depending on the memory limit.
-static uint64_t filter_memusages[ARRAY_SIZE(filters)];
-#endif
+/// Bitmask indicating which filter chains are actually used when encoding
+/// in the .xz format. This is needed since the filter chains specified using
+/// --filtersX (or the default filter chain) might in reality be unneeded
+/// if they are never used in --block-list. When --block-list isn't
+/// specified, only the default filter chain is used, thus the initial
+/// value of this variable is 1U << 0 (the number of the default chain is 0).
+static uint32_t chains_used_mask = 1U << 0;
/// Input and output buffers
static io_buf in_buf;
@@ -105,7 +102,7 @@ forget_filter_chain(void)
// Setting a preset or using --filters makes us forget
// the earlier custom filter chain (if any).
if (filters_count > 0) {
- lzma_filters_free(filters[0], NULL);
+ lzma_filters_free(chains[0], NULL);
filters_count = 0;
}
@@ -142,11 +139,12 @@ coder_add_filter(lzma_vli id, void *options)
if (string_to_filter_used)
forget_filter_chain();
- filters[0][filters_count].id = id;
- filters[0][filters_count].options = options;
+ chains[0][filters_count].id = id;
+ chains[0][filters_count].options = options;
+
// Terminate the filter chain with LZMA_VLI_UNKNOWN to simplify
// implementation of forget_filter_chain().
- filters[0][++filters_count].id = LZMA_VLI_UNKNOWN;
+ chains[0][++filters_count].id = LZMA_VLI_UNKNOWN;
// Setting a custom filter chain makes us forget the preset options.
// This makes a difference if one specifies e.g. "xz -9 --lzma2 -e"
@@ -163,7 +161,7 @@ str_to_filters(const char *str, uint32_t index, uint32_t flags)
{
int error_pos;
const char *err = lzma_str_to_filters(str, &error_pos,
- filters[index], flags, NULL);
+ chains[index], flags, NULL);
if (err != NULL) {
char filter_num[2] = "";
@@ -199,7 +197,7 @@ coder_add_filters_from_str(const char *filter_str)
// Set the filters_count to be the number of filters converted from
// the string.
- for (filters_count = 0; filters[0][filters_count].id
+ for (filters_count = 0; chains[0][filters_count].id
!= LZMA_VLI_UNKNOWN;
++filters_count) ;
@@ -212,12 +210,12 @@ extern void
coder_add_block_filters(const char *str, size_t slot)
{
// Free old filters first, if they were previously allocated.
- if (filters_used_mask & (1U << slot))
- lzma_filters_free(filters[slot], NULL);
+ if (chains_used_mask & (1U << slot))
+ lzma_filters_free(chains[slot], NULL);
str_to_filters(str, slot, 0);
- filters_used_mask |= 1U << slot;
+ chains_used_mask |= 1U << slot;
}
@@ -233,29 +231,26 @@ memlimit_too_small(uint64_t memory_usage)
#ifdef HAVE_ENCODERS
-// For a given opt_block_list index, validate that the filter has been
-// set. If it has not been set, we must exit with error to avoid using
-// an uninitialized filter chain.
-static void
-validate_block_list_filter(const uint32_t filter_num)
-{
- if (!(filters_used_mask & (1U << filter_num)))
- message_fatal(_("filter chain %u used by --block-list but "
- "not specified with --filters%u="),
- (unsigned)filter_num, (unsigned)filter_num);
-}
-
-
-// Sets the memory usage for each filter chain. It will return the maximum
-// memory usage of all of the filter chains.
+/// \brief Calculate the memory usage of each filter chain.
+///
+/// \param chains_memusages If non-NULL, the memusage of the encoder
+/// or decoder for each chain is stored in
+/// this array.
+/// \param mt If non-NULL, calculate memory usage of
+/// multithreaded encoder.
+/// \param encode Whether to calculate encoder or decoder
+/// memory usage. This must be true if
+/// mt != NULL.
+///
+/// \return Return the highest memory usage of all of the filter chains.
static uint64_t
-filters_memusage_max(const lzma_mt *mt, bool encode)
+get_chains_memusage(uint64_t *chains_memusages, const lzma_mt *mt, bool encode)
{
uint64_t max_memusage = 0;
#ifdef MYTHREAD_ENABLED
- // Copy multithreaded options to a temporary struct since the
- // filters member needs to be changed
+ // Copy multithreading options to a temporary struct since the
+ // "filters" member needs to be changed.
lzma_mt mt_local;
if (mt != NULL)
mt_local = *mt;
@@ -263,40 +258,39 @@ filters_memusage_max(const lzma_mt *mt, bool encode)
(void)mt;
#endif
- for (uint32_t i = 0; i < ARRAY_SIZE(filters); i++) {
- if (!(filters_used_mask & (1U << i)))
+ for (uint32_t i = 0; i < ARRAY_SIZE(chains); i++) {
+ if (!(chains_used_mask & (1U << i)))
continue;
uint64_t memusage = UINT64_MAX;
#ifdef MYTHREAD_ENABLED
if (mt != NULL) {
- mt_local.filters = filters[i];
+ assert(encode);
+ mt_local.filters = chains[i];
memusage = lzma_stream_encoder_mt_memusage(&mt_local);
- filter_memusages[i] = memusage;
- }
- else
+ } else
#endif
-
if (encode) {
- memusage = lzma_raw_encoder_memusage(filters[i]);
- filter_memusages[i] = memusage;
+ memusage = lzma_raw_encoder_memusage(chains[i]);
}
-
#ifdef HAVE_DECODERS
else {
- memusage = lzma_raw_decoder_memusage(filters[i]);
+ memusage = lzma_raw_decoder_memusage(chains[i]);
}
#endif
+ if (chains_memusages != NULL)
+ chains_memusages[i] = memusage;
+
if (memusage > max_memusage)
max_memusage = memusage;
}
return max_memusage;
}
-
#endif
+
extern void
coder_set_compression_settings(void)
{
@@ -305,65 +299,65 @@ coder_set_compression_settings(void)
assert(opt_format != FORMAT_LZIP);
#endif
-#ifdef HAVE_ENCODERS
-# ifdef MYTHREAD_ENABLED
- // Represents the largest Block size specified with --block-list. This
- // is needed to help reduce the Block size in the multithreaded encoder
- // so memory is not wasted.
- uint64_t max_block_list_size = 0;
-# endif
+ // The default check type is CRC64, but fallback to CRC32
+ // if CRC64 isn't supported by the copy of liblzma we are
+ // using. CRC32 is always supported.
+ if (check_default) {
+ check = LZMA_CHECK_CRC64;
+ if (!lzma_check_is_supported(check))
+ check = LZMA_CHECK_CRC32;
+ }
+#ifdef HAVE_ENCODERS
if (opt_block_list != NULL) {
- // This mask tracks the filters actually referenced in
- // --block-list. It is used to help remove bits from
- // filters_used_mask when a filter chain was specified
- // but never actually used.
- uint32_t filters_ref_mask = 0;
-
- for (uint32_t i = 0; opt_block_list[i].size != 0; i++) {
- validate_block_list_filter(
- opt_block_list[i].filters_index);
-
- // Mark the current filter as referenced.
- filters_ref_mask |= 1U <<
- opt_block_list[i].filters_index;
-
-# ifdef MYTHREAD_ENABLED
- if (opt_block_list[i].size > max_block_list_size)
- max_block_list_size = opt_block_list[i].size;
-# endif
+ // args.c ensures these.
+ assert(opt_mode == MODE_COMPRESS);
+ assert(opt_format == FORMAT_XZ);
+
+ // Find out if block_list_chain_mask has a bit set that
+ // isn't set in chains_used_mask.
+ const uint32_t missing_chains_mask
+ = (block_list_chain_mask ^ chains_used_mask)
+ & block_list_chain_mask;
+
+ // If a filter chain was specified in --block-list but no
+ // matching --filtersX option was used, exit with an error.
+ if (missing_chains_mask != 0) {
+ // Get the number of the first missing filter chain
+ // and show it in the error message.
+ const unsigned first_missing
+ = (unsigned)ctz32(missing_chains_mask);
+
+ message_fatal(_("filter chain %u used by "
+ "--block-list but not specified "
+ "with --filters%u="),
+ first_missing, first_missing);
}
- assert(filters_ref_mask != 0);
- // Note: The filters that were initialized but not used do
- // not free their options and do not have the filter
- // IDs set to LZMA_VLI_UNKNOWN. Filter chains are not
- // freed outside of debug mode and the default filter
- // chain is never freed.
- filters_used_mask = filters_ref_mask;
+ // Omit the unused filter chains from mask of used chains.
+ //
+ // (FIXME? When built with debugging, coder_free() will free()
+ // the filter chains (except the default chain) which makes
+ // Valgrind show fewer reachable allocations. But coder_free()
+ // uses this mask to determine which chains to free. Thus it
+ // won't free the ones that are cleared here from the mask.
+ // In practice this doesn't matter.)
+ chains_used_mask &= block_list_chain_mask;
} else {
// Reset filters used mask in case --block-list is not
// used, but --filtersX is used.
- filters_used_mask = 1;
+ chains_used_mask = 1U << 0;
}
#endif
- // The default check type is CRC64, but fallback to CRC32
- // if CRC64 isn't supported by the copy of liblzma we are
- // using. CRC32 is always supported.
- if (check_default) {
- check = LZMA_CHECK_CRC64;
- if (!lzma_check_is_supported(check))
- check = LZMA_CHECK_CRC32;
- }
// Options for LZMA1 or LZMA2 in case we are using a preset.
static lzma_options_lzma opt_lzma;
- // The first filter in the filters[] array is for the default
+ // The first filter in the chains[] array is for the default
// filter chain.
- lzma_filter *default_filters = filters[0];
+ lzma_filter *default_filters = chains[0];
- if (filters_count == 0 && filters_used_mask & 1) {
+ if (filters_count == 0 && chains_used_mask & 1) {
// We are using a preset. This is not a good idea in raw mode
// except when playing around with things. Different versions
// of this software may use different options in presets, and
@@ -403,14 +397,16 @@ coder_set_compression_settings(void)
"the LZMA1 filter"));
// If we are using the .xz format, make sure that there is no LZMA1
- // filter to prevent LZMA_PROG_ERROR.
- if (opt_format == FORMAT_XZ && filters_used_mask & 1)
+ // filter to prevent LZMA_PROG_ERROR. With the chains from --filtersX
+ // we have already ensured this by calling lzma_str_to_filters()
+ // without setting the flags that would allow non-.xz filters.
+ if (opt_format == FORMAT_XZ && chains_used_mask & 1)
for (size_t i = 0; i < filters_count; ++i)
if (default_filters[i].id == LZMA_FILTER_LZMA1)
message_fatal(_("LZMA1 cannot be used "
"with the .xz format"));
- if (filters_used_mask & 1) {
+ if (chains_used_mask & 1) {
// Print the selected default filter chain.
message_filters_show(V_DEBUG, default_filters);
}
@@ -419,11 +415,11 @@ coder_set_compression_settings(void)
// from the filter chain. Currently the threaded encoder doesn't
// support LZMA_SYNC_FLUSH so single-threaded mode must be used.
if (opt_mode == MODE_COMPRESS && opt_flush_timeout != 0) {
- for (uint32_t i = 0; i < ARRAY_SIZE(filters); ++i) {
- if (!(filters_used_mask & (1U << i)))
+ for (unsigned i = 0; i < ARRAY_SIZE(chains); ++i) {
+ if (!(chains_used_mask & (1U << i)))
continue;
- const lzma_filter *fc = filters[i];
+ const lzma_filter *fc = chains[i];
for (size_t j = 0; fc[j].id != LZMA_VLI_UNKNOWN; j++) {
switch (fc[j].id) {
case LZMA_FILTER_LZMA2:
@@ -434,7 +430,7 @@ coder_set_compression_settings(void)
message_fatal(_("Filter chain %u is "
"incompatible with "
"--flush-timeout"),
- (unsigned)i);
+ i);
}
}
}
@@ -446,17 +442,22 @@ coder_set_compression_settings(void)
}
}
- // Get the memory usage and memory limit. The memory usage is the
- // maximum of the default filters[] and any filters specified by
- // --filtersX.
- // Note that if --format=raw was used, we can be decompressing and
- // do not need to account for any filter chains created
- // with --filtersX.
+ // Get memory limit and the memory usage of the used filter chains.
+ // Note that if --format=raw was used, we can be decompressing
+ // using the default filter chain.
//
// If multithreaded .xz compression is done, the memory limit
// will be replaced.
uint64_t memory_limit = hardware_memlimit_get(opt_mode);
uint64_t memory_usage = UINT64_MAX;
+
+#ifdef HAVE_ENCODERS
+ // Memory usage for each encoder filter chain (default
+ // or --filtersX). The encoder options may need to be
+ // scaled down depending on the memory usage limit.
+ uint64_t encoder_memusages[ARRAY_SIZE(chains)];
+#endif
+
if (opt_mode == MODE_COMPRESS) {
#ifdef HAVE_ENCODERS
# ifdef MYTHREAD_ENABLED
@@ -465,16 +466,17 @@ coder_set_compression_settings(void)
mt_options.threads = hardware_threads_get();
uint64_t block_size = opt_block_size;
+
// If opt_block_size is not set, find the maximum
// recommended Block size based on the filter chains
if (block_size == 0) {
- for (uint32_t i = 0; i < ARRAY_SIZE(filters);
+ for (unsigned i = 0; i < ARRAY_SIZE(chains);
i++) {
- if (!(filters_used_mask & (1U << i)))
+ if (!(chains_used_mask & (1U << i)))
continue;
uint64_t size = lzma_mt_block_size(
- filters[i]);
+ chains[i]);
// If this returns an error, then one
// of the filter chains in use is
@@ -483,33 +485,28 @@ coder_set_compression_settings(void)
if (size == UINT64_MAX)
message_fatal(_("Unsupported "
"options in filter "
- "chain %u"),
- (unsigned)i);
+ "chain %u"), i);
if (size > block_size)
block_size = size;
}
- // If the largest block size specified
- // with --block-list is less than the
- // recommended Block size, then it is a waste
- // of RAM to use a larger Block size. It may
- // even allow more threads to be used in some
- // situations. If the special 0 Block size is
- // used (encode all remaining data in 1 Block)
- // then max_block_list_size will be set to
- // UINT64_MAX, so the recommended Block size
- // will always be used in this case.
- if (max_block_list_size > 0
- && max_block_list_size
- < block_size)
- block_size = max_block_list_size;
+ // If --block-list was used and our current
+ // Block size exceeds the largest size
+ // in --block-list, reduce the Block size of
+ // the multithreaded encoder. The extra size
+ // would only be a waste of RAM. With a
+ // smaller Block size we might even be able
+ // to use more threads in some cases.
+ if (block_list_largest > 0 && block_size
+ > block_list_largest)
+ block_size = block_list_largest;
}
mt_options.block_size = block_size;
mt_options.check = check;
- memory_usage = filters_memusage_max(
+ memory_usage = get_chains_memusage(encoder_memusages,
&mt_options, true);
if (memory_usage != UINT64_MAX)
message(V_DEBUG, _("Using up to %" PRIu32
@@ -518,7 +515,8 @@ coder_set_compression_settings(void)
} else
# endif
{
- memory_usage = filters_memusage_max(NULL, true);
+ memory_usage = get_chains_memusage(encoder_memusages,
+ NULL, true);
}
#endif
} else {
@@ -533,21 +531,13 @@ coder_set_compression_settings(void)
// Print memory usage info before possible dictionary
// size auto-adjusting.
//
- // NOTE: If only encoder support was built, we cannot show the
+ // NOTE: If only encoder support was built, we cannot show
// what the decoder memory usage will be.
message_mem_needed(V_DEBUG, memory_usage);
-#ifdef HAVE_DECODERS
- if (opt_mode == MODE_COMPRESS) {
-#ifdef HAVE_ENCODERS
- const uint64_t decmem =
- filters_memusage_max(NULL, false);
-#else
- // If encoders are not enabled, then --block-list is never
- // usable, so the other filter chains 1-9 can never be used.
- // So there is no need to find the maximum decoder memory
- // required in this case.
- const uint64_t decmem = lzma_raw_decoder_memusage(filters[0]);
-#endif
+
+#if defined(HAVE_ENCODERS) && defined(HAVE_DECODERS)
+ if (opt_mode == MODE_COMPRESS && message_verbosity_get() >= V_DEBUG) {
+ const uint64_t decmem = get_chains_memusage(NULL, NULL, false);
if (decmem != UINT64_MAX)
message(V_DEBUG, _("Decompression will need "
"%s MiB of memory."), uint64_to_str(
@@ -574,14 +564,21 @@ coder_set_compression_settings(void)
// Reduce the number of threads by one and check
// the memory usage.
--mt_options.threads;
- memory_usage = filters_memusage_max(
+ memory_usage = get_chains_memusage(encoder_memusages,
&mt_options, true);
if (memory_usage == UINT64_MAX)
message_bug();
if (memory_usage <= memory_limit) {
// The memory usage is now low enough.
- message(V_WARNING, _("Reduced the number of "
+ //
+ // Since 5.6.1: This is only shown at
+ // V_DEBUG instead of V_WARNING because
+ // changing the number of threads doesn't
+ // affect the output. On some systems this
+ // message would be too common now that
+ // multithreaded compression is the default.
+ message(V_DEBUG, _("Reduced the number of "
"threads from %s to %s to not exceed "
"the memory usage limit of %s MiB"),
uint64_to_str(
@@ -600,8 +597,11 @@ coder_set_compression_settings(void)
// way -T0 won't use insane amount of memory but at the same
// time the soft limit will never make xz fail and never make
// xz change settings that would affect the compressed output.
+ //
+ // Since 5.6.1: Like above, this is now shown at V_DEBUG
+ // instead of V_WARNING.
if (hardware_memlimit_mtenc_is_default()) {
- message(V_WARNING, _("Reduced the number of threads "
+ message(V_DEBUG, _("Reduced the number of threads "
"from %s to one. The automatic memory usage "
"limit of %s MiB is still being exceeded. "
"%s MiB of memory is required. "
@@ -627,7 +627,8 @@ coder_set_compression_settings(void)
// the multithreaded mode but the output
// is also different.
hardware_threads_set(1);
- memory_usage = filters_memusage_max(NULL, true);
+ memory_usage = get_chains_memusage(encoder_memusages,
+ NULL, true);
message(V_WARNING, _("Switching to single-threaded mode "
"to not exceed the memory usage limit of %s MiB"),
uint64_to_str(round_up_to_mib(memory_limit), 0));
@@ -642,137 +643,84 @@ coder_set_compression_settings(void)
if (!opt_auto_adjust)
memlimit_too_small(memory_usage);
- // Decrease the dictionary size until we meet the memory usage limit.
- // The struct is used to track data needed to correctly reduce the
- // memory usage and report which filters were adjusted.
- typedef struct {
- // Pointer to the filter chain that needs to be reduced.
- // NULL indicates that this filter chain was either never
- // set or was never above the memory limit.
- lzma_filter *filters;
-
- // Original dictionary sizes are used to show how each
- // filter's dictionary was reduced.
- uint64_t orig_dict_size;
-
- // Index of the LZMA filter in the filters member. We only
- // adjust this filter's memusage because we don't know how
- // to reduce the memory usage of the other filters.
- uint32_t lzma_idx;
-
- // Indicates if the filter's dictionary size needs to be
- // reduced to fit under the memory limit (true) or if the
- // filter chain is unused or is already under the memory
- // limit (false).
- bool reduce_dict_size;
- } memusage_reduction_data;
-
- memusage_reduction_data memusage_reduction[ARRAY_SIZE(filters)];
-
- // Counter represents how many filter chains are above the memory
- // limit.
- size_t count = 0;
-
- for (uint32_t i = 0; i < ARRAY_SIZE(filters); i++) {
- // The short var name "r" will reduce the number of lines
- // of code needed since less lines will stretch past 80
- // characters.
- memusage_reduction_data *r = &memusage_reduction[i];
- r->filters = NULL;
- r->reduce_dict_size = false;
-
- if (!(filters_used_mask & (1U << i)))
+ // Adjust each filter chain that is exceeding the memory usage limit.
+ for (unsigned i = 0; i < ARRAY_SIZE(chains); i++) {
+ // Skip unused chains.
+ if (!(chains_used_mask & (1U << i)))
continue;
- for (uint32_t j = 0; filters[i][j].id != LZMA_VLI_UNKNOWN;
- j++)
- if ((filters[i][j].id == LZMA_FILTER_LZMA2
- || filters[i][j].id
- == LZMA_FILTER_LZMA1)
- && filter_memusages[i]
- > memory_limit) {
- count++;
- r->filters = filters[i];
- r->lzma_idx = j;
- r->reduce_dict_size = true;
-
- lzma_options_lzma *opt = r->filters
- [r->lzma_idx].options;
- r->orig_dict_size = opt->dict_size;
- opt->dict_size &= ~((UINT32_C(1) << 20) - 1);
- }
- }
-
- // Loop until all filters use <= memory_limit, or exit.
- while (count > 0) {
- for (uint32_t i = 0; i < ARRAY_SIZE(memusage_reduction); i++) {
- memusage_reduction_data *r = &memusage_reduction[i];
+ // Skip chains that already meet the memory usage limit.
+ if (encoder_memusages[i] <= memory_limit)
+ continue;
- if (!r->reduce_dict_size)
- continue;
+ // Look for the last filter if it is LZMA2 or LZMA1, so we
+ // can make it use less RAM. We cannot adjust other filters.
+ unsigned j = 0;
+ while (chains[i][j].id != LZMA_FILTER_LZMA2
+ && chains[i][j].id != LZMA_FILTER_LZMA1) {
+ // NOTE: This displays the too high limit of this
+ // particular filter chain. If multiple chains are
+ // specified and another one would need more then
+ // this message could be confusing. As long as LZMA2
+ // is the only memory hungry filter in .xz this
+ // doesn't matter at all in practice.
+ //
+ // FIXME? However, it's sort of odd still if we had
+ // switched from multithreaded mode to single-threaded
+ // mode because single-threaded produces different
+ // output. So the messages could perhaps be clearer.
+ // Another case of this is a few lines below.
+ if (chains[i][j].id == LZMA_VLI_UNKNOWN)
+ memlimit_too_small(encoder_memusages[i]);
+
+ ++j;
+ }
- lzma_options_lzma *opt =
- r->filters[r->lzma_idx].options;
+ // Decrease the dictionary size until we meet the memory
+ // usage limit. First round down to full mebibytes.
+ lzma_options_lzma *opt = chains[i][j].options;
+ const uint32_t orig_dict_size = opt->dict_size;
+ opt->dict_size &= ~((UINT32_C(1) << 20) - 1);
+ while (true) {
// If it is below 1 MiB, auto-adjusting failed.
- // We could be more sophisticated and scale it
- // down even more, but nobody has complained so far.
+ //
+ // FIXME? See the FIXME a few lines above.
if (opt->dict_size < (UINT32_C(1) << 20))
- memlimit_too_small(memory_usage);
+ memlimit_too_small(encoder_memusages[i]);
- uint64_t filt_mem_usage =
- lzma_raw_encoder_memusage(r->filters);
-
- if (filt_mem_usage == UINT64_MAX)
+ encoder_memusages[i]
+ = lzma_raw_encoder_memusage(chains[i]);
+ if (encoder_memusages[i] == UINT64_MAX)
message_bug();
- if (filt_mem_usage < memory_limit) {
- r->reduce_dict_size = false;
- count--;
- }
- else {
- opt->dict_size -= UINT32_C(1) << 20;
- }
- }
- }
-
- // Tell the user that we decreased the dictionary size for
- // each filter that was adjusted.
- for (uint32_t i = 0; i < ARRAY_SIZE(memusage_reduction); i++) {
- memusage_reduction_data *r = &memusage_reduction[i];
-
- // If the filters were never set, then the memory usage
- // was never adjusted.
- if (r->filters == NULL)
- continue;
+ // Accept it if it is low enough.
+ if (encoder_memusages[i] <= memory_limit)
+ break;
- lzma_filter *filter_lzma = &(r->filters[r->lzma_idx]);
- lzma_options_lzma *opt = filter_lzma->options;
+ // Otherwise adjust it 1 MiB down and try again.
+ opt->dict_size -= UINT32_C(1) << 20;
+ }
- // The first index is the default filter chain. The message
- // should be slightly different if the default filter chain
- // or if --filtersX was adjusted.
+ // Tell the user that we decreased the dictionary size.
+ // The message is slightly different between the default
+ // filter chain (0) or and chains from --filtersX.
+ const char lzma_num = chains[i][j].id == LZMA_FILTER_LZMA2
+ ? '2' : '1';
+ const char *from_size = uint64_to_str(orig_dict_size >> 20, 0);
+ const char *to_size = uint64_to_str(opt->dict_size >> 20, 1);
+ const char *limit_size = uint64_to_str(round_up_to_mib(
+ memory_limit), 2);
if (i == 0)
message(V_WARNING, _("Adjusted LZMA%c dictionary "
"size from %s MiB to %s MiB to not exceed the "
"memory usage limit of %s MiB"),
- filter_lzma->id == LZMA_FILTER_LZMA2
- ? '2' : '1',
- uint64_to_str(r->orig_dict_size >> 20, 0),
- uint64_to_str(opt->dict_size >> 20, 1),
- uint64_to_str(round_up_to_mib(
- memory_limit), 2));
+ lzma_num, from_size, to_size, limit_size);
else
message(V_WARNING, _("Adjusted LZMA%c dictionary size "
"for --filters%u from %s MiB to %s MiB to not "
"exceed the memory usage limit of %s MiB"),
- filter_lzma->id == LZMA_FILTER_LZMA2
- ? '2' : '1',
- (unsigned)i,
- uint64_to_str(r->orig_dict_size >> 20, 0),
- uint64_to_str(opt->dict_size >> 20, 1),
- uint64_to_str(round_up_to_mib(
- memory_limit), 2));
+ lzma_num, i, from_size, to_size, limit_size);
}
#endif
@@ -870,11 +818,11 @@ coder_init(file_pair *pair)
allow_trailing_input = false;
// Set the first filter chain. If the --block-list option is not
- // used then use the default filter chain (filters[0]).
+ // used then use the default filter chain (chains[0]).
// Otherwise, use first filter chain from the block list.
lzma_filter *active_filters = opt_block_list == NULL
- ? filters[0]
- : filters[opt_block_list[0].filters_index];
+ ? chains[0]
+ : chains[opt_block_list[0].chain_num];
if (opt_mode == MODE_COMPRESS) {
#ifdef HAVE_ENCODERS
@@ -1119,11 +1067,11 @@ split_block(uint64_t *block_remaining,
++*list_pos;
// Update the filters if needed.
- if (opt_block_list[*list_pos - 1].filters_index
- != opt_block_list[*list_pos].filters_index) {
- const uint32_t filter_idx = opt_block_list
- [*list_pos].filters_index;
- const lzma_filter *next = filters[filter_idx];
+ if (opt_block_list[*list_pos - 1].chain_num
+ != opt_block_list[*list_pos].chain_num) {
+ const unsigned chain_num
+ = opt_block_list[*list_pos].chain_num;
+ const lzma_filter *next = chains[chain_num];
const lzma_ret ret = lzma_filters_update(
&strm, next);
@@ -1139,7 +1087,7 @@ split_block(uint64_t *block_remaining,
message_fatal(
_("Error changing to "
"filter chain %u: %s"),
- (unsigned)filter_idx,
+ chain_num,
message_strm(ret));
}
}
@@ -1278,9 +1226,10 @@ coder_normal(file_pair *pair)
ret = lzma_code(&strm, action);
// Write out if the output buffer became full.
- if (strm.avail_out == 0)
+ if (strm.avail_out == 0) {
if (coder_write_output(pair))
break;
+ }
#ifdef HAVE_ENCODERS
if (ret == LZMA_STREAM_END && (action == LZMA_SYNC_FLUSH
@@ -1514,9 +1463,9 @@ coder_free(void)
// in coder_set_compression_settings(). Since this is only run in
// debug mode and will be freed when the process ends anyway, we
// don't worry about freeing it.
- for (uint32_t i = 1; i < ARRAY_SIZE(filters); i++) {
- if (filters_used_mask & (1U << i))
- lzma_filters_free(filters[i], NULL);
+ for (uint32_t i = 1; i < ARRAY_SIZE(chains); i++) {
+ if (chains_used_mask & (1U << i))
+ lzma_filters_free(chains[i], NULL);
}
lzma_end(&strm);
diff --git a/src/xz/coder.h b/src/xz/coder.h
index a7feeb9cadb1..96755f30d106 100644
--- a/src/xz/coder.h
+++ b/src/xz/coder.h
@@ -30,15 +30,13 @@ enum format_type {
};
-/// Simple struct to track Block metadata specified through the
-/// --block-list option.
+/// Array of these hold the entries specified with --block-list.
typedef struct {
/// Uncompressed size of the Block
uint64_t size;
- /// Index into the filters[] representing the filter chain to use
- /// for this Block.
- uint32_t filters_index;
+ /// Filter chain to use for this Block (chains[chain_num])
+ unsigned chain_num;
} block_list_entry;
@@ -65,6 +63,19 @@ extern uint64_t opt_block_size;
/// List of block size and filter chain pointer pairs.
extern block_list_entry *opt_block_list;
+/// Size of the largest Block that was specified in --block-list.
+/// This is used to limit the block_size option of multithreaded encoder.
+/// It's waste of memory to specify a too large block_size and reducing
+/// it might even allow using more threads in some cases.
+///
+/// NOTE: If the last entry in --block-list is the special value of 0
+/// (which gets converted to UINT64_MAX), it counts here as UINT64_MAX too.
+/// This way the multithreaded encoder's Block size won't be reduced.
+extern uint64_t block_list_largest;
+
+/// Bitmask indicating which filter chains we specified in --block-list.
+extern uint32_t block_list_chain_mask;
+
/// Set the integrity check type used when compressing
extern void coder_set_check(lzma_check check);
diff --git a/src/xz/message.h b/src/xz/message.h
index 1734f0eaab68..3f6e183585f7 100644
--- a/src/xz/message.h
+++ b/src/xz/message.h
@@ -115,6 +115,7 @@ extern void message_help(bool long_help);
/// Prints a help message specifically for using the --filters and
/// --filtersX command line options.
+tuklib_attr_noreturn
extern void message_filters_help(void);
diff --git a/src/xz/sandbox.c b/src/xz/sandbox.c
index 3b3069c8b2c8..5bd227370751 100644
--- a/src/xz/sandbox.c
+++ b/src/xz/sandbox.c
@@ -109,7 +109,7 @@ sandbox_enable_strict_if_allowed(int src_fd lzma_attribute((__unused__)),
}
-#elif defined(HAVE_LINUX_LANDLOCK_H)
+#elif defined(HAVE_LINUX_LANDLOCK)
//////////////
// Landlock //
diff --git a/src/xz/sandbox.h b/src/xz/sandbox.h
index f41b4725ce3f..98b9862a1c0a 100644
--- a/src/xz/sandbox.h
+++ b/src/xz/sandbox.h
@@ -9,7 +9,7 @@
//
///////////////////////////////////////////////////////////////////////////////
-#if defined(HAVE_PLEDGE) || defined(HAVE_LINUX_LANDLOCK_H) \
+#if defined(HAVE_PLEDGE) || defined(HAVE_LINUX_LANDLOCK) \
|| defined(HAVE_CAP_RIGHTS_LIMIT)
# define ENABLE_SANDBOX 1
#endif
diff --git a/src/xz/signals.c b/src/xz/signals.c
index 13cc4c2b0c2f..20f03beee8a5 100644
--- a/src/xz/signals.c
+++ b/src/xz/signals.c
@@ -49,6 +49,10 @@ signal_handler(int sig)
}
+#ifdef __APPLE__
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wsign-conversion"
+#endif
extern void
signals_init(void)
{
@@ -127,6 +131,9 @@ signals_init(void)
return;
}
+#ifdef __APPLE__
+# pragma GCC diagnostic pop
+#endif
#ifndef __VMS
diff --git a/src/xz/xz.1 b/src/xz/xz.1
index 6c8a52f5242e..5b880e81e8c2 100644
--- a/src/xz/xz.1
+++ b/src/xz/xz.1
@@ -4,7 +4,7 @@
.\" Authors: Lasse Collin
.\" Jia Tan
.\"
-.TH XZ 1 "2024-02-13" "Tukaani" "XZ Utils"
+.TH XZ 1 "2024-04-08" "Tukaani" "XZ Utils"
.
.SH NAME
xz, unxz, xzcat, lzma, unlzma, lzcat \- Compress or decompress .xz and .lzma files
@@ -1812,6 +1812,8 @@ and
\fB\-\-ia64\fR[\fB=\fIoptions\fR]
.TP
\fB\-\-sparc\fR[\fB=\fIoptions\fR]
+.TP
+\fB\-\-riscv\fR[\fB=\fIoptions\fR]
.PD
Add a branch/call/jump (BCJ) filter to the filter chain.
These filters can be used only as a non-last filter
@@ -2552,7 +2554,7 @@ is run by a script or tool, for example, GNU
.RS
.PP
.nf
-.ft CW
+.ft CR
XZ_OPT=\-2v tar caf foo.tar.xz foo
.ft R
.fi
@@ -2572,7 +2574,7 @@ scripts one may use something like this:
.RS
.PP
.nf
-.ft CW
+.ft CR
XZ_OPT=${XZ_OPT\-"\-7e"}
export XZ_OPT
.ft R
@@ -2830,7 +2832,7 @@ if compression is successful:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz foo
.ft R
.fi
@@ -2846,7 +2848,7 @@ even if decompression is successful:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-dk bar.xz
.ft R
.fi
@@ -2864,7 +2866,7 @@ and 5\ MiB, respectively):
.RS
.PP
.nf
-.ft CW
+.ft CR
tar cf \- baz | xz \-4e > baz.tar.xz
.ft R
.fi
@@ -2875,7 +2877,7 @@ to standard output with a single command:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-dcf a.txt b.txt.xz c.txt d.txt.lzma > abcd.txt
.ft R
.fi
@@ -2890,7 +2892,7 @@ can be used to parallelize compression of many files:
.RS
.PP
.nf
-.ft CW
+.ft CR
find . \-type f \e! \-name '*.xz' \-print0 \e
| xargs \-0r \-P4 \-n16 xz \-T1
.ft R
@@ -2930,7 +2932,7 @@ after compressing multiple files:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-\-robot \-\-list *.xz | awk '/^totals/{print $5\-$4}'
.ft R
.fi
@@ -2950,7 +2952,7 @@ option:
.RS
.PP
.nf
-.ft CW
+.ft CR
if ! eval "$(xz \-\-robot \-\-version 2> /dev/null)" ||
[ "$XZ_VERSION" \-lt 50000002 ]; then
echo "Your xz is too old."
@@ -2966,7 +2968,7 @@ but if a limit has already been set, don't increase it:
.RS
.PP
.nf
-.ft CW
+.ft CR
NEWLIM=$((123 << 20))\ \ # 123 MiB
OLDLIM=$(xz \-\-robot \-\-info\-memory | cut \-f3)
if [ $OLDLIM \-eq 0 \-o $OLDLIM \-gt $NEWLIM ]; then
@@ -3019,7 +3021,7 @@ can be modified to use a bigger dictionary:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-\-lzma2=preset=1,dict=32MiB foo.tar
.ft R
.fi
@@ -3047,7 +3049,7 @@ would use:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-vv \-\-lzma2=dict=192MiB big_foo.tar
.ft R
.fi
@@ -3077,7 +3079,7 @@ using about 100\ KiB of memory.
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-\-check=crc32 \-\-lzma2=preset=6e,dict=64KiB foo
.ft R
.fi
@@ -3105,7 +3107,7 @@ slightly (like 0.1\ %) smaller file than
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-\-lzma2=preset=6e,pb=0,lc=4 source_code.tar
.ft R
.fi
@@ -3118,7 +3120,7 @@ using the x86 BCJ filter:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-\-x86 \-\-lzma2 libfoo.so
.ft R
.fi
@@ -3153,7 +3155,7 @@ to LZMA2 to accommodate the three-byte alignment:
.RS
.PP
.nf
-.ft CW
+.ft CR
xz \-\-delta=dist=3 \-\-lzma2=pb=0 foo.tiff
.ft R
.fi
@@ -3174,8 +3176,8 @@ have the same number of bytes per pixel.
.BR bzip2 (1),
.BR 7z (1)
.PP
-XZ Utils: <https://xz.tukaani.org/xz-utils/>
+XZ Utils: <https://tukaani.org/xz/>
.br
-XZ Embedded: <https://xz.tukaani.org/xz-embedded/>
+XZ Embedded: <https://tukaani.org/xz/embedded.html>
.br
LZMA SDK: <https://7-zip.org/sdk.html>
diff --git a/src/xzdec/xzdec.1 b/src/xzdec/xzdec.1
index 0ae0fddda182..5198efb4612e 100644
--- a/src/xzdec/xzdec.1
+++ b/src/xzdec/xzdec.1
@@ -2,7 +2,7 @@
.\"
.\" Author: Lasse Collin
.\"
-.TH XZDEC 1 "2024-01-19" "Tukaani" "XZ Utils"
+.TH XZDEC 1 "2024-04-08" "Tukaani" "XZ Utils"
.SH NAME
xzdec, lzmadec \- Small .xz and .lzma decompressors
.SH SYNOPSIS
@@ -141,4 +141,4 @@ decompressor, consider using XZ Embedded.
.SH "SEE ALSO"
.BR xz (1)
.PP
-XZ Embedded: <https://xz.tukaani.org/xz-embedded/>
+XZ Embedded: <https://tukaani.org/xz/embedded.html>
diff --git a/src/xzdec/xzdec.c b/src/xzdec/xzdec.c
index 6fd0be39e67f..4d881748b2e4 100644
--- a/src/xzdec/xzdec.c
+++ b/src/xzdec/xzdec.c
@@ -24,14 +24,19 @@
# include <sys/capsicum.h>
#endif
-#ifdef HAVE_LINUX_LANDLOCK_H
+#ifdef HAVE_LINUX_LANDLOCK
# include <linux/landlock.h>
# include <sys/prctl.h>
# include <sys/syscall.h>
+# ifdef LANDLOCK_ACCESS_NET_BIND_TCP
+# define LANDLOCK_ABI_MAX 4
+# else
+# define LANDLOCK_ABI_MAX 3
+# endif
#endif
#if defined(HAVE_CAP_RIGHTS_LIMIT) || defined(HAVE_PLEDGE) \
- || defined(HAVE_LINUX_LANDLOCK_H)
+ || defined(HAVE_LINUX_LANDLOCK)
# define ENABLE_SANDBOX 1
#endif
@@ -313,10 +318,12 @@ sandbox_enter(int src_fd)
STDIN_FILENO, cap_rights_clear(&rights)))
goto error;
- if (cap_rights_limit(STDOUT_FILENO, cap_rights_init(&rights, CAP_WRITE)))
+ if (cap_rights_limit(STDOUT_FILENO, cap_rights_init(&rights,
+ CAP_WRITE)))
goto error;
- if (cap_rights_limit(STDERR_FILENO, cap_rights_init(&rights, CAP_WRITE)))
+ if (cap_rights_limit(STDERR_FILENO, cap_rights_init(&rights,
+ CAP_WRITE)))
goto error;
#elif defined(HAVE_PLEDGE)
@@ -325,17 +332,23 @@ sandbox_enter(int src_fd)
goto error;
(void)src_fd;
-#elif defined(HAVE_LINUX_LANDLOCK_H)
+
+#elif defined(HAVE_LINUX_LANDLOCK)
int landlock_abi = syscall(SYS_landlock_create_ruleset,
(void *)NULL, 0, LANDLOCK_CREATE_RULESET_VERSION);
if (landlock_abi > 0) {
- // We support ABI versions 1-3.
- if (landlock_abi > 3)
- landlock_abi = 3;
+ if (landlock_abi > LANDLOCK_ABI_MAX)
+ landlock_abi = LANDLOCK_ABI_MAX;
const struct landlock_ruleset_attr attr = {
- .handled_access_fs = (1ULL << (12 + landlock_abi)) - 1
+ .handled_access_fs = (1ULL
+ << (12 + my_min(3, landlock_abi))) - 1,
+# if LANDLOCK_ABI_MAX >= 4
+ .handled_access_net = landlock_abi < 4 ? 0 :
+ (LANDLOCK_ACCESS_NET_BIND_TCP
+ | LANDLOCK_ACCESS_NET_CONNECT_TCP),
+# endif
};
const int ruleset_fd = syscall(SYS_landlock_create_ruleset,
@@ -351,6 +364,7 @@ sandbox_enter(int src_fd)
}
(void)src_fd;
+
#else
# error ENABLE_SANDBOX is defined but no sandboxing method was found.
#endif
@@ -367,6 +381,7 @@ error:
if (errno == ENOSYS)
return;
#endif
+
my_errorf("Failed to enable the sandbox");
exit(EXIT_FAILURE);
}
@@ -389,9 +404,15 @@ main(int argc, char **argv)
}
#endif
-#ifdef HAVE_LINUX_LANDLOCK_H
- // Prevent the process from gaining new privileges. The return
- // is ignored to keep compatibility with old kernels.
+#ifdef HAVE_LINUX_LANDLOCK
+ // Prevent the process from gaining new privileges. This must be done
+ // before landlock_restrict_self(2) but since we will never need new
+ // privileges, this call can be done here already.
+ //
+ // This is supported since Linux 3.5. Ignore the return value to
+ // keep compatibility with old kernels. landlock_restrict_self(2)
+ // will fail if the no_new_privs attribute isn't set, thus if prctl()
+ // fails here the error will still be detected when it matters.
(void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
#endif
@@ -438,19 +459,18 @@ main(int argc, char **argv)
}
}
#ifdef ENABLE_SANDBOX
- // Enable the sandbox for the last file. When the
- // strict sandbox is enabled the process can no
- // longer open additional files. It is likely that
- // the most common way to use xzdec is to
- // decompress a single file, so this fully protects
- // most use cases.
+ // Enable the strict sandbox for the last file.
+ // Then the process can no longer open additional
+ // files. The typical xzdec use case is to decompress
+ // a single file so this way the strictest sandboxing
+ // is used in most cases.
if (optind == argc - 1)
sandbox_enter(fileno(src_file));
#endif
uncompress(&strm, src_file, src_name);
if (src_file != stdin)
- fclose(src_file);
+ (void)fclose(src_file);
} while (++optind < argc);
}