Compare commits

...

309 Commits
master ... v5.4

Author SHA1 Message Date
Jia Tan 6e8732c5a3 Bump version and soname for 5.4.6. 2024-01-26 19:41:20 +08:00
Jia Tan 6532f55caa Add NEWS for 5.4.6. 2024-01-26 18:54:24 +08:00
Jia Tan 8b1a2798ad Docs: Update .xz file format specification to 1.2.0.
The new RISC-V filter was added to the specification, in addition to
updating the specification URL.
2024-01-24 21:13:55 +08:00
Jia Tan 55285900b3 xz: Update website URLs in the man pages. 2024-01-24 21:13:52 +08:00
Jia Tan a670f69521 liblzma: Update website URL. 2024-01-24 21:13:49 +08:00
Jia Tan 05aeda9612 Docs: Update website URLs. 2024-01-24 21:13:43 +08:00
Jia Tan 3cc54f1c0b Build: Update website URL. 2024-01-24 21:13:10 +08:00
Jia Tan 82f5515de6 Translations: Update the French translation. 2023-12-22 20:02:06 +08:00
Jia Tan 9e96ca8c48 xz: Add a comment to Capsicum sandbox setup.
This comment is repeated in xzdec.c to help remind us why all the
capabilities are removed from stdin in certain situations.
2023-12-22 20:02:06 +08:00
Jia Tan 8191720eac liblzma: Set all values in lzma_lz_encoder to NULL after allocation.
The first member of lzma_lz_encoder doesn't necessarily need to be set
to NULL since it will always be set before anything tries to use it.
However the function pointer members must be set to NULL since other
functions rely on this NULL value to determine if this behavior is
supported or not.

This fixes a somewhat serious bug, where the options_update() and
set_out_limit() function pointers are not set to NULL. This seems to
have been forgotten since these function pointers were added many years
after the original two (code() and end()).

The problem is that by not setting this to NULL we are relying on the
memory allocation to zero things out if lzma_filters_update() is called
on a LZMA1 encoder. The function pointer for set_out_limit() is less
serious because there is not an API function that could call this in an
incorrect way. set_out_limit() is only called by the MicroLZMA encoder,
which must use LZMA1 where set_out_limit() is always set. Its currently
not possible to call set_out_limit() on an LZMA2 encoder at this time.

So calling lzma_filters_update() on an LZMA1 encoder had undefined
behavior since its possible that memory could be manipulated so the
options_update member pointed to a different instruction sequence.

This is unlikely to be a bug in an existing application since it relies
on calling lzma_filters_update() on an LZMA1 encoder in the first place.
For instance, it does not affect xz because lzma_filters_update() can
only be used when encoding to the .xz format.
2023-12-22 20:02:06 +08:00
Jia Tan 0ba5dd7ba1 liblzma: Tweak a comment. 2023-12-22 20:02:06 +08:00
Jia Tan 27ab54af84 liblzma: Make parameter names in function definition match declaration.
lzma_raw_encoder() and lzma_raw_encoder_init() used "options" as the
parameter name instead of "filters" (used by the declaration). "filters"
is more clear since the parameter represents the list of filters passed
to the raw encoder, each of which contains filter options.
2023-12-22 20:02:06 +08:00
Jia Tan 019afd72e0 liblzma: Improve lzma encoder init function consistency.
lzma_encoder_init() did not check for NULL options, but
lzma2_encoder_init() did. This is more of a code style improvement than
anything else to help make lzma_encoder_init() and lzma2_encoder_init()
more similar.
2023-12-22 20:02:06 +08:00
Jia Tan 6af9a4cbe5 Docs: Update repository URL in Changelog. 2023-12-22 20:02:06 +08:00
Jia Tan 3f51a4415a Tests: Silence -Wsign-conversion warning on GCC version < 10.
Since GCC version 10, GCC no longer complains about simple implicit
integer conversions with Arithmetic operators.

For instance:

    uint8_t a = 5;
    uint32_t b = a + 5;

Give a warning on GCC 9 and earlier but this:

    uint8_t a = 5;
    uint32_t b = (a + 5) * 2;

Gives a warning with GCC 10+.
2023-12-22 20:02:06 +08:00
Jia Tan 932f02990c Update THANKS. 2023-12-22 20:02:06 +08:00
Kian-Meng Ang b26d5d547f Tests: Fix typos 2023-12-22 20:02:06 +08:00
Jia Tan 7dc466d621 xz: Use is_tty() in message.c. 2023-12-22 20:02:06 +08:00
Jia Tan 0ecfaa6df9 xz: Create separate is_tty() function.
The new is_tty() will report if a file descriptor is a terminal or not.
On POSIX systems, it is a wrapper around isatty(). However, the native
Windows implementation of isatty() will return true for all character
devices, not just terminals. So is_tty() has a special case for Windows
so it can use alternative Windows API functions to determine if a file
descriptor is a terminal.

This fixes a bug with MSVC and MinGW-w64 builds that refused to read from
or write to non-terminal character devices because xz thought it was a
terminal. For instance:

    xz foo -c > /dev/null

would fail because /dev/null was assumed to be a terminal.
2023-12-22 20:02:06 +08:00
Jia Tan 9a300c9068 tuklib_integer: Fix typo discovered by codespell.
Based on internet dictionary searches, 'choise' is an outdated spelling
of 'choice'.
2023-12-22 20:02:06 +08:00
Jia Tan 9b469da8f3 Tests: Fix typo in a comment. 2023-12-22 20:02:06 +08:00
Jia Tan afcb30fcad Tests: Create test_suffix.sh.
This tests some complicated interactions with the --suffix= option.
The suffix option must be used with --format=raw, but can optionally
be used to override the default .xz suffix.

This test also verifies some recent bugs have been correctly solved
and to hopefully avoid further regressions in the future.
2023-12-22 20:02:06 +08:00
Jia Tan 87c956d4c4 xz: Fix suffix check.
The suffix refactor done in 99575947a5
had a small regression where raw format compression to standard out
failed if a suffix was not set. In this case, setting the suffix did
not make sense since a file is not created.

Now, xz should only fail when a suffix is not provided when it is
actually needed.

For instance:

    echo "foo" | xz --format=raw --lzma2 | wc -c

does not need a suffix check since it creates no files. But:

    xz --format=raw --lzma2 --suffix=.bar foo

Needs the suffix to be set since it must create foo.bar.
2023-12-22 20:02:06 +08:00
Jia Tan 84196e8c09 liblzma: Add missing comments to lz_encoder.h. 2023-12-22 20:02:03 +08:00
Jia Tan 49053c0a64 Bump version and soname for 5.4.5. 2023-11-01 20:26:15 +08:00
Jia Tan 84c0cfc556 Add NEWS for 5.4.5. 2023-11-01 20:26:12 +08:00
Lasse Collin d90ed84db9 liblzma: Fix compilation of fastpos_tablegen.c.
The macro lzma_attr_visibility_hidden has to be defined to make
fastpos.h usable. The visibility attribute is irrelevant to
fastpos_tablegen.c so simply #define the macro to an empty value.

fastpos_tablegen.c is never built by the included build systems
and so the problem wasn't noticed earlier. It's just a standalone
program for generating fastpos_table.c.

Fixes: https://github.com/tukaani-project/xz/pull/69
Thanks to GitHub user Jamaika1.
2023-11-01 20:22:15 +08:00
Jia Tan 9b1268538b Build: Fix text wrapping in an output message. 2023-10-31 21:55:21 +08:00
Lasse Collin 068ee436f4 liblzma: Use lzma_always_inline in memcmplen.h. 2023-10-31 18:44:59 +08:00
Lasse Collin 6cdf0a7b79 liblzma: #define lzma_always_inline in common.h. 2023-10-31 18:44:59 +08:00
Lasse Collin 33daad3961 liblzma: Use lzma_attr_visibility_hidden on private extern declarations.
These variables are internal to liblzma and not exposed in the API.
2023-10-31 18:44:59 +08:00
Lasse Collin 6961a5ac7d liblzma: #define lzma_attr_visibility_hidden in common.h.
In ELF shared libs:

-fvisibility=hidden affects definitions of symbols but not
declarations.[*] This doesn't affect direct calls to functions
inside liblzma as a linker can replace a call to lzma_foo@plt
with a call directly to lzma_foo when -fvisibility=hidden is used.

[*] It has to be like this because otherwise every installed
    header file would need to explictly set the symbol visibility
    to default.

When accessing extern variables that aren't defined in the
same translation unit, compiler assumes that the variable has
the default visibility and thus indirection is needed. Unlike
function calls, linker cannot optimize this.

Using __attribute__((__visibility__("hidden"))) with the extern
variable declarations tells the compiler that indirection isn't
needed because the definition is in the same shared library.

About 15+ years ago, someone told me that it would be good if
the CRC tables would be defined in the same translation unit
as the C code of the CRC functions. While I understood that it
could help a tiny amount, I didn't want to change the code because
a separate translation unit for the CRC tables was needed for the
x86 assembly code anyway. But when visibility attributes are
supported, simply marking the extern declaration with the
hidden attribute will get identical result. When there are only
a few affected variables, this is trivial to do. I wish I had
understood this back then already.
2023-10-31 18:44:59 +08:00
Lasse Collin 5b9e167649 liblzma: Refer to MinGW-w64 instead of MinGW in the API headers.
MinGW (formely a MinGW.org Project, later the MinGW.OSDN Project
at <https://osdn.net/projects/mingw/>) has GCC 9.2.0 as the
most recent GCC package (released 2021-02-02). The project might
still be alive but majority of people have switched to MinGW-w64.
Thus it seems clearer to refer to MinGW-w64 in our API headers too.
Building with MinGW is likely to still work but I haven't tested it
in the recent years.
2023-10-31 18:44:59 +08:00
Lasse Collin 36fabdbe67 CMake: Use -D_FILE_OFFSET_BITS=64 if (and only if) needed.
A CMake option LARGE_FILE_SUPPORT is created if and only if
-D_FILE_OFFSET_BITS=64 affects sizeof(off_t).

This is needed on many 32-bit platforms and even with 64-bit builds
with MinGW-w64 to get support for files larger than 2 GiB.
2023-10-31 18:44:59 +08:00
Lasse Collin 989c8c354c CMake: Generate and install liblzma.pc if not using MSVC.
Autotools based build uses -pthread and thus adds it to Libs.private
in liblzma.pc. CMake doesn't use -pthread at all if pthread functions
are available in libc so Libs.private doesn't get -pthread either.
2023-10-31 18:44:59 +08:00
Lasse Collin 983f3b458d CMake: Rearrange the PACKAGE_ variables.
The windres workaround now replaces spaces with \x20 so
the package name isn't repeated.

These changes will help with creation of liblzma.pc.
2023-10-31 18:44:59 +08:00
Lasse Collin 4083c8e950 liblzma: Add Cflags.private to liblzma.pc.in for MSYS2.
It properly adds -DLZMA_API_STATIC when compiling code that
will be linked against static liblzma. Having it there on
systems other than Windows does no harm.

See: https://www.msys2.org/docs/pkgconfig/
2023-10-31 18:44:59 +08:00
Lasse Collin 661549ecb7 CMake: Create liblzma.def when building liblzma.dll with MinGW-w64. 2023-10-31 18:44:59 +08:00
Lasse Collin 0e546eb4da CMake: Change one CMAKE_CURRENT_SOURCE_DIR to CMAKE_CURRENT_LIST_DIR.
In this case they have identical values.
2023-10-31 18:44:59 +08:00
Lasse Collin da4d04e4d6 CMake/Windows: Fix the import library filename.
Both PREFIX and IMPORT_PERFIX have to be set to "" to get
liblzma.dll and liblzma.dll.a.
2023-10-31 18:44:59 +08:00
Lasse Collin 007558a358 CMake: Don't shadow the cache entry ENABLE_THREADS with a normal variable.
Using set(ENABLE_THREADS "posix") is confusing because it sets
a new normal variable and leaves the cache entry with the same
name unchanged. The intent wasn't to change the cache entry so
this switches to a different variable name.
2023-10-31 18:44:59 +08:00
Lasse Collin 7d01de67ee CMake: Edit threading related messages.
It's mostly to change from "thread method" to "threading method".
2023-10-31 18:44:59 +08:00
Lasse Collin f8edcf3da6 CMake: Use FATAL_ERROR if user-supplied options aren't understood.
This way typos are caught quickly and compounding error messages
are avoided (a single typo could cause more than one error).

This keeps using SEND_ERROR when the system is lacking a feature
(like threading library or sandboxing method). This way the whole
configuration log will be generated in case someone wishes to
report a problem upstream.
2023-10-31 18:44:59 +08:00
Jia Tan 1695021e4a CMake: Add ALLOW_CLMUL_CRC option to enable/disable CLMUL.
The option is enabled by default, but will only be visible to a user
listing cache variables or using a CMake GUI application if the
immintrin.h header file is found.

This mirrors our Autotools build --disable-clmul-crc functionality.
2023-10-31 18:44:59 +08:00
Lasse Collin 5056bc5107 tuklib_integer: Revise unaligned reads and writes on strict-align archs.
In XZ Utils context this doesn't matter much because
unaligned reads and writes aren't used in hot code
when TUKLIB_FAST_UNALIGNED_ACCESS isn't #defined.
2023-10-31 18:44:59 +08:00
Lasse Collin 9e14743ee5 tuklib_integer: Add missing write64be and write64le fallback functions. 2023-10-31 18:44:59 +08:00
Jia Tan 4cc91ceb39 Build: Update visibility.m4 from Gnulib.
Updating from version 6 -> 8 from upstream. Declarations for variables
and function bodies were added to avoid unnecessary failures with
-Werror.
2023-10-31 18:44:59 +08:00
Lasse Collin 1824a6007c Update THANKS. 2023-10-31 18:44:59 +08:00
Jia Tan 8fdc71a27d CMake: Rename xz and man page symlink custom targets.
The Ninja Generator for CMake cannot have a custom target and its
BYPRODUCTS have the same name. This has prevented Ninja builds on
Unix-like systems since the xz symlinks were introduced in
80a1a8bb83.
2023-10-31 18:44:59 +08:00
Lasse Collin 38171492de CMake: Fix Windows build with Clang/LLVM 17.
llvm-windres 17.0.0 has more accurate emulation of GNU windres, so
the hack for GNU windres must now be used with llvm-windres too.

LLVM 16.0.6 has the old behavior and there likely won't be more
16.x releases. So we can simply check for >= 17.0.0.

The workaround must not be used with Clang that is acting in
MSVC mode. This checks for the known environments that need
the workaround instead of using "NOT MSVC".

See also:
2bcc0fdc58
2023-10-31 18:44:59 +08:00
Jia Tan 1bce6fe483 liblzma: Avoid compiler warning without creating extra symbol.
When the generic fast crc64 method is used, then we omit
lzma_crc64_table[][].

The C standards don't allow an empty translation unit which can be
avoided by declaring something, without exporting any symbols.
2023-10-31 18:44:59 +08:00
Lasse Collin dce95a593e Build: Update the comment about -Werror usage in checks. 2023-10-31 18:44:59 +08:00
Lasse Collin f3c32762ae Build: Fix underquoted AC_LANG_SOURCE.
It made no practical difference in this case.
2023-10-31 18:44:59 +08:00
Lasse Collin 7dd57f2f2c Build: Silence Autoconf warning.
There was a use of AC_COMPILE_IFELSE that didn't use
AC_LANG_SOURCE and Autoconf warned about this. The omission
had been intentional but it turned out that this didn't do
what I thought it would.

Autoconf 2.71 manual gives an impression that AC_LANG_SOURCE
inserts all #defines that have been made with AC_DEFINE so
far (confdefs.h). The idea was that omitting AC_LANG_SOURCE
would mean that only the exact code included in the
AC_COMPILE_IFELSE call would be compiled.

With C programs this is not true: the #defines get added without
AC_LANG_SOURCE too. There seems to be no neat way to avoid this.
Thus, with the C language at least, adding AC_LANG_SOURCE makes
no other difference than silencing a warning from Autoconf. The
generated "configure" remains identical. (Docs of AC_LANG_CONFTEST
say that the #defines have been inserted since Autoconf 2.63b and
that AC_COMPILE_IFELSE uses AC_LANG_CONFTEST. So the behavior is
documented if one also reads the docs of macros that one isn't
calling directly.)

Any extra code, including #defines, can cause problems for
these two tests because these tests must use -Werror.
CC=clang CFLAGS=-Weverything is the most extreme example.
It enables -Wreserved-macro-identifier which warns about
It's possible to write a test file that passes -Weverything but
it becomes impossible when Autoconf inserts confdefs.h.

So this commit adds AC_LANG_SOURCE to silence Autoconf warnings.
A different solution is needed for -Werror tests.
2023-10-31 18:44:59 +08:00
Jia Tan edec253e41 Build: Remove Gnulib dependency from tests.
The tests do not use any Gnulib replacements so they do not need to link
libgnu.a or have /lib in the include path.
2023-10-31 18:44:59 +08:00
Jia Tan 46cb133ce7 CMake: Remove /lib from tests include path.
The tests never included anything from /lib, so this was not needed.
2023-10-31 18:44:59 +08:00
Lasse Collin 4ae13cfe0d sysdefs.h: Update the comment about __USE_MINGW_ANSI_STDIO. 2023-10-31 18:44:59 +08:00
Lasse Collin 660c8c29e5 xz: Windows: Don't (de)compress to special files like "con" or "nul".
Before this commit, the following writes "foo" to the
console and deletes the input file:

    echo foo | xz > con_xz
    xz --suffix=_xz --decompress con_xz

It cannot happen without --suffix because names like con.xz
are also special and so attempting to decompress con.xz
(or compress con to con.xz) will already fail when opening
the input file.

Similar thing is possible when compressing. The following
writes to "nul" and the input file "n" is deleted.

    echo foo | xz > n
    xz --suffix=ul n

Now xz checks if the destination is a special file before
continuing. DOS/DJGPP version had a check for this but
Windows (and OS/2) didn't.
2023-10-31 18:44:59 +08:00
Lasse Collin b7ce6e8078 CMake: Wrap two overlong lines that are possible to wrap. 2023-10-31 18:44:59 +08:00
Lasse Collin 1595f454d5 CMake: Add a comment about threads on Cygwin. 2023-10-31 18:44:59 +08:00
Lasse Collin 5be6275f19 CMake: Bump maximum policy version to 3.27.
There are several new policies. CMP0149 may affect the Windows SDK
version that CMake will choose by default. The new behavior is more
predictable, always choosing the latest SDK version by default.

The other new policies shouldn't affect this package.
2023-10-31 18:44:58 +08:00
Lasse Collin e515643d75 Doxygen: Add more C macro names to PREDEFINED. 2023-10-31 01:03:25 +08:00
Lasse Collin e3478ae4f3 liblzma: Move a few __attribute__ uses in function declarations.
The API headers have many attributes but these were left
as is for now.
2023-10-31 01:03:25 +08:00
Lasse Collin b71b8922ef xz, xzdec, lzmainfo: Use tuklib_attr_noreturn.
For compatibility with C23's [[noreturn]], tuklib_attr_noreturn
must be at the beginning of declaration (before "extern" or
"static", and even before any GNU C's __attribute__).

This commit also moves all other function attributes to
the beginning of function declarations. "extern" is kept
at the beginning of a line so the attributes are listed on
separate lines before "extern" or "static".
2023-10-31 01:03:25 +08:00
Lasse Collin 359e5c6cb1 Remove incorrect uses of __attribute__((__malloc__)).
xrealloc() is obviously incorrect, modern GCC docs even
mention realloc() as an example where this attribute
cannot be used.

liblzma's lzma_alloc() and lzma_alloc_zero() would be
correct uses most of the time but custom allocators
may use a memory pool or otherwise hold the pointer
so aliasing issues could happen in theory.

The xstrdup() case likely was correct but I removed it anyway.
Now there are no __malloc__ attributes left in the code.
The allocations aren't in hot paths so this should make
no practical difference.
2023-10-31 01:03:25 +08:00
Lasse Collin 589b4cba22 Update THANKS. 2023-10-31 01:03:25 +08:00
Lasse Collin 43728ed226 Update THANKS. 2023-10-31 01:03:25 +08:00
Lasse Collin caf00e0988 liblzma: Mark crc64_clmul() with __attribute__((__no_sanitize_address__)).
Thanks to Agostino Sarubbo.
Fixes: https://github.com/tukaani-project/xz/issues/62
2023-10-31 01:03:25 +08:00
Jia Tan a70e96d2da CMake: Fix time.h checks not running on second CMake run.
If CMake was configured more than once, HAVE_CLOCK_GETTIME and
HAVE_CLOCK_MONOTONIC would not be set as compile definitions. The check
for librt being needed to provide HAVE_CLOCK_GETTIME was also
simplified.
2023-10-31 01:03:25 +08:00
Jia Tan d5275d83bd CMake: Fix unconditionally defining HAVE_CLOCK_MONOTONIC.
If HAVE_CLOCK_GETTIME was defined, then HAVE_CLOCK_MONOTONIC was always
added as a compile definition even if the check for it failed.
2023-10-31 01:03:25 +08:00
Lasse Collin 1f6e7c68fb xz: Refactor thousand separator detection and disable it on MSVC.
Now the two variations of the format strings are created with
a macro, and the whole detection code can be easily disabled
on platforms where thousand separator formatting is known to
not work (MSVC has no support, and on DJGPP 2.05 it can have
problems in some cases).
2023-10-31 01:03:25 +08:00
Lasse Collin ef71f83973 xz: Fix a too relaxed assertion and remove uses of SSIZE_MAX.
SSIZE_MAX isn't readily available on MSVC. Removing it means
that there is one thing less to worry when porting to MSVC.
2023-10-31 01:03:25 +08:00
Jia Tan cf8ba7c3a8 Tests: Improve invalid unpadded size check in test_lzma_index_append().
This check was extended to test the code added to fix a failing assert
in 68bda971bb.
2023-10-31 01:02:59 +08:00
Jia Tan 4a4180ce74 Tests: Improve comments in test_index.c. 2023-10-26 06:22:24 +08:00
Jia Tan 4b23b84b89 Update THANKS. 2023-10-26 06:22:24 +08:00
Jia Tan 773f1e8622 liblzma: Update assert in vli_ceil4().
The argument to vli_ceil4() should always guarantee the return value
is also a valid lzma_vli. Thus the highest three valid lzma_vli values
are invalid arguments. All uses of the function ensure this so the
assert is updated to match this.
2023-10-26 06:22:24 +08:00
Jia Tan 68bda971bb liblzma: Add overflow check for Unpadded size in lzma_index_append().
This was not a security bug since there was no path to overflow
UINT64_MAX in lzma_index_append() or when it calls index_file_size().
The bug was discovered by a failing assert() in vli_ceil4() when called
from index_file_size() when unpadded_sum (the sum of the compressed size
of current Stream and the unpadded_size parameter) exceeds LZMA_VLI_MAX.

Previously, the unpadded_size parameter was checked to be not greater
than UNPADDED_SIZE_MAX, but no check was done once compressed_base was
added.

This could not have caused an integer overflow in index_file_size() when
called by lzma_index_append(). The calculation for file_size breaks down
into the sum of:

- Compressed base from all previous Streams
- 2 * LZMA_STREAM_HEADER_SIZE (size of the current Streams header and
  footer)
- stream_padding (can be set by lzma_index_stream_padding())
- Compressed base from the current Stream
- Unpadded size (parameter to lzma_index_append())

The sum of everything except for Unpadded size must be less than
LZMA_VLI_MAX. This is guarenteed by overflow checks in the functions
that can set these values including lzma_index_stream_padding(),
lzma_index_append(), and lzma_index_cat(). The maximum value for
Unpadded size is enforced by lzma_index_append() to be less than or
equal UNPADDED_SIZE_MAX. Thus, the sum cannot exceed UINT64_MAX since
LZMA_VLI_MAX is half of UINT64_MAX.

Thanks to Joona Kannisto for reporting this.
2023-10-26 06:22:24 +08:00
Jia Tan b41bb79c60 Translations: Update the Esperanto translation. 2023-10-26 06:22:24 +08:00
Jia Tan 6614e6d4bf Docs: Update INSTALL for --enable-threads method win95.
The Autotools build allows win95 threads and --enable-small together now
if the compiler supports __attribute__((__constructor__)).
2023-10-26 06:22:24 +08:00
Jia Tan bfb623ad96 CMake: Conditionally allow win95 threads and --enable-small. 2023-10-26 06:22:24 +08:00
Jia Tan e919ebb29a Build: Conditionally allow win95 threads and --enable-small.
When the compiler supports __attribute__((__constructor__))
mythread_once() is never used, even with --enable-small. A configuration
with win95 threads and --enable-small will compile and be thread safe so
it can be allowed.

This isn't a very common configuration since MSVC does not support
__attribute__((__constructor__)), but MINGW32 and CLANG32 environments
for MSYS2 can use win95 threads and have
__attribute__((__constructor__)) support.
2023-10-26 06:22:24 +08:00
Jamaika1 c0c0cd4a48 mythread.h: Fix typo error in Vista threads mythread_once().
The "once_" variable was accidentally referred to as just "once". This
prevented building with Vista threads when
HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR was not defined.
2023-10-26 06:22:24 +08:00
Jia Tan d93fbefcc4 Tests: Style fixes to test_lzip_decoder.c. 2023-10-26 06:22:24 +08:00
Jia Tan 65981d8e45 Translations: Update the Chinese (simplified) translation. 2023-10-26 06:22:22 +08:00
Lasse Collin a108ed5891 xz: Omit an empty paragraph on the man page. 2023-08-02 17:39:50 +03:00
Jia Tan 03c51c5c08 Bump version and soname for 5.4.4. 2023-08-02 20:32:20 +08:00
Jia Tan d7fa3f1b58 Add NEWS for 5.4.4. 2023-08-02 20:30:54 +08:00
Lasse Collin 6a1093c000 build-aux/manconv.sh: Fix US-ASCII and UTF-8 output.
groff defaults to SGR escapes. Using -P-c passes -c to grotty
which restores the old behavior. Perhaps there is a better way to
get pure plain text output but this works for now.
2023-08-02 15:20:31 +03:00
Lasse Collin f6f9f5651a Update THANKS. 2023-08-01 19:10:58 +03:00
Lasse Collin 0dd83ba876 Update THANKS. 2023-08-01 18:44:02 +03:00
ChanTsune 4170a80785 mythread.h: Disable signal functions in builds targeting Wasm + WASI.
signal.h in WASI SDK doesn't currently provide sigprocmask()
or sigset_t. liblzma doesn't need them so this change makes
liblzma and xzdec build against WASI SDK. xz doesn't build yet
and the tests don't either as tuktest needs setjmp() which
isn't (yet?) implemented in WASI SDK.

Closes: https://github.com/tukaani-project/xz/pull/57
See also: https://github.com/tukaani-project/xz/pull/56

(The original commit was edited a little by Lasse Collin.)
2023-08-01 18:44:02 +03:00
Dimitri Papadopoulos Orfanos 0db6fbe0be Docs: Fix typos found by codespell 2023-08-01 18:44:02 +03:00
Jia Tan 84a3a1f4e4 Update .gitignore. 2023-08-01 18:42:23 +03:00
Jia Tan 962b3d41e0 CMake: Conditionally allow the creation of broken symlinks.
The CMake build will try to create broken symlinks on Unix and Unix-like
platforms. Cygwin and MSYS2 are Unix-like, but may not be able to create
broken symlinks. The value of the CYGWIN or MSYS environment variables
determine if broken symlinks are valid.

The default for MSYS2 does not allow for broken symlinks, so the CMake
build has been broken for MSYS2 since commit
80a1a8bb83.
2023-08-01 18:41:42 +03:00
Jia Tan 19899340cf liblzma: Prevent an empty translation unit in Windows builds.
To workaround Automake lacking Windows resource compiler support, an
empty source file is compiled to overwrite the resource files for static
library builds. Translation units without an external declaration are
not allowed by the C standard and result in a warning when used with
-Wempty-translation-unit (Clang) or -pedantic (GCC).
2023-08-01 18:41:42 +03:00
Jia Tan ef7fbe8393 Tests: Skip .lz files in test_files.sh if not configured.
Previously if the lzip decoder was not configured then test_files.sh
would pass the lzip tests instead of skipping them.
2023-08-01 18:41:42 +03:00
Jia Tan e49815ba7a Tests: Add ARM64 filter test to test_compress.sh. 2023-08-01 18:41:23 +03:00
Jia Tan db5b57b827 Translations: Update the Vietnamese translation. 2023-07-31 21:26:52 +08:00
Jia Tan e6ba501408 Translations: Update the Croatian translation. 2023-07-31 21:25:46 +08:00
Jia Tan 82657a1f10 Translations: Update the Korean man page translations. 2023-07-31 21:25:41 +08:00
Jia Tan fab35907d1 Translations: Update the Korean translation. 2023-07-31 21:25:36 +08:00
Jia Tan f530fe1964 Translations: Update the Polish translation. 2023-07-31 21:25:33 +08:00
Jia Tan 10b3500cc2 Translations: Update the German man page translations. 2023-07-31 21:25:30 +08:00
Jia Tan 3d14e8a34d Translations: Update the German translation. 2023-07-31 21:25:27 +08:00
Jia Tan bdcc180a2d Translations: Update the Chinese (simplified) translation. 2023-07-31 21:25:23 +08:00
Jia Tan 844240350d Translations: Update the Swedish translation. 2023-07-31 21:25:20 +08:00
Jia Tan bdc7952bcf Translations: Update the Ukrainian man page translations. 2023-07-31 21:25:16 +08:00
Jia Tan 143396e070 Translations: Update the Ukrainian translation. 2023-07-31 21:25:13 +08:00
Jia Tan 1b8146d64e Translations: Update the Spanish translation. 2023-07-31 21:25:09 +08:00
Jia Tan f947ce09d7 Translations: Update the Romanian translation. 2023-07-31 21:25:05 +08:00
Jia Tan f681301a36 Translations: Update the Romanian man page translations. 2023-07-31 21:24:58 +08:00
Jia Tan 8bc3146c6b xz: Update man page Authors and date. 2023-07-18 23:24:02 +08:00
Jia Tan c2905540ef xz: Slight reword in xz man page for consistency.
Changed will print => prints in xz --robot --version description to
match --robot --info-memory description.
2023-07-18 23:24:02 +08:00
Jia Tan 2600d33524 liblzma: Improve comment in string_conversion.c.
The comment used "flag" when referring to decoder options. Just
referring to them as options is more clear and consistent.
2023-07-18 23:24:02 +08:00
Jia Tan 98fc14541e liblzma: Reword lzma_str_list_filters() documentation.
Reword "options required" to "options read". The previous wording
may have suggested that the options listed were all required when
the filters are used for encoding or decoding. Now it should be
more clear that the options listed are the ones relevant for
encoding or decoding.
2023-07-18 23:21:23 +08:00
Lasse Collin 1ac79b4cba xz: Translate the second "%s: " in message.c since French needs "%s : ".
This string is used to print a filename when using "xz -v" and
stderr isn't a terminal.
2023-07-18 17:41:55 +03:00
Lasse Collin 97851be2c6 xz: Make "%s: %s" translatable because French needs "%s : %s". 2023-07-18 14:37:07 +03:00
Lasse Collin b406828a6d liblzma: Tweak #if condition in memcmplen.h.
Maybe ICC always #defines _MSC_VER on Windows but now
it's very clear which code will get used.
2023-07-18 14:03:08 +03:00
Lasse Collin ef4a07ad94 liblzma: Omit unnecessary parenthesis in a preprocessor directive. 2023-07-18 14:03:08 +03:00
Jia Tan 64ee0caaea liblzma: Prevent warning for MSYS2 Windows build.
In lzma_memcmplen(), the <intrin.h> header file is only included if
_MSC_VER and _M_X64 are both defined but _BitScanForward64() was
previously used if _M_X64 was defined. GCC for MSYS2 defines _M_X64 but
not _MSC_VER so _BitScanForward64() was used without including
<intrin.h>.

Now, lzma_memcmplen() will use __builtin_ctzll() for MSYS2 GCC builds as
expected.
2023-07-18 14:03:08 +03:00
Jia Tan ba17705764 Docs: Add a new section to INSTALL for Tests.
The new Tests section describes basic information about the tests, how
to run them, and important details when cross compiling. We have had a
few questions about how to compile the tests without running them, so
hopefully this information will help others with the same question in the
future.

Fixes: https://github.com/tukaani-project/xz/issues/54
2023-07-18 13:28:51 +03:00
Jia Tan 0745b900fa Docs: Update README.
This adds an entry to "Other implementations of the .xz format" for
XZ for Java.
2023-07-18 13:28:51 +03:00
Jia Tan c972d44103 xz: Fix typo in man page.
The Memory limit information section described three output
columns when it actually has six. This was reworded to
"multiple" to make it more future proof.
2023-07-18 13:27:46 +03:00
Jia Tan 6e21f1b4e2 Tests: Improve feature testing for skipping.
Fixed a bug where test_compress_* would all fail if arm64 or armthumb
filters were enabled for compression but arm was disabled. Since the
grep tests only checked for "define HAVE_ENCODER_ARM", this would match
on HAVE_ENCODER_ARM64 or HAVE_ENCODER_ARMTHUMB.

Now the config.h feature test requires " 1" at the end to prevent the
prefix problem. have_feature() was also updated for this even though
there were known current bugs affecting it. This is just in case future
features have a similar prefix problem.
2023-07-18 13:26:48 +03:00
Jia Tan 26c37d290c Translations: Update the Chinese (traditional) translation. 2023-07-18 13:26:48 +03:00
Jia Tan 2ec65181e2 Translations: Update the Vietnamese translation. 2023-07-18 13:26:48 +03:00
Jia Tan c44c7e7590 Tests: Fix memory leaks in test_index.
Several tests were missing calls to lzma_index_end() to clean up the
lzma_index structs. The memory leaks were discovered by using
-fsanitize=address with GCC.
2023-07-18 13:26:48 +03:00
Jia Tan b9499c94fc Tests: Fix memory leaks in test_block_header.
test_block_header was not properly freeing the filter options between
calls to lzma_block_header_decode(). The memory leaks were discovered by
using -fsanitize=address with GCC.
2023-07-18 13:26:48 +03:00
Jia Tan 1155471651 liblzma: Prevent uninitialzed warning in mt stream encoder.
This change only impacts the compiler warning since it was impossible
for the wait_abs struct in stream_encode_mt() to be used before it was
initialized since mythread_condtime_set() will always be called before
mythread_cond_timedwait().

Since the mythread.h code is different between the POSIX and
Windows versions, this warning was only present on Windows builds.

Thanks to Arthur S for reporting the warning and providing an initial
patch.
2023-07-18 13:20:16 +03:00
Jia Tan 62dd1c9bf0 Update THANKS. 2023-07-18 13:03:12 +03:00
Benjamin Buch d04eb78ab3 CMake: Protects against double find_package
Boost iostream uses `find_package` in quiet mode and then again uses
`find_package` with required. This second call triggers a
`add_library cannot create imported target "LibLZMA::LibLZMA"
because another target with the same name already exists.`

This can simply be fixed by skipping the alias part on secondary
`find_package` runs.
2023-07-18 13:02:02 +03:00
Jia Tan 12ea1fb297 Translations: Update the Esperanto translation. 2023-07-18 12:59:10 +03:00
Jia Tan a4d45c07c1 Translations: Update the Croatian translation. 2023-07-18 12:59:10 +03:00
Jia Tan f51b7bcea6 Translations: Update the Chinese (simplified) translation. 2023-07-18 12:59:10 +03:00
Jia Tan d5b81c19a7 Translations: Update German translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan 36860a3e30 Translations: Update the German translation. 2023-07-18 12:59:10 +03:00
Jia Tan f05641ef0d Translations: Update the Croatian translation. 2023-07-18 12:59:10 +03:00
Jia Tan b852f6f11d Translations: Update Korean translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan fdcb78fb6f Translations: Update the Korean translation. 2023-07-18 12:59:10 +03:00
Jia Tan 9e39cebe3c Translations: Update the Spanish translation. 2023-07-18 12:59:10 +03:00
Jia Tan 7a578d1d82 Translations: Update the Romanian translation. 2023-07-18 12:59:10 +03:00
Jia Tan 362320fea5 Translations: Update Romanian translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan 29c5a870be Translations: Update Ukrainian translation of man pages. 2023-07-18 12:59:10 +03:00
Jia Tan 5ee5757277 Translations: Update the Ukrainian translation. 2023-07-18 12:59:10 +03:00
Jia Tan dfc257bdb2 Translations: Update the Polish translation. 2023-07-18 12:59:10 +03:00
Jia Tan f6df4c4ab7 Translations: Update the Swedish translation. 2023-07-18 12:59:10 +03:00
Jia Tan 25da22e052 Translations: Update the Esperanto translation. 2023-07-18 12:59:09 +03:00
Jia Tan 4f57a9c991 liblzma: Adds lzma_nothrow to MicroLZMA API functions.
None of the liblzma functions may throw an exception, so this
attribute should be applied to all liblzma API functions.
2023-07-18 12:48:53 +03:00
Jia Tan 238b4e5458 Translations: Update the Croatian translation. 2023-05-04 22:23:01 +08:00
Jia Tan 0cee63c3c6 Bump version and soname for 5.4.3. 2023-05-04 22:02:29 +08:00
Jia Tan 01f937ea9a Add NEWS for 5.4.3. 2023-05-04 22:02:29 +08:00
Lasse Collin e9b9ea9531 tuklib_integer.h: Fix a recent copypaste error in Clang detection.
Wrong line was changed in 7062348bf3.
Also, this has >= instead of == since ints larger than 32 bits would
work too even if not relevant in practice.
2023-05-03 22:55:54 +03:00
Jia Tan be6e39a862 Update THANKS. 2023-04-25 20:19:37 +08:00
Jia Tan 9e343a46cf Windows: Include <intrin.h> when needed.
Legacy Windows did not need to #include <intrin.h> to use the MSVC
intrinsics. Newer versions likely just issue a warning, but the MSVC
documentation says to include the header file for the intrinsics we use.

GCC and Clang can "pretend" to be MSVC on Windows, so extra checks are
needed in tuklib_integer.h to only include <intrin.h> when it will is
actually needed.
2023-04-25 20:19:32 +08:00
Jia Tan 12321a9390 tuklib_integer: Use __builtin_clz() with Clang.
Clang has support for __builtin_clz(), but previously Clang would
fallback to either the MSVC intrinsic or the regular C code. This was
discovered due to a bug where a new version of Clang required the
<intrin.h> header file in order to use the MSVC intrinsics.

Thanks to Anton Kochkov for notifying us about the bug.
2023-04-25 20:19:28 +08:00
Lasse Collin d1f0e01c39 liblzma: Update project maintainers in lzma.h.
AUTHORS was updated earlier, lzma.h was simply forgotten.
2023-04-25 20:19:21 +08:00
Jia Tan 8204c5d130 liblzma: Cleans up old commented out code. 2023-04-25 20:19:10 +08:00
Jia Tan 32980d1562 CMake: Update liblzma-config.cmake generation.
Now that the threading is configurable, the liblzma CMake package only
needs the threading library when using POSIX threads.
2023-04-25 20:18:55 +08:00
Jia Tan 023907faa9 CMake: Allows setting thread method.
The thread method is now configurable for the CMake build. It matches
the Autotools build by allowing ON (pick the best threading method),
OFF (no threading), posix, win95, and vista. If both Windows and
posix threading are both available, then ON will choose Windows
threading. Windows threading will also not use:

target_link_libraries(liblzma Threads::Threads)

since on systems like MinGW-w64 it would link the posix threads
without purpose.
2023-04-25 20:18:45 +08:00
Jia Tan ba176d77cb CMake: Only build xzdec if decoders are enabled. 2023-04-25 20:18:31 +08:00
Jia Tan c99d697df8 Build: Removes redundant check for LZMA1 filter support. 2023-04-25 20:18:18 +08:00
Lasse Collin 54a2fd8c85 CMake: Bump maximum policy version to 3.26.
It adds only one new policy related to FOLDERS which we don't use.
This makes it clear that the code is compatible with the policies
up to 3.26.
2023-04-25 20:18:08 +08:00
Jia Tan 622d0fdc02 CMake: Conditionally build xz list.* files if decoders are enabled. 2023-04-25 20:18:00 +08:00
Jia Tan 3e2dc523c5 CMake: Allow configuring features as cache variables.
This allows users to change the features they build either in
CMakeCache.txt or by using a CMake GUI. The sources built for
liblzma are affected by this too, so only the necessary files
will be compiled.
2023-04-25 20:17:49 +08:00
Lasse Collin 0c053f9733 Build: Add a comment that AC_PROG_CC_C99 is needed for Autoconf 2.69.
It's obsolete in Autoconf >= 2.70 and just an alias for AC_PROG_CC
but Autoconf 2.69 requires AC_PROG_CC_C99 to get a C99 compiler.
2023-03-21 14:14:35 +02:00
Lasse Collin 915d4f6058 Build: configure.ac: Use AS_IF and AS_CASE where required.
This makes no functional difference in the generated configure
(at least with the Autotools versions I have installed) but this
change might prevent future bugs like the one that was just
fixed in the commit 5a5bd7f871.
2023-03-21 14:14:35 +02:00
Lasse Collin b848c03958 Update THANKS. 2023-03-21 14:14:35 +02:00
Lasse Collin c775ba1602 Build: Fix --disable-threads breaking the building of shared libs.
This is broken in the releases 5.2.6 to 5.4.2. A workaround
for these releases is to pass EGREP='grep -E' as an argument
to configure in addition to --disable-threads.

The problem appeared when m4/ax_pthread.m4 was updated in
the commit 6629ed929c which
introduced the use of AC_EGREP_CPP. AC_EGREP_CPP calls
AC_REQUIRE([AC_PROG_EGREP]) to set the shell variable EGREP
but this was only executed if POSIX threads were enabled.
Libtool code also has AC_REQUIRE([AC_PROG_EGREP]) but Autoconf
omits it as AC_PROG_EGREP has already been required earlier.
Thus, if not using POSIX threads, the shell variable EGREP
would be undefined in the Libtool code in configure.

ax_pthread.m4 is fine. The bug was in configure.ac which called
AX_PTHREAD conditionally in an incorrect way. Using AS_CASE
ensures that all AC_REQUIREs get always run.

Thanks to Frank Busse for reporting the bug.
Fixes: https://github.com/tukaani-project/xz/issues/45
2023-03-21 14:14:35 +02:00
Lasse Collin 0673c9ec98 liblzma: Silence -Wsign-conversion in SSE2 code in memcmplen.h.
Thanks to Christian Hesse for reporting the issue.
Fixes: https://github.com/tukaani-project/xz/issues/44
2023-03-19 22:46:26 +02:00
Jia Tan 6ca8046ecb Bump version and soname for 5.4.2. 2023-03-18 23:22:06 +08:00
Jia Tan ce4f246600 Add NEWS for 5.4.2. 2023-03-18 22:24:08 +08:00
Lasse Collin 3634fe3307 Update the copy of GNU GPLv3 from gnu.org to COPYING.GPLv3. 2023-03-18 22:02:45 +08:00
Lasse Collin 97679d25ce Change a few HTTP URLs to HTTPS.
The xz man page timestamp was intentionally left unchanged.
2023-03-18 22:02:40 +08:00
Jia Tan 01a67e89a5 CMake: Fix typo in a comment. 2023-03-18 00:41:09 +08:00
Lasse Collin 5dca3f5cba Windows: build.bash: Copy liblzma API docs to the output package. 2023-03-18 00:39:32 +08:00
Lasse Collin ae252862b3 Windows: Add microlzma_*.c to the VS project files.
These should have been included in 5.3.2alpha already.
2023-03-17 20:19:38 +08:00
Lasse Collin 147d282cc3 CMake: Add microlzma_*.c to the build.
These should have been included in 5.3.2alpha already.
2023-03-17 20:19:34 +08:00
Lasse Collin 4523a5ee29 Build: Update comments about unaligned access to mention 64-bit. 2023-03-17 20:19:29 +08:00
Lasse Collin 82aacb4036 Tests: Update .gitignore. 2023-03-17 20:19:24 +08:00
Lasse Collin 5d022c2492 po4a/update-po: Display the script name consistently in error messages. 2023-03-17 20:19:20 +08:00
Jia Tan 8962951173 Doc: Rename Doxygen HTML doc directory name liblzma => api.
When the docs are installed, calling the directory "liblzma" is
confusing since multiple other files in the doc directory are for
liblzma. This should also make it more natural for distros when they
package the documentation.
2023-03-17 20:19:16 +08:00
Jia Tan 94097157fa liblzma: Remove note from lzma_options_bcj about the ARM64 exception.
This was left in by mistake since an early version of the ARM64 filter
used a different struct for its options.
2023-03-17 20:19:10 +08:00
Lasse Collin da16d0b73b COPYING: Add a note about the included Doxygen-generated HTML. 2023-03-17 20:19:02 +08:00
Jia Tan e57c74f9ef Doc: Update PACKAGERS with details about liblzma API docs install. 2023-03-17 20:18:57 +08:00
Jia Tan 7e2fa48bb7 liblzma: Add set lzma.h as the main page for Doxygen documentation.
The \mainpage command is used in the first block of comments in lzma.h.
This changes the previously nearly empty index.html to use the first
comment block in lzma.h for its contents.

lzma.h is no longer documented separately, but this is for the better
since lzma.h only defined a few macros that users do not need to use.
The individual API header files all have a disclaimer that they should
not be #included directly, so there should be no confusion on the fact
that lzma.h should be the only header used by applications.

Additionally, the note "See ../lzma.h for information about liblzma as
a whole." was removed since lzma.h is now the main page of the
generated HTML and does not have its own page anymore. So it would be
confusing in the HTML version and was only a "nice to have" when
browsing the source files.
2023-03-17 20:18:52 +08:00
Jia Tan d42977c7ac Build: Generate doxygen documentation in autogen.sh.
Another command line option (--no-doxygen) was added to disable
creating the doxygen documenation in cases where it not wanted or
if the doxygen tool is not installed.
2023-03-17 20:18:46 +08:00
Jia Tan 8fc712fcf4 Build: Create doxygen/update-doxygen script.
This is a helper script to generate the Doxygen documentation. It can be
run in 'liblzma' or 'internal' mode by setting the first argument. It
will default to 'liblzma' mode and only generate documentation for the
liblzma API header files.

The helper script will be run during the custom mydist hook when we
create releases. This hook already alters the source directory, so its
fine to do it here too. This way, we can include the Doxygen generated
files in the distrubtion and when installing.

In 'liblzma' mode, the JavaScript is stripped from the .html files and
the .js files are removed. This avoids license hassle from jQuery and
other libraries that Doxygen 1.9.6 puts into jquery.js in minified form.
2023-03-17 20:18:41 +08:00
Jia Tan 77d2c025d1 Build: Install Doxygen docs and include in distribution if generated.
Added a install-data-local target to install the Doxygen documentation
only when it has been generated. In order to correctly remove the docs,
a corresponding uninstall-local target was added.

If the doxygen docs exist in the source tree, they will also be included
in the distribution now too.
2023-03-17 20:18:36 +08:00
Jia Tan 9af8f6f947 Doxygen: Refactor Doxyfile.in to doxygen/Doxyfile.
Instead of having Doxyfile.in configured by Autoconf, the Doxyfile
can have the tags that need to be configured piped into the doxygen
command through stdin with the overrides after Doxyfile's contents.

Going forward, the documentation should be generated in two different
modes: liblzma or internal.

liblzma is useful for most users. It is the documentation for just
the liblzma API header files. This is the default.

internal is for people who want to understand how xz and liblzma work.
It might be useful for people who want to contribute to the project.
2023-03-17 20:17:27 +08:00
Jia Tan 1c558a2692 Tests: Remove unused macros and functions. 2023-03-13 20:53:26 +08:00
Jia Tan 7479a69a45 Tests: Refactors existing lzma_index tests.
Converts the existing lzma_index tests into tuktests and covers every
API function from index.h except for lzma_file_info_decoder, which can
be tested in the future.
2023-03-13 20:53:12 +08:00
Lasse Collin fd56d53533 xz: Make Capsicum sandbox more strict with stdin and stdout. 2023-03-11 19:34:39 +02:00
Lasse Collin d1bdaaebc6 xz: Don't fail if Capsicum is enabled but kernel doesn't support it.
(This commit combines related commits from the master branch.)

If Capsicum support is missing from the kernel or xz is being run
in an emulator that lacks Capsicum suport, the syscalls will fail
and set errno to ENOSYS. Previously xz would display and error and
exit, making xz unusable. Now it will check for ENOSYS and run
without sandbox support. Other tools like ssh behave similarly.

Displaying a warning for missing Capsicum support was considered
but such extra output would quickly become annoying. It would also
break test_scripts.sh in "make check".

Also move cap_enter() to be the first step instead of the last one.
This matches the example in the cap_rights_limit(2) man page. With
the current code it shouldn't make any practical difference though.

Thanks to Xin Li for the bug report, suggesting a fix, and testing:
https://github.com/tukaani-project/xz/pull/43

Thanks to Jia Tan for most of the original commits.
2023-03-11 19:31:40 +02:00
Jia Tan 5d351c69c1 Build: Adjust CMake version search regex.
Now, the LZMA_VERSION_MAJOR, LZMA_VERSION_MINOR, and LZMA_VERSION_PATCH
macros do not need to be on consecutive lines in version.h. They can be
separated by more whitespace, comments, or even other content, as long
as they appear in the proper order (major, minor, patch).
2023-03-07 23:57:39 +08:00
Jia Tan b82d4831e3 liblzma: Improve documentation for version.h.
Specified parameter and return values for API functions and documented
a few more of the macros.
2023-03-07 23:57:39 +08:00
Jia Tan 2caba3efe3 liblzma: Clarify lzma_lzma_preset() documentation in lzma12.h.
lzma_lzma_preset() does not guarentee that the lzma_options_lzma are
usable in an encoder even if it returns false (success). If liblzma
is built with default configurations, then the options will always be
usable. However if the match finders hc3, hc4, or bt4 are disabled, then
the options may not be usable depending on the preset level requested.

The documentation was updated to reflect this complexity, since this
behavior was unclear before.
2023-03-07 23:25:17 +08:00
Lasse Collin 594f904673 CMake: Require that the C compiler supports C99 or a newer standard.
Thanks to autoantwort for reporting the issue and suggesting
a different patch:
https://github.com/tukaani-project/xz/pull/42
2023-03-07 23:25:12 +08:00
Jia Tan 88101143cb Tests: Small tweak to test-vli.c.
The static global variables can be disabled if encoders and decoders
are not built. If they are not disabled and -Werror is used, it will
cause an usused warning as an error.
2023-03-07 23:24:56 +08:00
Jia Tan 4042dbf03a liblzma: Replace '\n' -> newline in filter.h documentation.
The '\n' renders as a newline when the comments are converted to html
by Doxygen.
2023-03-07 23:24:46 +08:00
Jia Tan 3971f5c502 liblzma: Shorten return description for two functions in filter.h.
Shorten the description for lzma_raw_encoder_memusage() and
lzma_raw_decoder_memusage().
2023-03-07 23:24:42 +08:00
Jia Tan 5e61b39432 liblzma: Reword a few lines in filter.h 2023-03-07 23:24:38 +08:00
Jia Tan 8a53533869 liblzma: Improve documentation in filter.h.
All functions now explicitly specify parameter and return values.
The notes and code annotations were moved before the parameter and
return value descriptions for consistency.

Also, the description above lzma_filter_encoder_is_supported() about
not being able to list available filters was removed since
lzma_str_list_filters() will do this.
2023-03-07 23:24:32 +08:00
Lasse Collin 6d05b08b17 Update THANKS. 2023-03-07 23:24:27 +08:00
Lasse Collin dfc9a54082 liblzma: Avoid null pointer + 0 (undefined behavior in C).
In the C99 and C17 standards, section 6.5.6 paragraph 8 means that
adding 0 to a null pointer is undefined behavior. As of writing,
"clang -fsanitize=undefined" (Clang 15) diagnoses this. However,
I'm not aware of any compiler that would take advantage of this
when optimizing (Clang 15 included). It's good to avoid this anyway
since compilers might some day infer that pointer arithmetic implies
that the pointer is not NULL. That is, the following foo() would then
unconditionally return 0, even for foo(NULL, 0):

    void bar(char *a, char *b);

    int foo(char *a, size_t n)
    {
        bar(a, a + n);
        return a == NULL;
    }

In contrast to C, C++ explicitly allows null pointer + 0. So if
the above is compiled as C++ then there is no undefined behavior
in the foo(NULL, 0) call.

To me it seems that changing the C standard would be the sane
thing to do (just add one sentence) as it would ensure that a huge
amount of old code won't break in the future. Based on web searches
it seems that a large number of codebases (where null pointer + 0
occurs) are being fixed instead to be future-proof in case compilers
will some day optimize based on it (like making the above foo(NULL, 0)
return 0) which in the worst case will cause security bugs.

Some projects don't plan to change it. For example, gnulib and thus
many GNU tools currently require that null pointer + 0 is defined:

    https://lists.gnu.org/archive/html/bug-gnulib/2021-11/msg00000.html

    https://www.gnu.org/software/gnulib/manual/html_node/Other-portability-assumptions.html

In XZ Utils null pointer + 0 issue should be fixed after this
commit. This adds a few if-statements and thus branches to avoid
null pointer + 0. These check for size > 0 instead of ptr != NULL
because this way bugs where size > 0 && ptr == NULL will likely
get caught quickly. None of them are in hot spots so it shouldn't
matter for performance.

A little less readable version would be replacing

    ptr + offset

with

    offset != 0 ? ptr + offset : ptr

or creating a macro for it:

    #define my_ptr_add(ptr, offset) \
            ((offset) != 0 ? ((ptr) + (offset)) : (ptr))

Checking for offset != 0 instead of ptr != NULL allows GCC >= 8.1,
Clang >= 7, and Clang-based ICX to optimize it to the very same code
as ptr + offset. That is, it won't create a branch. So for hot code
this could be a good solution to avoid null pointer + 0. Unfortunately
other compilers like ICC 2021 or MSVC 19.33 (VS2022) will create a
branch from my_ptr_add().

Thanks to Marcin Kowalczyk for reporting the problem:
https://github.com/tukaani-project/xz/issues/36
2023-03-07 23:24:15 +08:00
Jia Tan f6dce49cb6 liblzma: Adjust container.h for consistency with filter.h. 2023-03-07 23:24:09 +08:00
Jia Tan 173d240bb4 liblzma: Fix small typos and reword a few things in filter.h. 2023-03-07 23:24:05 +08:00
Jia Tan 17797bacde liblzma: Convert list of flags in lzma_mt to bulleted list. 2023-03-07 23:24:00 +08:00
Jia Tan 37da0e7271 liblzma: Fix typo in documentation in container.h
lzma_microlzma_decoder -> lzma_microlzma_encoder
2023-03-07 23:23:55 +08:00
Jia Tan b8331077c6 liblzma: Improve documentation for container.h
Standardizing each function to always specify parameters and return
values. Also moved the parameters and return values to the end of each
function description.
2023-03-07 23:23:51 +08:00
Jia Tan b9a3511bb6 CMake: Add LZIP decoder test to list of tests. 2023-03-07 23:23:41 +08:00
Lasse Collin cd82ef2fb4 Update THANKS. 2023-03-07 23:23:34 +08:00
Lasse Collin 076e911ba2 Build: Use only the generic symbol versioning on MicroBlaze.
On MicroBlaze, GCC 12 is broken in sense that
__has_attribute(__symver__) returns true but it still doesn't
support the __symver__ attribute even though the platform is ELF
and symbol versioning is supported if using the traditional
__asm__(".symver ...") method. Avoiding the traditional method is
good because it breaks LTO (-flto) builds with GCC.

See also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766

For now the only extra symbols in liblzma_linux.map are the
compatibility symbols with the patch that spread from RHEL/CentOS 7.
These require the use of __symver__ attribute or __asm__(".symver ...")
in the C code. Compatibility with the patch from CentOS 7 doesn't
seem valuable on MicroBlaze so use liblzma_generic.map on MicroBlaze
instead. It doesn't require anything special in the C code and thus
no LTO issues either.

An alternative would be to detect support for __symver__
attribute in configure.ac and CMakeLists.txt and fall back
to __asm__(".symver ...") but then LTO would be silently broken
on MicroBlaze. It sounds likely that MicroBlaze is a special
case so let's treat it as a such because that is simpler. If
a similar issue exists on some other platform too then hopefully
someone will report it and this can be reconsidered.

(This doesn't do the same fix in CMakeLists.txt. Perhaps it should
but perhaps CMake build of liblzma doesn't matter much on MicroBlaze.
The problem breaks the build so it's easy to notice and can be fixed
later.)

Thanks to Vincent Fazio for reporting the problem and proposing
a patch (in the end that solution wasn't used):
https://github.com/tukaani-project/xz/pull/32
2023-03-07 23:23:29 +08:00
Lasse Collin bc34e5ac99 liblzma: Very minor API doc tweaks.
Use "member" to refer to struct members as that's the term used
by the C standard.

Use lzma_options_delta.dist and such in docs so that in Doxygen's
HTML output they will link to the doc of the struct member.

Clean up a few trailing white spaces too.
2023-03-07 23:23:19 +08:00
Jia Tan d31fbd28be liblzma: Adjust spacing in doc headers in bcj.h. 2023-03-07 23:23:04 +08:00
Jia Tan 701e9be6be liblzma: Adjust documentation in bcj.h for consistent style. 2023-03-07 23:22:57 +08:00
Jia Tan 762c4d0b62 liblzma: Rename field => member in documentation.
Also adjusted preset value => preset level.
2023-03-07 23:22:46 +08:00
Lasse Collin 0ce1db0223 liblzma: Silence a warning from MSVC.
It gives C4146 here since unary minus with unsigned integer
is still unsigned (which is the intention here). Doing it
with substraction makes it clearer and avoids the warning.

Thanks to Nathan Moinvaziri for reporting this.
2023-03-07 23:22:21 +08:00
Jia Tan d83da006b3 liblzma: Improve documentation for stream_flags.h
Standardizing each function to always specify parameters and return
values. Also moved the parameters and return values to the end of each
function description.

A few small things were reworded and long sentences broken up.
2023-03-07 23:21:47 +08:00
Jia Tan 2796bb4736 liblzma: Improve documentation in lzma12.h.
All functions now explicitly specify parameter and return values.
2023-02-15 22:48:21 +08:00
Jia Tan ebebaa8d93 liblzma: Improve documentation in check.h.
All functions now explicitly specify parameter and return values.
Also moved the note about SHA-256 functions not being exported to the
top of the file.
2023-02-15 22:48:07 +08:00
Jia Tan 765fa2865a liblzma: Improve documentation in index.h
All functions now explicitly specify parameter and return values.
2023-02-15 22:47:59 +08:00
Jia Tan 918e208af5 liblzma: Reword a comment in index.h. 2023-02-15 22:47:55 +08:00
Jia Tan 1f157d214b liblzma: Omit lzma_index_iter's internal field from Doxygen docs.
Add \private above this field and its sub-fields since it is not meant
to be modified by users.
2023-02-15 22:47:36 +08:00
Jia Tan 28757fa46d liblzma: Fix documentation for LZMA_MEMLIMIT_ERROR.
LZMA_MEMLIMIT_ERROR was missing the "<" character needed to put
documentation after a member.
2023-02-15 22:47:29 +08:00
Jia Tan 135d5a1a65 liblzma: Improve documentation for base.h.
Standardizing each function to always specify params and return values.
Also fixed a small grammar mistake.
2023-02-15 22:46:41 +08:00
Jia Tan 2287d56683 liblzma: Minor improvements to vli.h.
Added [out] annotations to parameters that are pointers and can have
their value changed. Also added a clarification to lzma_vli_is_valid.
2023-02-15 22:46:25 +08:00
Jia Tan 7124b8a16a liblzma: Add comments for macros in delta.h.
Document LZMA_DELTA_DIST_MIN and LZMA_DELTA_DIST_MAX for completeness
and to avoid Doxygen warnings.
2023-02-15 22:45:57 +08:00
Jia Tan 59c7bb8931 liblzma: Improve documentation in index_hash.h.
All functions now explicitly specify parameter and return values.
Also reworded the description of lzma_index_hash_init() for readability.
2023-02-15 22:45:51 +08:00
Jia Tan e970c28ac3 liblzma: Fix bug in lzma_str_from_filters() not checking filters[] length.
The bug is only a problem in applications that do not properly terminate
the filters[] array with LZMA_VLI_UNKNOWN or have more than
LZMA_FILTERS_MAX filters. This bug does not affect xz.
2023-02-03 21:43:01 +08:00
Jia Tan 85e01266a9 Tests: Create test_filter_str.c.
Tests lzma_str_to_filters(), lzma_str_from_filters(), and
lzma_str_list_filters() API functions.
2023-02-03 21:42:48 +08:00
Jia Tan 3fa0f3ba12 liblzma: Fix typos in comments in string_conversion.c. 2023-02-03 21:42:40 +08:00
Jia Tan 32dbe045d7 liblzma: Clarify block encoder and decoder documentation.
Added a few sentences to the description for lzma_block_encoder() and
lzma_block_decoder() to highlight that the Block Header must be coded
before calling these functions.
2023-02-03 21:42:35 +08:00
Jia Tan ccf12acbfa Update lzma_block documentation for lzma_block_uncomp_encode(). 2023-02-03 21:42:30 +08:00
Jia Tan 6a0b168dd9 liblzma: Minor edits to lzma_block header_size documentation. 2023-02-03 21:42:27 +08:00
Jia Tan 84ce36f90e liblzma: Enumerate functions that read version in lzma_block. 2023-02-03 21:42:24 +08:00
Jia Tan d662077468 liblzma: Clarify comment in block.h. 2023-02-03 21:42:19 +08:00
Jia Tan 880adb5aa2 liblzma: Improve documentation for block.h.
Standardizing each function to always specify params and return values.
Output pointer parameters are also marked with doxygen style [out] to
make it clear. Any note sections were also moved above the parameter and
return sections for consistency.
2023-02-03 21:42:14 +08:00
Jia Tan b5b1b1f061 liblzma: Clarify a comment about LZMA_STR_NO_VALIDATION.
The flag description for LZMA_STR_NO_VALIDATION was previously confusing
about the treatment for filters than cannot be used with .xz format
(lzma1) without using LZMA_STR_ALL_FILTERS. Now, it is clear that
LZMA_STR_NO_VALIDATION is not a super set of LZMA_STR_ALL_FILTERS.
2023-02-03 21:42:07 +08:00
Jia Tan e904e778b8 Translations: Add Brazilian Portuguese translation of man pages.
Thanks to Rafael Fontenelle.
2023-02-03 21:39:59 +08:00
Jia Tan e9c47e79c9 liblzma: Fix documentation in filter.h for lzma_str_to_filters()
The previous documentation for lzma_str_to_filters() was technically
correct, but misleading. lzma_str_to_filters() returns NULL on success,
which is in practice always defined to 0. This is the same value as
LZMA_OK, but lzma_str_to_filters() does not return lzma_ret so we should
be more clear.
2023-02-03 21:38:26 +08:00
Jia Tan 99575947a5 xz: Refactor duplicated check for custom suffix when using --format=raw 2023-02-03 21:38:26 +08:00
Jia Tan 76dec92fcc liblzma: Set documentation on all reserved fields to private.
This prevents the reserved fields from being part of the generated
Doxygen documentation.
2023-02-03 21:38:26 +08:00
Jia Tan bd213d06eb liblzma: Highlight liblzma API headers should not be included directly.
This improves the generated Doxygen HTML files to better highlight
how to properly use the liblzma API header files.
2023-02-03 21:38:26 +08:00
Jia Tan 257dbff0ba tuklib_physmem: Silence warning from -Wcast-function-type on MinGW-w64.
tuklib_physmem depends on GetProcAddress() for both MSVC and MinGW-w64
to retrieve a function address. The proper way to do this is to cast the
return value to the type of function pointer retrieved. Unfortunately,
this causes a cast-function-type warning, so the best solution is to
simply ignore the warning.
2023-02-03 21:38:13 +08:00
Jia Tan 720ad4a442 xz: Add missing comment for coder_set_compression_settings() 2023-02-03 21:11:32 +08:00
Jia Tan 88dc191634 xz: Do not set compression settings with raw format in list mode.
Calling coder_set_compression_settings() in list mode with verbose mode
on caused the filter chain and memory requirements to print. This was
unnecessary since the command results in an error and not consistent
with other formats like lzma and alone.
2023-02-03 21:11:11 +08:00
Jia Tan 039e0ab13e Translations: Update the Brazilian Portuguese translation. 2023-02-03 21:10:57 +08:00
Lasse Collin 718f7a60e7 Build: Omit -Wmissing-noreturn from the default warnings.
It's not that important. It can be annoying in builds that
disable many features since in those cases the tests programs
will correctly trigger this warning with Clang.
2023-02-03 21:10:47 +08:00
Lasse Collin 3ccedb0972 xz: Use ssize_t for the to-be-ignored return value from write(fd, ptr, 1).
It makes no difference here as the return value fits into an int
too and it then gets ignored but this looks better.
2023-02-03 21:10:42 +08:00
Lasse Collin 09fbd2f052 xz: Silence warnings from -Wsign-conversion in a 32-bit build. 2023-02-03 21:10:38 +08:00
Lasse Collin 683d3f178e liblzma: Silence another warning from -Wsign-conversion in a 32-bit build.
It doesn't warn on a 64-bit system because truncating
a ptrdiff_t (signed long) to uint32_t is diagnosed under
-Wconversion by GCC and -Wshorten-64-to-32 by Clang.
2023-02-03 21:10:30 +08:00
Lasse Collin 2b8062ef94 liblzma: Silence a warning from -Wsign-conversion in a 32-bit build. 2023-02-03 21:10:25 +08:00
Lasse Collin b16b9c0d22 Build: Make configure add more warning flags for GCC and Clang.
-Wstrict-aliasing was removed from the list since it is enabled
by -Wall already.

A normal build is clean with these on GNU/Linux x86-64 with
GCC 12.2.0 and Clang 14.0.6.
2023-02-03 21:10:19 +08:00
Lasse Collin c47ecd6d39 Tests: Fix warnings from clang --Wassign-enum.
Explicitly casting the integer to lzma_check silences the warning.
Since such an invalid value is needed in multiple tests, a constant
INVALID_LZMA_CHECK_ID was added to tests.h.

The use of 0x1000 for lzma_block.check wasn't optimal as if
the underlying type is a char then 0x1000 will be truncated to 0.
However, in these test cases the value is ignored, thus even with
such truncation the test would have passed.
2023-02-03 21:10:06 +08:00
Lasse Collin 34e13ce015 Tests: Silence warnings from -Wsign-conversion.
Note that assigning an unsigned int to lzma_check doesn't warn
on GNU/Linux x86-64 since the enum type is unsigned on that
platform. The enum can be signed on some other platform though
so it's best to use enumeration type lzma_check in these situations.
2023-02-03 21:10:01 +08:00
Lasse Collin 6671d0fe46 liblzma: Silence warnings from clang -Wconditional-uninitialized.
This is similar to 2ce4f36f17.
The actual initialization of the variables is done inside
mythread_sync() macro. Clang doesn't seem to see that
the initialization code inside the macro is always executed.
2023-02-03 21:09:42 +08:00
Lasse Collin d3e833ca1d Fix warnings from clang -Wdocumentation. 2023-02-03 21:09:35 +08:00
Lasse Collin 977dd2e26b Tests: test_lzip_decoder: Remove trailing white-space. 2023-02-03 21:09:12 +08:00
Lasse Collin c55157ed74 Tests: test_lzip_decoder: Silence warnings from -Wsign-conversion. 2023-02-03 21:07:57 +08:00
Lasse Collin 18b845e697 Bump version and soname for 5.4.1. 2023-01-11 18:52:54 +02:00
Jia Tan 4080bbb844 Add NEWS for 5.4.1. 2023-01-11 18:52:23 +02:00
Lasse Collin 674c89fdb8 sysdefs.h: Don't include strings.h anymore.
On some platforms src/xz/suffix.c may need <strings.h> for
strcasecmp() but suffix.c includes the header when it needs it.

Unless there is an old system that otherwise supports enough C99
to build XZ Utils but doesn't have C89/C90-compatible <string.h>,
there should be no need to include <strings.h> in sysdefs.h.
2023-01-11 17:49:59 +02:00
Lasse Collin 2a6b938084 xz: Include <strings.h> in suffix.c if needed for strcasecmp().
SUSv2 and POSIX.1‐2017 declare only a few functions in <strings.h>.
Of these, strcasecmp() is used on some platforms in suffix.c.
Nothing else in the project needs <strings.h> (at least if
building on a modern system).

sysdefs.h currently includes <strings.h> if HAVE_STRINGS_H is
defined and suffix.c relied on this.

Note that dos/config.h doesn't #define HAVE_STRINGS_H even though
DJGPP does have strings.h. It isn't needed with DJGPP as strcasecmp()
is also in <string.h> in DJGPP.
2023-01-11 17:49:59 +02:00
Jia Tan aea639e81b xz: Fix warning -Wformat-nonliteral on clang in message.c.
clang and gcc differ in how they handle -Wformat-nonliteral. gcc will
allow a non-literal format string as long as the function takes its
format arguments as a va_list.
2023-01-11 17:31:54 +02:00
Jia Tan e3b42bfcb0 Tests: Fix test_filter_flags copy/paste error. 2023-01-11 17:31:54 +02:00
Jia Tan 21625b7e11 Tests: Fix type-limits warning in test_filter_flags.
This only occurs in test_filter_flags when the BCJ filters are not
configured and built. In this case, ARRAY_SIZE() returns 0 and causes a
type-limits warning with the loop variable since an unsigned number will
always be >= 0.
2023-01-11 17:31:54 +02:00
Lasse Collin c337983e92 liblzma: CLMUL CRC64: Work around a bug in MSVC, second attempt.
This affects only 32-bit x86 builds. x86-64 is OK as is.

I still cannot easily test this myself. The reporter has tested
this and it passes the tests included in the CMake build and
performance is good: raw CRC64 is 2-3 times faster than the
C version of the slice-by-four method. (Note that liblzma doesn't
include a MSVC-compatible version of the 32-bit x86 assembly code
for the slice-by-four method.)

Thanks to Iouri Kharon for figuring out a fix, testing, and
benchmarking.
2023-01-11 17:31:54 +02:00
Jia Tan b7fb438ea0 Tests: Fix unused function warning in test_block_header.
One of the global arrays of filters was only used in a test that
required both encoders and decoders to be configured in the build.
2023-01-11 17:31:54 +02:00
Jia Tan 68e9ef036d Tests: Fix unused function warning in test_index_hash.
test_index_hash does not use fill_index_hash() unless both encoders
and decoders are configured in the build.
2023-01-11 17:31:54 +02:00
Lasse Collin a387707cd8 Windows: Update INSTALL-MSVC.txt to recommend CMake over project files. 2023-01-11 17:30:30 +02:00
Lasse Collin 52902ad695 Revert "liblzma: CLMUL CRC64: Workaround a bug in MSVC (VS2015-2022)."
This reverts commit 36edc65ab4.

It was reported that it wasn't a good enough fix and MSVC
still produced (different kind of) bad code when building
for 32-bit x86 if optimizations are enabled.

Thanks to Iouri Kharon.
2023-01-10 12:51:19 +02:00
Lasse Collin e81b9fc48c sysdefs.h: Fix a comment. 2023-01-10 10:26:59 +02:00
Lasse Collin 6e89ab58b0 sysdefs.h: Don't include memory.h anymore even if it were available.
It quite probably was never needed, that is, any system where memory.h
was required likely couldn't compile XZ Utils for other reasons anyway.

XZ Utils 5.2.6 and later source packages were generated using
Autoconf 2.71 which no longer defines HAVE_MEMORY_H. So the code
being removed is no longer used anyway.
2023-01-10 10:26:59 +02:00
Lasse Collin 65c59ad429 CMake/Windows: Add a workaround for windres from GNU binutils.
This is combined from the following commits in the master branch:
443dfebced
6b117d3b1f
5e34774c31

Thanks to Iouri Kharon for the bug report, the original patch,
and testing.
2023-01-10 08:50:26 +02:00
Lasse Collin 43521e77ac Tests: test_filter_flags: Clean up minor issues.
Here are the list of the most significant issues addressed:
- Avoid using internal common.h header. It's not good to copy the
constants like this but common.h cannot be included for use outside
of liblzma. This is the quickest thing to do that could be fixed later.

- Omit the INIT_FILTER macro. Initialization should be done with just
regular designated initializers.

- Use start_offset = 257 for BCJ tests. It demonstrates that Filter
Flags encoder and decoder don't validate the options thoroughly.
257 is valid only for the x86 filter. This is a bit silly but
not a significant problem in practice because the encoder and
decoder initialization functions will catch bad alignment still.
Perhaps this should be fixed but it's not urgent and doesn't need
to be in 5.4.x.

- Various tweaks to comments such as filter id -> Filter ID
2023-01-09 16:58:27 +02:00
Jia Tan 6b44cead95 Tests: Refactors existing filter flags tests.
Converts the existing filter flags tests into tuktests.
2023-01-09 16:58:27 +02:00
Lasse Collin 1bbefa9659 Tests: tuktest.h: Support tuktest_malloc(0).
It's not needed in XZ Utils at least for now. It's good to support
it still because if such use is needed later, it wouldn't be
caught on GNU/Linux since malloc(0) from glibc returns non-NULL.
2023-01-09 16:58:27 +02:00
Lasse Collin ce3a3fbc7c CMake: Update cmake_minimum_required from 3.13...3.16 to 3.13...3.25.
The changes listed on cmake-policies(7) for versions 3.17 to 3.25
shouldn't affect this project.
2023-01-09 16:58:27 +02:00
Lasse Collin 99fcd57f2e Update THANKS. 2023-01-09 16:58:27 +02:00
Lasse Collin c0c13d9d82 Update THANKS. 2023-01-09 16:58:27 +02:00
Lasse Collin 3d45987451 CMake: Fix a copypaste error in xzdec Windows resource file handling.
It was my mistake. Thanks to Iouri Kharon for the bug report.
2023-01-09 16:58:27 +02:00
Lasse Collin 706bce5018 CMake/Windows: Add resource files to xz.exe and xzdec.exe.
The command line tools cannot be built with MSVC for now but
they can be built with MinGW-w64.

Thanks to Iouri Kharon for the bug report and the original patch.
2023-01-09 16:58:27 +02:00
Lasse Collin e96dee55df liblzma: CLMUL CRC64: Workaround a bug in MSVC (VS2015-2022).
I haven't tested with MSVC myself and there doesn't seem to be
information about the problem online, so I'm relying on the bug report.

Thanks to Iouri Kharon for the bug report and the patch.
2023-01-09 16:58:27 +02:00
Lasse Collin 52bc1ee34d Build: Require that _mm_set_epi64x() is usable to enable CLMUL support.
VS2013 doesn't have _mm_set_epi64x() so this way CLMUL gets
disabled with VS2013.

Thanks to Iouri Kharon for the bug report.
2023-01-09 16:58:27 +02:00
Jia Tan bad44cfe19 Tests: Creates test_index_hash.c
Tests all API functions exported from index_hash.h. Does not have a
dedicated test for lzma_index_hash_end.

[Minor edits were made by Lasse Collin.]
2023-01-09 16:56:07 +02:00
Jia Tan 692ccdf551 liblzma: Remove common.h include from common/index.h.
common/index.h is needed by liblzma internally and tests. common.h will
include and define many things that are not needed by the tests.

Also, this prevents include order problems because both common.h and
lzma.h define LZMA_API. On most platforms it results only in a warning
but on Windows it would break the build as the definition in common.h
must be used only for building liblzma itself.
2023-01-09 16:37:19 +02:00
Jia Tan 2ac7bafc8f liblzma: Add NULL check to lzma_index_hash_append.
This is for consistency with lzma_index_append.
2023-01-09 16:34:32 +02:00
Jia Tan db714d30e0 liblzma: Replaced hardcoded 0x0 index indicator byte with macro 2023-01-09 16:34:32 +02:00
Jia Tan 39d2585dcd Style: Change #if !defined() to #ifndef in mythread.h. 2023-01-09 16:33:53 +02:00
Jia Tan 3f0130aa28 Build: Add missing stream_decoder_mt.c to .vcxproj files.
The line in the .vcxproj files for building with was missing in 5.4.0.
Thank to Hajin Jang for reporting the issue.
2023-01-09 16:33:53 +02:00
Lasse Collin f204d1050a Update THANKS. 2023-01-04 23:17:09 +02:00
Lasse Collin 34a9c2d650 Tests: Adjust style in test_compress.sh. 2023-01-04 23:17:09 +02:00
Jia Tan 761c208d58 Tests: Replace non portable shell parameter expansion
The shell parameter expansion using # and ## is not supported in
Solaris 10 Bourne shell (/bin/sh). Even though this is POSIX, it is not fully
portable, so we should avoid it.
2023-01-05 00:30:22 +08:00
Jia Tan 8a7cbc0745 Translations: Add Korean translation of man pages.
Thanks to Seong-ho Cho
2023-01-05 00:30:14 +08:00
Jia Tan ca2af49bb8 Translations: Update the Esperanto translation. 2023-01-05 00:30:05 +08:00
Lasse Collin bfba3394ae Build: Fix config.h comments. 2023-01-05 00:29:52 +08:00
Jia Tan 507648ad11 Build: Only define HAVE_PROGRAM_INVOCATION_NAME if it is set to 1.
HAVE_DECL_PROGRAM_INVOCATION_NAME is renamed to
HAVE_PROGRAM_INVOCATION_NAME. Previously,
HAVE_DECL_PROGRAM_INVOCATION_NAME was always set when
building with autotools. CMake would only set this when it was 1, and the
dos/config.h did not define it. The new macro definition is consistent
across build systems.
2023-01-05 00:29:39 +08:00
Lasse Collin ab5229d32a Tests: test_check: Test corner cases of CLMUL CRC64. 2023-01-05 00:28:09 +08:00
Lasse Collin 8791826f31 Tests: Clarify a comment in test_lzip_decoder.c. 2023-01-05 00:28:01 +08:00
Jia Tan c410d812ea xz: Includes <time.h> and <sys/time.h> conditionally in mytime.c.
Previously, mytime.c depended on mythread.h for <time.h> to be included.
2023-01-05 00:27:51 +08:00
Jia Tan 501c6013d4 liblzma: Includes sys/time.h conditionally in mythread
Previously, <sys/time.h> was always included, even if mythread only used
clock_gettime. <time.h> is still needed even if clock_gettime is not used
though because struct timespec is needed for mythread_condtime.
2023-01-05 00:26:45 +08:00
Jia Tan 9e3cb514b5 Build: No longer require HAVE_DECL_CLOCK_MONOTONIC to always be set.
Previously, if threading was enabled HAVE_DECL_CLOCK_MONOTONIC would always
be set to 0 or 1. However, this macro was needed in xz so if xz was not
built with threading and HAVE_DECL_CLOCK_MONOTONIC was not defined but
HAVE_CLOCK_GETTIME was, it caused a warning during build. Now,
HAVE_DECL_CLOCK_MONOTONIC has been renamed to HAVE_CLOCK_MONOTONIC and
will only be set if it is 1.
2023-01-05 00:26:35 +08:00
Jia Tan 6fc3e54679 Translations: Add Ukrainian translations of man pages.
Thanks to Yuri Chornoivan
2022-12-28 01:20:44 +08:00
Jia Tan e84f2ab7f8 liblzma: Update documentation for lzma_filter_encoder. 2022-12-28 01:20:27 +08:00
Jia Tan b14b8dbba9 Tests: Adds lzip decoder tests 2022-12-28 01:20:16 +08:00
Jia Cheong Tan 09a114805e Doxygen: Update .gitignore for generating docs for in source build.
In source builds are not recommended, but we should still ignore
the generated artifacts.
2022-12-20 22:23:59 +08:00
Jia Tan d3e6fe4419 liblzma: Fix lzma_microlzma_encoder() return value.
Using return_if_error on lzma_lzma_lclppb_encode was improper because
return_if_error is expecting an lzma_ret value, but
lzma_lzma_lclppb_encode returns a boolean. This could result in
lzma_microlzma_encoder, which would be misleading for applications.
2022-12-20 22:23:59 +08:00
Lasse Collin b55a27b46f liblzma: Update authors list in arm64.c. 2022-12-20 22:23:59 +08:00
Jia Tan 2fd28d2b7c CMake: Update .gitignore for CMake artifacts from in source build.
In source builds are not recommended, but we can make it easier
by ignoring the generated artifacts from CMake.
2022-12-16 20:58:55 +08:00
162 changed files with 25442 additions and 7325 deletions

33
.gitignore vendored
View File

@ -5,6 +5,7 @@
.deps
.libs
*.a
*.gcda
*.gcno
*.la
@ -36,6 +37,9 @@ build-aux/test-driver
coverage
/doc/internal
/doc/api
/src/liblzma/liblzma.pc
/src/lzmainfo/lzmainfo
/src/xz/xz
@ -57,8 +61,11 @@ coverage
/tests/test_block_header
/tests/test_check
/tests/test_filter_flags
/tests/test_filter_str
/tests/test_hardware
/tests/test_index
/tests/test_index_hash
/tests/test_lzip_decoder
/tests/test_memlimit
/tests/test_stream_flags
/tests/test_vli
@ -77,3 +84,29 @@ coverage
/src/liblzma/api/Makefile
/src/lzmainfo/Makefile
/src/xzdec/Makefile
/CMakeCache.txt
/CMakeFiles
/CTestTestfile.cmake
/cmake_install.cmake
/DartConfiguration.tcl
/liblzma-config-version.cmake
/liblzma-config.cmake
/lzcat
/lzcat.1
/lzma
/lzma.1
/Testing
/tests_bin/
/unlzma
/unlzma.1
/unxz
/unxz.1
/xz
/xzcat
/xzcat.1
/xzdec
/windows/*/.vs
/windows/*/liblzma.vcxproj.user
/.vscode/

File diff suppressed because it is too large Load Diff

14
COPYING
View File

@ -21,6 +21,17 @@ XZ Utils Licensing
XZ Utils specific documentation files in other directories
are in the public domain.
Note: The JavaScript files (under the MIT license) have
been removed from the Doxygen-generated HTML version of the
liblzma API documentation. Doxygen itself is under the GNU GPL
but the remaining files generated by Doxygen are not affected
by the licenses used in Doxygen because Doxygen licensing has
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."
- Translated messages are in the public domain.
- The build system contains public domain files, and files that
@ -47,7 +58,8 @@ XZ Utils Licensing
naturally it is not legally required. Here is an example of a good
notice to put into "about box" or into documentation:
This software includes code from XZ Utils <https://tukaani.org/xz/>.
This software includes code from XZ Utils
<https://xz.tukaani.org/xz-utils/>.
The following license texts are included in the following files:
- COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1

View File

@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@ -1,6 +1,6 @@
See the commit log in the git repository:
git clone https://git.tukaani.org/xz.git
git clone https://github.com/tukaani-project/xz
Note that "make dist" doesn't put this tiny file into the package.
Instead, the git commit log is used as ChangeLog. See dist-hook in

File diff suppressed because it is too large Load Diff

89
INSTALL
View File

@ -22,13 +22,16 @@ XZ Utils Installation
3. xzgrep and other scripts
3.1. Dependencies
3.2. PATH
4. Troubleshooting
4.1. "No C99 compiler was found."
4.2. "No POSIX conforming shell (sh) was found."
4.3. configure works but build fails at crc32_x86.S
4.4. Lots of warnings about symbol visibility
4.5. "make check" fails
4.6. liblzma.so (or similar) not found when running xz
4. Tests
4.1 Testing in parallel
4.2 Cross compiling
5. Troubleshooting
5.1. "No C99 compiler was found."
5.2. "No POSIX conforming shell (sh) was found."
5.3. configure works but build fails at crc32_x86.S
5.4. Lots of warnings about symbol visibility
5.5. "make check" fails
5.6. liblzma.so (or similar) not found when running xz
0. Preface
@ -100,7 +103,7 @@ XZ Utils Installation
XZ Utils doesn't have code to detect the amount of physical RAM and
number of CPU cores on MINIX 3.
See section 4.4 in this file about symbol visibility warnings (you
See section 5.4 in this file about symbol visibility warnings (you
may want to pass gl_cv_cc_visibility=no to configure).
@ -127,14 +130,14 @@ XZ Utils Installation
missing from PATH (/usr/xpg4/bin or /usr/xpg6/bin). Nowadays
/usr/xpg4/bin is added to the script PATH by default on Solaris
(see --enable-path-for-scripts=PREFIX in section 2), but old xz
releases needed extra steps. See sections 4.5 and 3.2 for more
releases needed extra steps. See sections 5.5 and 3.2 for more
information.
1.2.6. Tru64
If you try to use the native C compiler on Tru64 (passing CC=cc to
configure), you may need the workaround mention in section 4.1 in
configure), you may need the workaround mention in section 5.1 in
this file (pass also ac_cv_prog_cc_c99= to configure).
@ -455,8 +458,10 @@ XZ Utils Installation
win95 Use Windows 95 compatible threads. This
is compatible with Windows XP and later
too. This is the default for 32-bit x86
Windows builds. The `win95' threading is
incompatible with --enable-small.
Windows builds. Unless the compiler
supports __attribute__((__constructor__)),
the `win95' threading is incompatible with
--enable-small.
vista Use Windows Vista compatible threads. The
resulting binaries won't run on Windows XP
@ -596,7 +601,7 @@ XZ Utils Installation
a fallback xzdiff will use mkdir to securely create a temporary
directory. Having mktemp available is still recommended since the
mkdir fallback method isn't as robust as mktemp is. The original
mktemp can be found from <http://www.mktemp.org/>. On GNU, most will
mktemp can be found from <https://www.mktemp.org/>. On GNU, most will
use the mktemp program from GNU coreutils instead of the original
implementation. Both mktemp versions are fine.
@ -624,10 +629,54 @@ XZ Utils Installation
src/scripts/xz*.in
4. Troubleshooting
4. Tests
--------
The test framework can be built and run by executing "make check" in
the build directory. The tests are a mix of executables and POSIX
shell scripts (sh). All tests should pass if the default configuration
is used. Disabling features through the configure options may cause
some tests to be skipped. If any tests do not pass, see section 5.5.
4.1. Testing in parallel
The tests can be run in parallel using the "-j" make option on systems
that support it. For instance, "make -j4 check" will run up to four
tests simultaneously.
4.2. Cross compiling
The tests can be built without running them:
make check TESTS=
The TESTS variable is the list of tests you wish to run. Leaving it
empty will compile the tests without running any.
If the tests are copied to a target machine to execute, the test data
files in the directory tests/files must also be copied. The tests
search for the data files using the environment variable $srcdir,
expecting to find the data files under $srcdir/files/. If $srcdir
isn't set then it defaults to the current directory.
The shell script tests can be copied from the source directory to the
target machine to execute. In addition to the test files, these tests
will expect the following relative file paths to execute properly:
./create_compress_files
../config.h
../src/xz/xz
../src/xzdec/xzdec
../src/scripts/xzdiff
../src/scripts/xzgrep
5. Troubleshooting
------------------
4.1. "No C99 compiler was found."
5.1. "No C99 compiler was found."
You need a C99 compiler to build XZ Utils. If the configure script
cannot find a C99 compiler and you think you have such a compiler
@ -642,7 +691,7 @@ XZ Utils Installation
support enough C99.
4.2. "No POSIX conforming shell (sh) was found."
5.2. "No POSIX conforming shell (sh) was found."
xzgrep and other scripts need a shell that (roughly) conforms
to POSIX. The configure script tries to find such a shell. If
@ -652,7 +701,7 @@ XZ Utils Installation
this error by passing --disable-scripts to configure.
4.3. configure works but build fails at crc32_x86.S
5.3. configure works but build fails at crc32_x86.S
The easy fix is to pass --disable-assembler to the configure script.
@ -669,7 +718,7 @@ XZ Utils Installation
(see INSTALL.generic).
4.4. Lots of warnings about symbol visibility
5.4. Lots of warnings about symbol visibility
On some systems where symbol visibility isn't supported, GCC may
still accept the visibility options and attributes, which will make
@ -681,7 +730,7 @@ XZ Utils Installation
using --enable-werror.
4.5. "make check" fails
5.5. "make check" fails
If the other tests pass but test_scripts.sh fails, then the problem
is in the scripts in src/scripts. Comparing the contents of
@ -707,7 +756,7 @@ XZ Utils Installation
information.
4.6. liblzma.so (or similar) not found when running xz
5.6. liblzma.so (or similar) not found when running xz
If you installed the package with "make install" and get an error
about liblzma.so (or a similarly named file) being missing, try

View File

@ -44,18 +44,30 @@ examplesolddir = $(docdir)/examples_old
dist_examplesold_DATA = \
doc/examples_old/xz_pipe_comp.c \
doc/examples_old/xz_pipe_decomp.c
# Install the Doxygen generated documentation if they were built.
install-data-local:
if test -d "$(srcdir)/doc/api" ; then \
$(MKDIR_P) "$(DESTDIR)$(docdir)/api" && \
$(INSTALL_DATA) "$(srcdir)"/doc/api/* \
"$(DESTDIR)$(docdir)/api"; \
fi
# Remove the Doxygen generated documentation when uninstalling.
uninstall-local:
rm -rf "$(DESTDIR)$(docdir)/api"
endif
EXTRA_DIST = \
po4a \
extra \
dos \
doxygen \
windows \
macosx \
cmake \
CMakeLists.txt \
autogen.sh \
Doxyfile.in \
COPYING.GPLv2 \
COPYING.GPLv3 \
COPYING.LGPLv2.1 \
@ -100,6 +112,11 @@ dist-hook:
> "$$dest/txt/$$BASE.txt"; \
done; \
fi
if test -d "$(srcdir)/doc/api" ; then \
$(MKDIR_P) "$(distdir)/doc/api" && \
$(INSTALL_DATA) "$(srcdir)"/doc/api/* \
"$(distdir)/doc/api"; \
fi
# This works with GNU tar and gives cleaner package than normal 'make dist'.
# This also ensures that the man page translations are up to date (dist-hook
@ -107,6 +124,7 @@ dist-hook:
mydist:
sh "$(srcdir)/src/liblzma/validate_map.sh"
cd "$(srcdir)/po4a" && sh update-po
cd "$(srcdir)/doxygen" && sh update-doxygen
VERSION=$(VERSION); \
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \
SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \

269
NEWS
View File

@ -2,6 +2,273 @@
XZ Utils Release Notes
======================
5.4.6 (2024-01-26)
* Fixed a bug involving internal function pointers in liblzma not
being initialized to NULL. The bug can only be triggered if
lzma_filters_update() is called on a LZMA1 encoder, so it does
not affect xz or any application known to us that uses liblzma.
* xz:
- Fixed a regression introduced in 5.4.2 that caused encoding
in the raw format to unnecessarily fail if --suffix was not
used. For instance, the following command no longer reports
that --suffix must be used:
echo foo | xz --format=raw --lzma2 | wc -c
- Fixed an issue on MinGW-w64 builds that prevented reading
from or writing to non-terminal character devices like NUL.
* Added a new test.
5.4.5 (2023-11-01)
* liblzma:
- Use __attribute__((__no_sanitize_address__)) to avoid address
sanitization with CRC64 CLMUL. It uses 16-byte-aligned reads
which can extend past the bounds of the input buffer and
inherently trigger address sanitization errors. This isn't
a bug.
- Fixed an assertion failure that could be triggered by a large
unpadded_size argument. It was verified that there was no
other bug than the assertion failure.
- Fixed a bug that prevented building with Windows Vista
threading when __attribute__((__constructor__)) is not
supported.
* xz now properly handles special files such as "con" or "nul" on
Windows. Before this fix, the following wrote "foo" to the
console and deleted the input file "con_xz":
echo foo | xz > con_xz
xz --suffix=_xz --decompress con_xz
* Build systems:
- Allow builds with Windows win95 threading and small mode when
__attribute__((__constructor__)) is supported.
- Added a new line to liblzma.pc for MSYS2 (Windows):
Cflags.private: -DLZMA_API_STATIC
When compiling code that will link against static liblzma,
the LZMA_API_STATIC macro needs to be defined on Windows.
- CMake specific changes:
* Fixed a bug that allowed CLOCK_MONOTONIC to be used even
if the check for it failed.
* Fixed a bug where configuring CMake multiple times
resulted in HAVE_CLOCK_GETTIME and HAVE_CLOCK_MONOTONIC
not being set.
* Fixed the build with MinGW-w64-based Clang/LLVM 17.
llvm-windres now has more accurate GNU windres emulation
so the GNU windres workaround from 5.4.1 is needed with
llvm-windres version 17 too.
* The import library on Windows is now properly named
"liblzma.dll.a" instead of "libliblzma.dll.a"
* Fixed a bug causing the Ninja Generator to fail on
UNIX-like systems. This bug was introduced in 5.4.0.
* Added a new option to disable CLMUL CRC64.
* A module-definition (.def) file is now created when
building liblzma.dll with MinGW-w64.
* The pkg-config liblzma.pc file is now installed on all
builds except when using MSVC on Windows.
* Added large file support by default for platforms that
need it to handle files larger than 2 GiB. This includes
MinGW-w64, even 64-bit builds.
* Small fixes and improvements to the tests.
* Updated translations: Chinese (simplified) and Esperanto.
5.4.4 (2023-08-02)
* liblzma and xzdec can now build against WASI SDK when threading
support is disabled. xz and tests don't build yet.
* CMake:
- Fixed a bug preventing other projects from including liblzma
multiple times using find_package().
- Don't create broken symlinks in Cygwin and MSYS2 unless
supported by the environment. This prevented building for the
default MSYS2 environment. The problem was introduced in
xz 5.4.0.
* Documentation:
- Small improvements to man pages.
- Small improvements and typo fixes for liblzma API
documentation.
* Tests:
- Added a new section to INSTALL to describe basic test usage
and address recent questions about building the tests when
cross compiling.
- Small fixes and improvements to the tests.
* Translations:
- Fixed a mistake that caused one of the error messages to not
be translated. This only affected versions 5.4.2 and 5.4.3.
- Updated the Chinese (simplified), Croatian, Esperanto, German,
Korean, Polish, Romanian, Spanish, Swedish, Ukrainian, and
Vietnamese translations.
- Updated the German, Korean, Romanian, and Ukrainian man page
translations.
5.4.3 (2023-05-04)
* All fixes from 5.2.12
* Features in the CMake build can now be disabled as CMake cache
variables, similar to the Autotools build.
* Minor update to the Croatian translation.
5.4.2 (2023-03-18)
* All fixes from 5.2.11 that were not included in 5.4.1.
* If xz is built with support for the Capsicum sandbox but running
in an environment that doesn't support Capsicum, xz now runs
normally without sandboxing instead of exiting with an error.
* liblzma:
- Documentation was updated to improve the style, consistency,
and completeness of the liblzma API headers.
- The Doxygen-generated HTML documentation for the liblzma API
header files is now included in the source release and is
installed as part of "make install". All JavaScript is
removed to simplify license compliance and to reduce the
install size.
- Fixed a minor bug in lzma_str_from_filters() that produced
too many filters in the output string instead of reporting
an error if the input array had more than four filters. This
bug did not affect xz.
* Build systems:
- autogen.sh now invokes the doxygen tool via the new wrapper
script doxygen/update-doxygen, unless the command line option
--no-doxygen is used.
- Added microlzma_encoder.c and microlzma_decoder.c to the
VS project files for Windows and to the CMake build. These
should have been included in 5.3.2alpha.
* Tests:
- Added a test to the CMake build that was forgotten in the
previous release.
- Added and refactored a few tests.
* Translations:
- Updated the Brazilian Portuguese translation.
- Added Brazilian Portuguese man page translation.
5.4.1 (2023-01-11)
* liblzma:
- Fixed the return value of lzma_microlzma_encoder() if the
LZMA options lc/lp/pb are invalid. Invalid lc/lp/pb options
made the function return LZMA_STREAM_END without encoding
anything instead of returning LZMA_OPTIONS_ERROR.
- Windows / Visual Studio: Workaround a possible compiler bug
when targeting 32-bit x86 and compiling the CLMUL version of
the CRC64 code. The CLMUL code isn't enabled by the Windows
project files but it is in the CMake-based builds.
* Build systems:
- Windows-specific CMake changes:
* Don't try to enable CLMUL CRC64 code if _mm_set_epi64x()
isn't available. This fixes CMake-based build with Visual
Studio 2013.
* Created a workaround for a build failure with windres
from GNU binutils. It is used only when the C compiler
is GCC (not Clang). The workaround is incompatible
with llvm-windres, resulting in "XZx20Utils" instead
of "XZ Utils" in the resource file, but without the
workaround llvm-windres works correctly. See the
comment in CMakeLists.txt for details.
* Included the resource files in the xz and xzdec build
rules. Building the command line tools is still
experimental but possible with MinGW-w64.
- Visual Studio: Added stream_decoder_mt.c to the project
files. Now the threaded decompressor lzma_stream_decoder_mt()
gets built. CMake-based build wasn't affected.
- Updated windows/INSTALL-MSVC.txt to mention that CMake-based
build is now the preferred method with Visual Studio. The
project files will probably be removed after 5.4.x releases.
- Changes to #defines in config.h:
* HAVE_DECL_CLOCK_MONOTONIC was replaced by
HAVE_CLOCK_MONOTONIC. The old macro was always defined
in configure-generated config.h to either 0 or 1. The
new macro is defined (to 1) only if the declaration of
CLOCK_MONOTONIC is available. This matches the way most
other config.h macros work and makes things simpler with
other build systems.
* HAVE_DECL_PROGRAM_INVOCATION_NAME was replaced by
HAVE_PROGRAM_INVOCATION_NAME for the same reason.
* Tests:
- Fixed test script compatibility with ancient /bin/sh
versions. Now the five test_compress_* tests should
no longer fail on Solaris 10.
- Added and refactored a few tests.
* Translations:
- Updated the Catalan and Esperanto translations.
- Added Korean and Ukrainian man page translations.
5.4.0 (2022-12-13)
This bumps the minor version of liblzma because new features were
@ -830,7 +1097,7 @@ XZ Utils Release Notes
of the deprecated egrep and fgrep commands.
- Fixed parsing of the options -E, -F, -G, -P, and -X. The
problem occurred when multiple options were specied in
problem occurred when multiple options were specified in
a single argument, for example,
echo foo | xzgrep -Fe foo

View File

@ -44,6 +44,8 @@ Information to packagers of XZ Utils
lzmadec binary for compatibility with LZMA Utils
liblzma liblzma.so.*
liblzma-devel liblzma.so, liblzma.a, API headers
liblzma-doc Doxygen-generated liblzma API docs (HTML),
example programs
2. Package description
@ -109,6 +111,13 @@ Information to packagers of XZ Utils
This package includes the API headers, static library, and
other development files related to liblzma.
liblzma-doc:
liblzma API documentation in HTML and example usage
This package includes the Doxygen-generated liblzma API
HTML docs and example programs showing how to use liblzma.
3. License
----------
@ -160,12 +169,13 @@ Information to packagers of XZ Utils
can be replaced with a symlink if your distro ships with shared
copies of the common license texts.
liblzma API is currently only documented using Doxygen tags in the
API headers. It hasn't been tested much how good results Doxygen
is able to make from the tags (e.g. Doxyfile might need tweaking,
the tagging may need to be improved etc.), so it might be simpler
to just let people read docs directly from the .h files for now,
and also save quite a bit in package size at the same time.
The Doxygen-generated documentation (HTML) for the liblzma API
headers is included in the source release and will be installed by
"make install" to $docdir/api. All JavaScript is removed to
simplify license compliance and to reduce the install size. If the
liblzma API documentation is not desired, either run configure with
--disable-doc or remove the doc/api directory before running
"make install".
6. Extra files

14
README
View File

@ -113,8 +113,8 @@ XZ Utils
Since the liblzma API has similarities to the zlib API, some people
may find it useful to read the zlib docs and tutorial too:
http://zlib.net/manual.html
http://zlib.net/zlib_how.html
https://zlib.net/manual.html
https://zlib.net/zlib_how.html
2. Version numbering
@ -281,13 +281,17 @@ XZ Utils
7-Zip and the p7zip port of 7-Zip support the .xz format starting
from the version 9.00alpha.
http://7-zip.org/
http://p7zip.sourceforge.net/
https://7-zip.org/
https://p7zip.sourceforge.net/
XZ Embedded is a limited implementation written for use in the Linux
kernel, but it is also suitable for other embedded use.
https://tukaani.org/xz/embedded.html
https://xz.tukaani.org/xz-embedded/
XZ for Java is a complete implementation written in pure Java.
https://xz.tukaani.org/xz-for-java/
6. Contact information

15
THANKS
View File

@ -5,6 +5,7 @@ Thanks
Some people have helped more, some less, but nevertheless everyone's help
has been important. :-) In alphabetical order:
- Mark Adler
- Kian-Meng Ang
- H. Peter Anvin
- Jeff Bastian
- Nelson H. F. Beebe
@ -19,10 +20,13 @@ has been important. :-) In alphabetical order:
- Jakub Bogusz
- Adam Borowski
- Maarten Bosmans
- Lukas Braune
- Benjamin Buch
- Trent W. Buck
- Kevin R. Bulgrien
- James Buren
- David Burklund
- Frank Busse
- Daniel Mealha Cabrita
- Milo Casagrande
- Marek Černocký
@ -30,6 +34,7 @@ has been important. :-) In alphabetical order:
- Vitaly Chikunov
- Antoine Cœur
- Gabi Davar
- İhsan Doğan
- Chris Donawa
- Andrew Dudman
- Markus Duft
@ -38,6 +43,7 @@ has been important. :-) In alphabetical order:
- Robert Elz
- Gilles Espinasse
- Denis Excoffier
- Vincent Fazio
- Michael Felt
- Michael Fox
- Mike Frysinger
@ -56,13 +62,18 @@ has been important. :-) In alphabetical order:
- Peter Ivanov
- Nicholas Jackson
- Sam James
- Hajin Jang
- Jouk Jansen
- Jun I Jin
- Kiyoshi Kanazawa
- Joona Kannisto
- Per Øyvind Karlsen
- Iouri Kharon
- Thomas Klausner
- Richard Koch
- Anton Kochkov
- Ville Koskinen
- Marcin Kowalczyk
- Jan Kratochvil
- Christian Kujau
- Stephan Kulow
@ -96,6 +107,7 @@ has been important. :-) In alphabetical order:
- Jonathan Nieder
- Andre Noll
- Peter O'Gorman
- Dimitri Papadopoulos Orfanos
- Daniel Packard
- Filip Palian
- Peter Pallinger
@ -118,6 +130,7 @@ has been important. :-) In alphabetical order:
- Torsten Rupp
- Stephen Sachs
- Jukka Salmi
- Agostino Sarubbo
- Alexandre Sauvé
- Benno Schulenberg
- Andreas Schwab
@ -129,6 +142,7 @@ has been important. :-) In alphabetical order:
- Brad Smith
- Bruce Stark
- Pippijn van Steenhoven
- Martin Storsjö
- Jonathan Stott
- Dan Stromberg
- Jia Tan
@ -136,6 +150,7 @@ has been important. :-) In alphabetical order:
- Paul Townsend
- Mohammed Adnène Trojette
- Alexey Tourbin
- Taiki Tsunekawa
- Loganaden Velvindron
- Patrick J. Volkerding
- Martin Väth

View File

@ -19,15 +19,38 @@ ${AUTOCONF:-autoconf}
${AUTOHEADER:-autoheader}
${AUTOMAKE:-automake} -acf --foreign
# Generate the translated man pages if the "po4a" tool is available.
# Generate the translated man pages and the doxygen documentation if the
# "po4a" and "doxygen" tools are available.
# This is *NOT* done by "autoreconf -fi" or when "make" is run.
#
# Pass --no-po4a to this script to skip this step. It can be useful when
# you know that po4a isn't available and don't want autogen.sh to exit
# with non-zero exit status.
if test "x$1" != "x--no-po4a"; then
# Pass --no-po4a or --no-doxygen to this script to skip these steps.
# It can be useful when you know that po4a or doxygen aren't available and
# don't want autogen.sh to exit with non-zero exit status.
generate_po4a="y"
generate_doxygen="y"
for arg in "$@"
do
case $arg in
"--no-po4a")
generate_po4a="n"
;;
"--no-doxygen")
generate_doxygen="n"
;;
esac
done
if test "$generate_po4a" != "n"; then
cd po4a
sh update-po
cd ..
fi
if test "$generate_doxygen" != "n"; then
cd doxygen
sh update-doxygen
cd ..
fi
exit 0

View File

@ -38,10 +38,10 @@ s/^\\.PD\$/.PD $PD/"
case $FORMAT in
ascii)
groff -t -mandoc -Tascii | col -bx
groff -t -mandoc -Tascii -P-c | col -bx
;;
utf8)
groff -t -mandoc -Tutf8 | col -bx
groff -t -mandoc -Tutf8 -P-c | col -bx
;;
ps)
sed "$SED_PD" | groff -dpaper=$PAPER -t -mandoc \

View File

@ -0,0 +1,26 @@
#############################################################################
#
# remove-ordinals.cmake
#
# Removes the ordinal numbers from a DEF file that has been created by
# GNU ld or LLVM lld option --output-def (when creating a Windows DLL).
# This should be equivalent: sed 's/ \+@ *[0-9]\+//'
#
# Usage:
#
# cmake -DINPUT_FILE=infile.def.in \
# -DOUTPUT_FILE=outfile.def \
# -P remove-ordinals.cmake
#
#############################################################################
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
file(READ "${INPUT_FILE}" STR)
string(REGEX REPLACE " +@ *[0-9]+" "" STR "${STR}")
file(WRITE "${OUTPUT_FILE}" "${STR}")

View File

@ -59,9 +59,8 @@ function(tuklib_integer TARGET_OR_ALL)
endif()
endif()
# 16-bit and 32-bit unaligned access is fast on x86(-64),
# big endian PowerPC, and usually on 32/64-bit ARM too.
# There are others too and ARM could be a false match.
# Unaligned access is fast on x86(-64), big endian PowerPC, and usually on
# 32/64-bit ARM too. There are others too and ARM could be a false match.
#
# Guess the default value for the option.
# CMake's ability to give info about the target arch seems bad.
@ -81,7 +80,7 @@ function(tuklib_integer TARGET_OR_ALL)
endif()
option(TUKLIB_FAST_UNALIGNED_ACCESS
"Enable if the system supports *fast* unaligned memory access \
with 16-bit and 32-bit integers."
with 16-bit, 32-bit, and 64-bit integers."
"${FAST_UNALIGNED_GUESS}")
tuklib_add_definition_if("${TARGET_OR_ALL}" TUKLIB_FAST_UNALIGNED_ACCESS)

View File

@ -0,0 +1,52 @@
#
# tuklib_large_file_support.cmake
#
# If off_t is less than 64 bits by default and -D_FILE_OFFSET_BITS=64
# makes off_t become 64-bit, the CMake option LARGE_FILE_SUPPORT is
# provided (ON by default) and -D_FILE_OFFSET_BITS=64 is added to
# the compile definitions if LARGE_FILE_SUPPORT is ON.
#
# Author: Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
include("${CMAKE_CURRENT_LIST_DIR}/tuklib_common.cmake")
include(CheckCSourceCompiles)
function(tuklib_large_file_support TARGET_OR_ALL)
# MSVC must be handled specially in the C code.
if(MSVC)
return()
endif()
set(TUKLIB_LARGE_FILE_SUPPORT_TEST
"#include <sys/types.h>
int foo[sizeof(off_t) >= 8 ? 1 : -1];
int main(void) { return 0; }")
check_c_source_compiles("${TUKLIB_LARGE_FILE_SUPPORT_TEST}"
TUKLIB_LARGE_FILE_SUPPORT_BY_DEFAULT)
if(NOT TUKLIB_LARGE_FILE_SUPPORT_BY_DEFAULT)
cmake_push_check_state()
# This needs -D.
list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D_FILE_OFFSET_BITS=64")
check_c_source_compiles("${TUKLIB_LARGE_FILE_SUPPORT_TEST}"
TUKLIB_LARGE_FILE_SUPPORT_WITH_FOB64)
cmake_pop_check_state()
endif()
if(TUKLIB_LARGE_FILE_SUPPORT_WITH_FOB64)
# Show the option only when _FILE_OFFSET_BITS=64 affects sizeof(off_t).
option(LARGE_FILE_SUPPORT
"Use -D_FILE_OFFSET_BITS=64 to support files larger than 2 GiB."
ON)
if(LARGE_FILE_SUPPORT)
# This must not use -D.
tuklib_add_definitions("${TARGET_OR_ALL}" "_FILE_OFFSET_BITS=64")
endif()
endif()
endfunction()

View File

@ -13,7 +13,6 @@ include(CheckSymbolExists)
function(tuklib_progname TARGET_OR_ALL)
# NOTE: This glibc extension requires _GNU_SOURCE.
check_symbol_exists(program_invocation_name errno.h
HAVE_DECL_PROGRAM_INVOCATION_NAME)
tuklib_add_definition_if("${TARGET_OR_ALL}"
HAVE_DECL_PROGRAM_INVOCATION_NAME)
HAVE_PROGRAM_INVOCATION_NAME)
tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_PROGRAM_INVOCATION_NAME)
endfunction()

View File

@ -18,7 +18,7 @@
AC_PREREQ([2.69])
AC_INIT([XZ Utils], m4_esyscmd([/bin/sh build-aux/version.sh]),
[xz@tukaani.org], [xz], [https://tukaani.org/xz/])
[xz@tukaani.org], [xz], [https://xz.tukaani.org/xz-utils/])
AC_CONFIG_SRCDIR([src/liblzma/common/common.h])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4])
@ -437,14 +437,6 @@ case $enable_threads in
;;
esac
# The Win95 threading lacks thread-safe one-time initialization function.
# It's better to disallow it instead of allowing threaded but thread-unsafe
# build.
if test "x$enable_small$enable_threads" = xyeswin95; then
AC_MSG_ERROR([--enable-threads=win95 and --enable-small cannot be
used at the same time])
fi
# We use the actual result a little later.
@ -596,12 +588,15 @@ echo "Initializing Automake:"
# We don't use "subdir-objects" yet because it breaks "make distclean" when
# dependencies are enabled (as of Automake 1.14.1) due to this bug:
# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354
# https://debbugs.gnu.org/cgi/bugreport.cgi?bug=17354
# The -Wno-unsupported is used to silence warnings about missing
# "subdir-objects".
AM_INIT_AUTOMAKE([1.12 foreign tar-v7 filename-length-max=99 -Wno-unsupported])
AC_PROG_LN_S
dnl # Autoconf >= 2.70 warns that AC_PROG_CC_C99 is obsolete. However,
dnl # we have to keep using AC_PROG_CC_C99 instead of AC_PROG_CC
dnl # as long as we try to be compatible with Autoconf 2.69.
AC_PROG_CC_C99
if test x$ac_cv_prog_cc_c99 = xno ; then
AC_MSG_ERROR([No C99 compiler was found.])
@ -611,8 +606,8 @@ AM_PROG_CC_C_O
AM_PROG_AS
AC_USE_SYSTEM_EXTENSIONS
case $enable_threads in
posix)
AS_CASE([$enable_threads],
[posix], [
echo
echo "POSIX threading support:"
AX_PTHREAD([:]) dnl We don't need the HAVE_PTHREAD macro.
@ -638,21 +633,24 @@ case $enable_threads in
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
AC_SEARCH_LIBS([clock_gettime], [rt])
AC_CHECK_FUNCS([clock_gettime pthread_condattr_setclock])
AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[#include <time.h>]])
AC_CHECK_DECL([CLOCK_MONOTONIC], [AC_DEFINE(
[HAVE_CLOCK_MONOTONIC], [1], [Define to 1 if
`CLOCK_MONOTONIC' is declared in <time.h>.])], [],
[[#include <time.h>]])
CFLAGS=$OLD_CFLAGS
;;
win95)
],
[win95], [
AC_DEFINE([MYTHREAD_WIN95], [1], [Define to 1 when using
Windows 95 (and thus XP) compatible threads.
This avoids use of features that were added in
Windows Vista.])
;;
vista)
],
[vista], [
AC_DEFINE([MYTHREAD_VISTA], [1], [Define to 1 when using
Windows Vista compatible threads. This uses
features that are not available on Windows XP.])
;;
esac
]
)
AM_CONDITIONAL([COND_THREADS], [test "x$enable_threads" != xno])
echo
@ -705,7 +703,7 @@ fi
# used when creating a static library.
#
# Libtool always uses -DPIC when building shared libraries by default and
# doesn't use it for static libs by default. This can be overriden with
# doesn't use it for static libs by default. This can be overridden with
# --with-pic and --without-pic though. As long as neither --with-pic nor
# --without-pic is used then we can use #ifdef PIC to detect if the file is
# being built for a shared library.
@ -716,8 +714,16 @@ elif test "x$enable_shared" = xno ; then
enable_symbol_versions=no
AC_MSG_RESULT([no (not building a shared library)])
else
case $host_os in
linux*)
case "$host_cpu-$host_os" in
microblaze*)
# GCC 12 on MicroBlaze doesn't support __symver__
# attribute. It's simplest and safest to use the
# generic version on that platform since then only
# the linker script is needed. The RHEL/CentOS 7
# compatibility symbols don't matter on MicroBlaze.
enable_symbol_versions=generic
;;
*-linux*)
case "$pic_mode-$enable_static" in
default-*)
# Use symvers if PIC is defined.
@ -826,17 +832,22 @@ AC_C_BIGENDIAN
# __attribute__((__constructor__)) can be used for one-time initializations.
# Use -Werror because some compilers accept unknown attributes and just
# give a warning. If it works this should give no warnings, even
# clang -Weverything should be fine.
# dnl This doesn't need AC_LANG_SOURCE, minimal code is enough.
# give a warning.
#
# FIXME? Unfortunately -Werror can cause trouble if CFLAGS contains options
# that produce warnings for unrelated reasons. For example, GCC and Clang
# support -Wunused-macros which will warn about "#define _GNU_SOURCE 1"
# which will be among the #defines that Autoconf inserts to the beginning of
# the test program. There seems to be no nice way to prevent Autoconf from
# inserting the any defines to the test program.
AC_MSG_CHECKING([if __attribute__((__constructor__)) can be used])
have_func_attribute_constructor=no
OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
AC_COMPILE_IFELSE([
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
__attribute__((__constructor__))
static void my_constructor_func(void) { return; }
], [
]])], [
AC_DEFINE([HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR], [1],
[Define to 1 if __attribute__((__constructor__))
is supported for functions.])
@ -848,6 +859,20 @@ AC_COMPILE_IFELSE([
CFLAGS="$OLD_CFLAGS"
# The Win95 threading lacks a thread-safe one-time initialization function.
# The one-time initialization is needed for crc32_small.c and crc64_small.c
# create the CRC tables. So if small mode is enabled, the threading mode is
# win95, and the compiler does not support attribute constructor, then we
# would end up with a multithreaded build that is thread-unsafe. As a
# result this configuration is not allowed.
if test "x$enable_small$enable_threads$have_func_attribute_constructor" \
= xyeswin95no; then
AC_MSG_ERROR([
--enable-threads=win95 and --enable-small cannot be used
at the same time with a compiler that doesn't support
__attribute__((__constructor__))])
fi
###############################################################################
# Checks for library functions.
###############################################################################
@ -884,7 +909,7 @@ TUKLIB_MBSTR
sha256_header_found=no
sha256_type_found=no
sha256_func_found=no
if test "x$enable_external_sha256" = "xyes"; then
AS_IF([test "x$enable_external_sha256" = "xyes"], [
# Test for Common Crypto before others, because Darwin has sha256.h
# too and we don't want to use that, because on older versions it
# uses OpenSSL functions, whose SHA256_Init is not guaranteed to
@ -914,7 +939,7 @@ if test "x$enable_external_sha256" = "xyes"; then
[sha256_func_found=yes ; break])
fi
fi
fi
])
AM_CONDITIONAL([COND_INTERNAL_SHA256], [test "x$sha256_func_found" = xno])
if test "x$enable_external_sha256$sha256_func_found" = xyesno; then
AC_MSG_ERROR([--enable-external-sha256 was specified but no supported external SHA-256 implementation was found])
@ -935,6 +960,8 @@ AC_CHECK_DECL([_mm_movemask_epi8],
# For faster CRC on 32/64-bit x86 and E2K (see also crc64_fast.c):
#
# - Check for the CLMUL intrinsic _mm_clmulepi64_si128 in <immintrin.h>.
# Check also for _mm_set_epi64x for consistency with CMake build
# where it's needed to disable CLMUL with VS2013.
#
# - Check that __attribute__((__target__("ssse3,sse4.1,pclmul"))) works
# together with _mm_clmulepi64_si128 from <immintrin.h>. The attribute
@ -945,9 +972,9 @@ AC_CHECK_DECL([_mm_movemask_epi8],
# If everything above is supported, runtime detection will be used to keep the
# binaries working on systems that don't support the required extensions.
AC_MSG_CHECKING([if _mm_clmulepi64_si128 is usable])
if test "x$enable_clmul_crc" = xno ; then
AS_IF([test "x$enable_clmul_crc" = xno], [
AC_MSG_RESULT([no, --disable-clmul-crc was used])
else
], [
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <immintrin.h>
@ -962,31 +989,33 @@ else
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
__attribute__((__target__("ssse3,sse4.1,pclmul")))
#endif
__m128i my_clmul(__m128i a, __m128i b)
__m128i my_clmul(__m128i a)
{
const __m128i b = _mm_set_epi64x(1, 2);
return _mm_clmulepi64_si128(a, b, 0);
}
]])], [
AC_DEFINE([HAVE_USABLE_CLMUL], [1],
[Define to 1 if _mm_clmulepi64_si128 is usable.
[Define to 1 if _mm_set_epi64x and
_mm_clmulepi64_si128 are usable.
See configure.ac for details.])
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
])
fi
])
# Check for sandbox support. If one is found, set enable_sandbox=found.
case $enable_sandbox in
auto | capsicum)
AS_CASE([$enable_sandbox],
[auto | capsicum], [
AX_CHECK_CAPSICUM([enable_sandbox=found], [:])
;;
esac
case $enable_sandbox in
auto | pledge)
]
)
AS_CASE([$enable_sandbox],
[auto | pledge], [
AC_CHECK_FUNCS([pledge], [enable_sandbox=found ; break])
;;
esac
]
)
# If a specific sandboxing method was explicitly requested and it wasn't
# found, give an error.
@ -1015,47 +1044,72 @@ if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then
AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY"
fi
if test "$GCC" = yes ; then
AS_IF([test "$GCC" = yes], [
# Enable as much warnings as possible. These commented warnings won't
# work for this package though:
# * -Wunreachable-code breaks several assert(0) cases, which are
# backed up with "return LZMA_PROG_ERROR".
# * -Wcast-qual would break various things where we need a non-const
# pointer although we don't modify anything through it.
# * -Wcast-align breaks optimized CRC32 and CRC64 implementation
# on some architectures (not on x86), where this warning is bogus,
# because we take care of correct alignment.
# * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations
# don't seem so useful here; at least the last one gives some
# warnings which are not bugs.
# * -Wconversion still shows too many warnings.
#
# The flags before the empty line are for GCC and many of them
# are supported by Clang too. The flags after the empty line are
# for Clang.
for NEW_FLAG in \
-Wall \
-Wextra \
-Wvla \
-Wc99-c11-compat \
-Wformat=2 \
-Winit-self \
-Wmissing-include-dirs \
-Wstrict-aliasing \
-Wshift-overflow=2 \
-Wstrict-overflow=3 \
-Walloc-zero \
-Wduplicated-cond \
-Wfloat-equal \
-Wundef \
-Wshadow \
-Wpointer-arith \
-Wbad-function-cast \
-Wwrite-strings \
-Wdate-time \
-Wsign-conversion \
-Wfloat-conversion \
-Wlogical-op \
-Waggregate-return \
-Wstrict-prototypes \
-Wold-style-definition \
-Wmissing-prototypes \
-Wmissing-declarations \
-Wmissing-noreturn \
-Wredundant-decls
-Wredundant-decls \
\
-Wc99-compat \
-Wc11-extensions \
-Wc2x-compat \
-Wc2x-extensions \
-Wpre-c2x-compat \
-Warray-bounds-pointer-arithmetic \
-Wassign-enum \
-Wconditional-uninitialized \
-Wdocumentation \
-Wduplicate-enum \
-Wempty-translation-unit \
-Wflexible-array-extensions \
-Wmissing-variable-declarations \
-Wnewline-eof \
-Wshift-sign-overflow \
-Wstring-conversion
do
AC_MSG_CHECKING([if $CC accepts $NEW_FLAG])
OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $NEW_FLAG -Werror"
AC_COMPILE_IFELSE([AC_LANG_SOURCE(
[void foo(void); void foo(void) { }])], [
[[void foo(void); void foo(void) { }]])], [
AM_CFLAGS="$AM_CFLAGS $NEW_FLAG"
AC_MSG_RESULT([yes])
], [
@ -1071,7 +1125,7 @@ if test "$GCC" = yes ; then
if test "x$enable_werror" = "xyes"; then
AM_CFLAGS="$AM_CFLAGS -Werror"
fi
fi
])
###############################################################################
@ -1092,7 +1146,6 @@ xz=`echo xz | sed "$program_transform_name"`
AC_SUBST([xz])
AC_CONFIG_FILES([
Doxyfile
Makefile
po/Makefile.in
lib/Makefile

View File

@ -240,5 +240,5 @@ A: Give --enable-small to the configure script. Use also appropriate
If the result is still too big, take a look at XZ Embedded. It is
a separate project, which provides a limited but significantly
smaller XZ decoder implementation than XZ Utils. You can find it
at <https://tukaani.org/xz/embedded.html>.
at <https://xz.tukaani.org/xz-embedded/>.

View File

@ -40,11 +40,11 @@ The .lzma File Format
0.2. Changes
Last modified: 2022-07-13 21:00+0300
Last modified: 2024-01-16 18:00+0800
Compared to the previous version (2011-04-12 11:55+0300)
the section 1.1.3 was modified to allow End of Payload Marker
with a known Uncompressed Size.
Compared to the previous version (2022-07-13 21:00+0300)
the section 2 was modified to change links from http to
https and to update XZ links.
1. File Format
@ -157,17 +157,17 @@ The .lzma File Format
2. References
LZMA SDK - The original LZMA implementation
http://7-zip.org/sdk.html
https://7-zip.org/sdk.html
7-Zip
http://7-zip.org/
https://7-zip.org/
LZMA Utils - LZMA adapted to POSIX-like systems
http://tukaani.org/lzma/
https://tukaani.org/lzma/
XZ Utils - The next generation of LZMA Utils
http://tukaani.org/xz/
https://xz.tukaani.org/xz-utils/
The .xz file format - The successor of the .lzma format
http://tukaani.org/xz/xz-file-format.txt
https://xz.tukaani.org/format/xz-file-format.txt

View File

@ -2,7 +2,7 @@
The .xz File Format
===================
Version 1.1.0 (2022-12-11)
Version 1.2.0 (2024-01-19)
0. Preface
@ -81,18 +81,22 @@ Version 1.1.0 (2022-12-11)
0.2. Getting the Latest Version
The latest official version of this document can be downloaded
from <http://tukaani.org/xz/xz-file-format.txt>.
from <https://xz.tukaani.org/format/xz-file-format.txt>.
Specific versions of this document have a filename
xz-file-format-X.Y.Z.txt where X.Y.Z is the version number.
For example, the version 1.0.0 of this document is available
at <http://tukaani.org/xz/xz-file-format-1.0.0.txt>.
at <https://xz.tukaani.org/format/xz-file-format-1.0.0.txt>.
0.3. Version History
Version Date Description
1.2.0 2024-01-19 Added RISC-V filter and updated URLs in
Sections 0.2 and 7. The URL of this
specification was changed.
1.1.0 2022-12-11 Added ARM64 filter and clarified 32-bit
ARM endianness in Section 5.3.2,
language improvements in Section 5.4
@ -923,6 +927,7 @@ Version 1.1.0 (2022-12-11)
0x08 2 bytes ARM Thumb filter [1]
0x09 4 bytes SPARC filter
0x0A 4 bytes ARM64 filter [2]
0x0B 2 bytes RISC-V filter
[1] These are for little endian instruction encoding.
This must not be confused with data endianness.
@ -1136,30 +1141,30 @@ Version 1.1.0 (2022-12-11)
7. References
LZMA SDK - The original LZMA implementation
http://7-zip.org/sdk.html
https://7-zip.org/sdk.html
LZMA Utils - LZMA adapted to POSIX-like systems
http://tukaani.org/lzma/
https://tukaani.org/lzma/
XZ Utils - The next generation of LZMA Utils
http://tukaani.org/xz/
https://xz.tukaani.org/xz-utils/
[RFC-1952]
GZIP file format specification version 4.3
http://www.ietf.org/rfc/rfc1952.txt
https://www.ietf.org/rfc/rfc1952.txt
- Notation of byte boxes in section "2.1. Overall conventions"
[RFC-2119]
Key words for use in RFCs to Indicate Requirement Levels
http://www.ietf.org/rfc/rfc2119.txt
https://www.ietf.org/rfc/rfc2119.txt
[GNU-tar]
GNU tar 1.21 manual
http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
GNU tar 1.35 manual
https://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
- Node 9.4.2 "Blocking Factor", paragraph that begins
"gzip will complain about trailing garbage"
- Note that this URL points to the latest version of the
manual, and may some day not contain the note which is in
1.21. For the exact version of the manual, download GNU
tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz
1.35. For the exact version of the manual, download GNU
tar 1.35: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.35.tar.gz

View File

@ -17,7 +17,7 @@ Introduction
Getting and Installing DJGPP
You may use <http://www.delorie.com/djgpp/zip-picker.html> to help
You may use <https://www.delorie.com/djgpp/zip-picker.html> to help
deciding what to download. If you are only interested in building
XZ Utils, the zip-picker may list files that you don't strictly
need. However, using the zip-picker can still be worth it to get a
@ -25,7 +25,7 @@ Getting and Installing DJGPP
from readme.1st too).
For a more manual method, first select a mirror from
<http://www.delorie.com/djgpp/getting.html> and go the
<https://www.delorie.com/djgpp/getting.html> and go the
subdirectory named "current". You need the following files:
unzip32.exe (if you don't already have a LFN-capable unzipper)

View File

@ -143,7 +143,7 @@
#define PACKAGE_NAME "XZ Utils"
/* Define to the home page for this package. */
#define PACKAGE_URL "https://tukaani.org/xz/"
#define PACKAGE_URL "https://xz.tukaani.org/xz-utils/"
/* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 4

2687
doxygen/Doxyfile Normal file

File diff suppressed because it is too large Load Diff

111
doxygen/update-doxygen Executable file
View File

@ -0,0 +1,111 @@
#!/bin/sh
#
#############################################################################
#
# 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.
#
# 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.
#
#############################################################################
#
# Authors: Jia Tan
# Lasse Collin
#
# This file has been put into the public domain.
# You can do whatever you want with this file.
#
#############################################################################
set -e
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
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
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
# If no arguments are specified, default to generating liblzma API header
# documentation only.
case $1 in
'' | api)
# Remove old documentation before re-generating the new.
rm -rf ../doc/api
# Generate the HTML documentation by preparing the Doxyfile
# in stdin and piping the result to the doxygen command.
# With Doxygen, the last assignment of a value to a tag will
# override any earlier assignment. So, we can use this
# feature to override the tags that need to change between
# "api" and "internal" modes.
(
cat 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
;;
internal)
# The docs from internal aren't for distribution so
# the JavaScript files aren't an issue here.
rm -rf ../doc/internal
(
cat Doxyfile
echo "PROJECT_NUMBER = $PACKAGE_VERSION"
echo 'PROJECT_NAME = "XZ Utils"'
echo 'STRIP_FROM_PATH = ../src'
echo 'INPUT = ../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
;;
esac

View File

@ -8,8 +8,8 @@
# Checks for tuklib_integer.h:
# - Endianness
# - Does the compiler or the operating system provide byte swapping macros
# - Does the hardware support fast unaligned access to 16-bit
# and 32-bit integers
# - Does the hardware support fast unaligned access to 16-bit, 32-bit,
# and 64-bit integers
#
# COPYING
#

View File

@ -21,5 +21,8 @@
AC_DEFUN_ONCE([TUKLIB_PROGNAME], [
AC_REQUIRE([TUKLIB_COMMON])
AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
AC_CHECK_DECL([program_invocation_name], [AC_DEFINE(
[HAVE_PROGRAM_INVOCATION_NAME], [1],
[Define to 1 if `program_invocation_name' is declared in <errno.h>.])],
[], [#include <errno.h>])
])dnl

View File

@ -1,5 +1,5 @@
# visibility.m4 serial 6
dnl Copyright (C) 2005, 2008, 2010-2020 Free Software Foundation, Inc.
# visibility.m4 serial 8
dnl Copyright (C) 2005, 2008, 2010-2023 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
@ -58,6 +58,11 @@ AC_DEFUN([gl_VISIBILITY],
extern __attribute__((__visibility__("default"))) int exportedvar;
extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
extern __attribute__((__visibility__("default"))) int exportedfunc (void);
void dummyfunc (void);
int hiddenvar;
int exportedvar;
int hiddenfunc (void) { return 51; }
int exportedfunc (void) { return 1225736919; }
void dummyfunc (void) {}
]],
[[]])],

218
po/de.po
View File

@ -3,13 +3,13 @@
#
# André Noll <maan@tuebingen.mpg.de>, 2010.
# Anna Henningsen <sqrt@entless.org>, 2015.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2019, 2022.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2019, 2022-2023.
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre2\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-12-03 00:34+0800\n"
"PO-Revision-Date: 2022-12-05 18:55+0100\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 20:44+0200\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@ -18,53 +18,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.08.3\n"
"X-Generator: Lokalize 23.04.3\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: Ungültiges Argument für --block-list"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: Zu viele Argumente für --block-list"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 kann nur das letzte Element in --block-list sein"
#: src/xz/args.c:436
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: Unbekanntes Dateiformat"
#: src/xz/args.c:459 src/xz/args.c:467
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: Integritätsprüfungstyp nicht unterstützt"
#: src/xz/args.c:503
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Nur eine Datei kann als Argument für »--files« oder »--files0« angegeben werden."
#: src/xz/args.c:571
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "Die Umgebungsvariable %s enthält zu viele Argumente"
#: src/xz/args.c:673
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Die Unterstützung für Kompression wurde zum Zeitpunkt der Erstellung deaktiviert"
#: src/xz/args.c:680
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Die Unterstützung für Dekompression wurde zum Zeitpunkt der Erstellung deaktiviert"
#: src/xz/args.c:686
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "Kompression von lzip-Dateien (.lz) wird nicht unterstützt"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "Mit --format=raw ist --suffix=.SUF notwendig, falls nicht in die Standardausgabe geschrieben wird"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "Maximal vier Filter möglich"
@ -136,11 +151,11 @@ msgstr "Die LZMA%c-Wörterbuchgröße wurde von %s MiB auf %s MiB angepasst, um
msgid "Error creating a pipe: %s"
msgstr "Fehler beim Erzeugen der Pipeline: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Sandbox konnte nicht aktiviert werden"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: poll() ist fehlgeschlagen: %s"
@ -155,111 +170,111 @@ msgstr "%s: poll() ist fehlgeschlagen: %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Datei scheint verschoben worden zu sein, daher wird sie nicht gelöscht"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: Löschen nicht möglich: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Dateieigentümer kann nicht gesetzt werden: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: Dateigruppe kann nicht gesetzt werden: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Zugriffsrechte können nicht gesetzt werden: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Dateistatus-Markierungen können nicht aus der Standardeingabe ermittelt werden: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Ist ein symbolischer Link, wird übersprungen"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: Ist ein Verzeichnis, wird übersprungen"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: Keine reguläre Datei, wird übersprungen"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Datei hat das setuid- oder setgid-Bit gesetzt, wird übersprungen"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Datei hat sticky-Bit gesetzt, wird übersprungen"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: Eingabedatei hat mehr als einen harten Link, wird übersprungen"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Leerer Dateiname, wird übersprungen"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Fehler beim Wiederherstellen der Status-Markierungen für die Standardeingabe: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Status-Markierungen der Standardausgabe können nicht ermittelt werden: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Fehler beim Wiederherstellen der O_APPEND-Markierungen für die Standardausgabe: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: Fehler beim Schließen der Datei: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: Positionierungsfehler beim Versuch, eine Sparse-Datei (dünnbesetzte Datei) zu erzeugen: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: Lesefehler: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: Fehler beim Durchsuchen der Datei: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: Unerwartetes Ende der Datei"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: Schreibfehler: %s"
@ -478,41 +493,41 @@ msgstr "%s: Zu klein, um eine gültige .xz-Datei zu sein"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:730
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr " Str. Blöcke Kompr. Unkompr. Verh. Check Dateiname"
#: src/xz/list.c:1025 src/xz/list.c:1203
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Ja"
#: src/xz/list.c:1025 src/xz/list.c:1203
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "Nein"
#: src/xz/list.c:1027 src/xz/list.c:1205
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Minimal erforderliche XZ Utils-Version: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1178
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
msgstr[0] "%s Datei\n"
msgstr[1] "%s Dateien\n"
#: src/xz/list.c:1191
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Gesamt:"
#: src/xz/list.c:1269
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list funktioniert nur mit .xz-Dateien (--format=xz oder --format=auto)"
#: src/xz/list.c:1275
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list unterstützt kein Lesen aus der Standardeingabe"
@ -543,68 +558,68 @@ msgstr "Lesen der Daten aus der Standardeingabe ist nicht möglich, wenn die Dat
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Interner Fehler (Bug)"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "Signalroutine kann nicht gesetzt werden"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "Keine Integritätsprüfung; Integrität der Datei wird nicht überprüft"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Typ der Integritätsprüfung wird nicht unterstützt; Integrität der Datei wird nicht überprüft"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Speicherbedarfsbegrenzung erreicht"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "Dateiformat nicht erkannt"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Optionen nicht unterstützt"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Komprimierte Daten sind beschädigt"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Unerwartetes Ende der Eingabe"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "%s MiB Speicher wird benötigt. Die Begrenzung ist deaktiviert."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "%s MiB Speicher wird benötigt. Die Begrenzung ist %s."
#: src/xz/message.c:915
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: Filterkette: %s\n"
#: src/xz/message.c:926
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Versuchen Sie »%s --help« für mehr Informationen."
#: src/xz/message.c:952
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -615,17 +630,17 @@ msgstr ""
"Komprimiert oder dekomprimiert .xz-DATEI(EN).\n"
"\n"
#: src/xz/message.c:959
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr ""
"Obligatorische Argumente für lange Optionen sind auch für kurze Optionen\n"
"zwingend.\n"
#: src/xz/message.c:963
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Aktionsmodus:\n"
#: src/xz/message.c:966
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -637,7 +652,7 @@ msgstr ""
" -t, --test Dateiintegrität überprüfen\n"
" -l, --list Dateiinformationen anzeigen"
#: src/xz/message.c:972
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -645,7 +660,7 @@ msgstr ""
"\n"
" Aktionsmodifikatoren:\n"
#: src/xz/message.c:975
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -657,7 +672,7 @@ msgstr ""
" -c, --stdout In die Standardausgabe schreiben und die\n"
" Eingabedateien nicht löschen"
#: src/xz/message.c:984
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -666,7 +681,7 @@ msgstr ""
" stillschweigend mögliche weitere Eingabedaten\n"
" ignorieren"
#: src/xz/message.c:987
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -687,7 +702,7 @@ msgstr ""
" --files0=[DATEI] Wie --files, aber das Null-Zeichen wird als\n"
" Trenner benutzt"
#: src/xz/message.c:996
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -695,7 +710,7 @@ msgstr ""
"\n"
" Grundlegende Optionen für Dateiformat und Kompression:\n"
#: src/xz/message.c:998
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -708,13 +723,13 @@ msgstr ""
" -C, --check=PRÜFUNG Typ der Integritätsprüfung: »none« (Vorsicht),\n"
" »crc32«, »crc64« (Voreinstellung) oder »sha256«"
#: src/xz/message.c:1003
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr ""
" --ignore-check Integritätsprüfung beim Dekomprimieren\n"
" nicht ausführen"
#: src/xz/message.c:1007
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -723,7 +738,7 @@ msgstr ""
" Beachten Sie den Speicherbedarf des Kompressors\n"
" *und* des Dekompressors, wenn Sie 7-9 benutzen!"
#: src/xz/message.c:1011
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -732,7 +747,7 @@ msgstr ""
" Kompressionsverhältnis zu verbessern. Dies beeinflusst\n"
" den Speicherbedarf des Dekompressors nicht."
#: src/xz/message.c:1015
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -742,7 +757,7 @@ msgstr ""
" wird, dann werden so viele Threads erzeugt, wie\n"
" Prozessorkerne vorhanden sind"
#: src/xz/message.c:1020
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -754,7 +769,7 @@ msgstr ""
" Option, um die Blockgröße für die Kompression mit\n"
" mehreren Threads zu setzen"
#: src/xz/message.c:1024
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -765,7 +780,7 @@ msgstr ""
" Kommata getrennten Intervalle an unkomprimierten\n"
" Daten beginnen"
#: src/xz/message.c:1028
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -779,7 +794,7 @@ msgstr ""
" Eingabedaten den Prozess blockieren würde, dann werden\n"
" alle noch ausstehenden Daten geschrieben"
#: src/xz/message.c:1034
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -800,7 +815,7 @@ msgstr ""
" Geben Sie 0 an, um die Grundeinstellungen zu\n"
" verwenden."
#: src/xz/message.c:1043
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -810,7 +825,7 @@ msgstr ""
" Fehler ausgegeben, statt die Einstellungen\n"
" nach unten anzupassen."
#: src/xz/message.c:1049
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -818,7 +833,7 @@ msgstr ""
"\n"
" Benutzerdefinierte Filterkette für Kompression (alternativ zu Voreinstellung):"
#: src/xz/message.c:1058
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -851,7 +866,7 @@ msgstr ""
" depth=ZAHL Maximale Suchtiefe; 0=automatisch\n"
" (Voreinstellung)"
#: src/xz/message.c:1073
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -876,7 +891,7 @@ msgstr ""
" start=ZAHL Startversatz für Konversion\n"
" (Voreinstellung=0)"
#: src/xz/message.c:1086
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -889,7 +904,7 @@ msgstr ""
" dist=NUM Abstand zwischen den Bytes, die voneinander\n"
" subtrahiert werden (1-256; 1)"
#: src/xz/message.c:1094
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -897,7 +912,7 @@ msgstr ""
"\n"
" Andere Optionen:\n"
#: src/xz/message.c:1097
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -907,17 +922,17 @@ msgstr ""
" -v, --verbose Ausführlicher Modus; wird diese Option zweimal\n"
" angegeben, erfolgen noch ausführlichere Ausgaben"
#: src/xz/message.c:1102
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn Warnungen verändern nicht den Exit-Status"
#: src/xz/message.c:1104
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr ""
" --robot Maschinenlesbare Meldungen ausgeben (nützlich für\n"
" Skripte)"
#: src/xz/message.c:1107
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -926,7 +941,7 @@ msgstr ""
" Speicherbedarfsbegrenzung anzeigen\n"
" und das Programm beenden"
#: src/xz/message.c:1110
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -935,7 +950,7 @@ msgstr ""
" Optionen)\n"
" -H, --long-help Diese lange Hilfe anzeigen und das Programm beenden"
#: src/xz/message.c:1114
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -944,11 +959,11 @@ msgstr ""
" -H, --long-help Die lange Hilfe (und damit auch fortgeschrittene\n"
" Optionen) anzeigen"
#: src/xz/message.c:1119
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version Versionsnummer anzeigen und beenden"
#: src/xz/message.c:1121
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -961,17 +976,17 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1127
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "Melden Sie Fehler an <%s> (auf Englisch oder Finnisch).\n"
#: src/xz/message.c:1129
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "%s-Homepage: <%s>\n"
#: src/xz/message.c:1133
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "DIES IST EINE NICHT FÜR DEN PRODUKTIVBETRIEB GEEIGNETE ENTWICKLERVERSION."
@ -999,22 +1014,17 @@ msgstr "LZMA1/LZMA2-Voreinstellung wird nicht unterstützt: %s"
msgid "The sum of lc and lp must not exceed 4"
msgstr "Die Summe aus lc und lp darf höchstens 4 sein"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: Mit --format=raw ist --suffix=.SUF notwendig, falls nicht in die Standardausgabe geschrieben wird"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Dateiname hat unbekanntes Suffix, wird übersprungen"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Datei hat bereits das Suffix »%s«, wird übersprungen"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: Ungültige Dateiendung"

640
po/eo.po

File diff suppressed because it is too large Load Diff

332
po/es.po
View File

@ -1,13 +1,13 @@
# Spanish translation for xz-5.4.0-pre1.
# Spanish translation for xz-5.4.4-pre1.
# This file is put in the public domain.
# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2022.
# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n"
"PO-Revision-Date: 2022-11-10 09:14-0600\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 11:31-0600\n"
"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
"Language: es\n"
@ -17,51 +17,66 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: Argumento inválido para --block-list"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: Demasiados argumentos para --block-list"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 solo se puede usar como el último elemento en --block-list"
#: src/xz/args.c:424
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: Tipo de formato de fichero desconocido"
#: src/xz/args.c:447 src/xz/args.c:455
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: No se admite el tipo de verificación de integridad"
#: src/xz/args.c:491
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Solo se puede especificar un fichero con `--files' o `--files0'."
#: src/xz/args.c:559
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "La variable de ambiente %s contiene demasiados argumentos"
#: src/xz/args.c:661
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Se desactivó el soporte para compresión en el momento de compilación"
#: src/xz/args.c:668
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Se desactivó el soporte para descompresión en el momento de compilación"
#: src/xz/args.c:674
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "No se admite la compresión de ficheros lzip (.lz)"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "Con --format=raw, se requiere --suffix=.SUF a menos que se escriba a la salida estándar"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "El número máximo de filtros es cuatro"
@ -133,11 +148,11 @@ msgstr "Se ajusta el tamaño del diccionario LZMA%c de %s MiB a %s MiB para no e
msgid "Error creating a pipe: %s"
msgstr "Error al crear una tubería: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Falló al activar el arenero"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: falló poll(): %s"
@ -152,252 +167,252 @@ msgstr "%s: falló poll(): %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Al parecer se movió el fichero, no se borra"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: No se puede borrar: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: No se puede establecer el propietario del fichero: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: No se puede establecer el grupo del fichero: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: No se pueden establecer los permisos del fichero: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Error al obtener la opciones de estado de fichero de la entrada estándar: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Es un enlace simbólico, se salta"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: Es un directorio, se salta"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: No es un fichero regular, se salta"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: El fichero tiene el bit setuid o setgid activo, se salta"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: El fichero tiene el bit sticky activo, se salta"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: El fichero de entrada tiene más de un enlace duro, se salta"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Nombre de fichero vacío, se salta"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Error al restaurar las opciones de estado en la entrada estándar: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Error al obtener las opciones de estado de fichero de la entrada estándar: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Error al restaurar la opción O_APPEND a la salida estándar: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: Falló al cerrar el fichero: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: Falló la búsqueda al tratar de crear un fichero disperso: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: Error de lectura: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: Error al buscar en el fichero: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: Fin de fichero inesperado"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: Error de escritura: %s"
#: src/xz/hardware.c:225
#: src/xz/hardware.c:238
msgid "Disabled"
msgstr "Desactivado"
#: src/xz/hardware.c:256
#: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):"
msgstr "Cantidad total de memoria física (RAM):"
#: src/xz/hardware.c:257
#: src/xz/hardware.c:270
msgid "Number of processor threads:"
msgstr "Número de hilos de procesador:"
#: src/xz/hardware.c:258
#: src/xz/hardware.c:271
msgid "Compression:"
msgstr "Compresión"
#: src/xz/hardware.c:259
#: src/xz/hardware.c:272
msgid "Decompression:"
msgstr "Descompresión:"
#: src/xz/hardware.c:260
#: src/xz/hardware.c:273
msgid "Multi-threaded decompression:"
msgstr "Descompresión multihilos:"
#: src/xz/hardware.c:261
#: src/xz/hardware.c:274
msgid "Default for -T0:"
msgstr "Por omisión para -T0:"
#: src/xz/hardware.c:279
#: src/xz/hardware.c:292
msgid "Hardware information:"
msgstr "Información de hardware:"
#: src/xz/hardware.c:286
#: src/xz/hardware.c:299
msgid "Memory usage limits:"
msgstr "Límites de uso de memoria:"
#: src/xz/list.c:65
#: src/xz/list.c:68
msgid "Streams:"
msgstr "Flujos:"
#: src/xz/list.c:66
#: src/xz/list.c:69
msgid "Blocks:"
msgstr "Bloques:"
#: src/xz/list.c:67
#: src/xz/list.c:70
msgid "Compressed size:"
msgstr "Tamaño comprimido:"
#: src/xz/list.c:68
#: src/xz/list.c:71
msgid "Uncompressed size:"
msgstr "Tamaño sin comprimir:"
#: src/xz/list.c:69
#: src/xz/list.c:72
msgid "Ratio:"
msgstr "Tasa:"
#: src/xz/list.c:70
#: src/xz/list.c:73
msgid "Check:"
msgstr "Verificación:"
#: src/xz/list.c:71
#: src/xz/list.c:74
msgid "Stream Padding:"
msgstr "Relleno de flujo:"
#: src/xz/list.c:72
#: src/xz/list.c:75
msgid "Memory needed:"
msgstr "Memoria requerida:"
#: src/xz/list.c:73
#: src/xz/list.c:76
msgid "Sizes in headers:"
msgstr "Tamaños en cabeceras:"
#: src/xz/list.c:76
#: src/xz/list.c:79
msgid "Number of files:"
msgstr "Número de ficheros:"
#: src/xz/list.c:119
#: src/xz/list.c:122
msgid "Stream"
msgstr "Flujo"
#: src/xz/list.c:120
#: src/xz/list.c:123
msgid "Block"
msgstr "Bloque"
#: src/xz/list.c:121
#: src/xz/list.c:124
msgid "Blocks"
msgstr "Bloques"
#: src/xz/list.c:122
#: src/xz/list.c:125
msgid "CompOffset"
msgstr "DesplComp"
#: src/xz/list.c:123
#: src/xz/list.c:126
msgid "UncompOffset"
msgstr "DesplDescomp"
#: src/xz/list.c:124
#: src/xz/list.c:127
msgid "CompSize"
msgstr "TamComp"
#: src/xz/list.c:125
#: src/xz/list.c:128
msgid "UncompSize"
msgstr "TamDescomp"
#: src/xz/list.c:126
#: src/xz/list.c:129
msgid "TotalSize"
msgstr "TamTotal"
#: src/xz/list.c:127
#: src/xz/list.c:130
msgid "Ratio"
msgstr "Tasa"
#: src/xz/list.c:128
#: src/xz/list.c:131
msgid "Check"
msgstr "Verif"
#: src/xz/list.c:129
#: src/xz/list.c:132
msgid "CheckVal"
msgstr "ValVerif"
#: src/xz/list.c:130
#: src/xz/list.c:133
msgid "Padding"
msgstr "Relleno"
#: src/xz/list.c:131
#: src/xz/list.c:134
msgid "Header"
msgstr "Cabecera"
#: src/xz/list.c:132
#: src/xz/list.c:135
msgid "Flags"
msgstr "Opciones"
#: src/xz/list.c:133
#: src/xz/list.c:136
msgid "MemUsage"
msgstr "UsoMem"
#: src/xz/list.c:134
#: src/xz/list.c:137
msgid "Filters"
msgstr "Filtros"
@ -405,7 +420,7 @@ msgstr "Filtros"
#. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166
#: src/xz/list.c:169
msgid "None"
msgstr "Ninguno"
@ -413,60 +428,60 @@ msgstr "Ninguno"
#. but the Check ID is known (here 2). In older xz version these
#. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172
#: src/xz/list.c:175
msgid "Unknown-2"
msgstr "Descon-2"
#: src/xz/list.c:173
#: src/xz/list.c:176
msgid "Unknown-3"
msgstr "Descon-3"
#: src/xz/list.c:175
#: src/xz/list.c:178
msgid "Unknown-5"
msgstr "Descon-5"
#: src/xz/list.c:176
#: src/xz/list.c:179
msgid "Unknown-6"
msgstr "Descon-6"
#: src/xz/list.c:177
#: src/xz/list.c:180
msgid "Unknown-7"
msgstr "Descon-7"
#: src/xz/list.c:178
#: src/xz/list.c:181
msgid "Unknown-8"
msgstr "Descon-8"
#: src/xz/list.c:179
#: src/xz/list.c:182
msgid "Unknown-9"
msgstr "Descon-9"
#: src/xz/list.c:181
#: src/xz/list.c:184
msgid "Unknown-11"
msgstr "Descon-11"
#: src/xz/list.c:182
#: src/xz/list.c:185
msgid "Unknown-12"
msgstr "Descon-12"
#: src/xz/list.c:183
#: src/xz/list.c:186
msgid "Unknown-13"
msgstr "Descon-13"
#: src/xz/list.c:184
#: src/xz/list.c:187
msgid "Unknown-14"
msgstr "Descon-14"
#: src/xz/list.c:185
#: src/xz/list.c:188
msgid "Unknown-15"
msgstr "Descon-15"
#: src/xz/list.c:348
#: src/xz/list.c:351
#, c-format
msgid "%s: File is empty"
msgstr "%s: El fichero está vacío"
#: src/xz/list.c:353
#: src/xz/list.c:356
#, c-format
msgid "%s: Too small to be a valid .xz file"
msgstr "%s: Demasiado pequeño para ser un fichero .xz válido"
@ -475,41 +490,41 @@ msgstr "%s: Demasiado pequeño para ser un fichero .xz válido"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:722
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Flujos Bloques Comprimido Sin-Comprimir Relac Verif Nombre-Fichero"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Sí"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "No"
#: src/xz/list.c:1018 src/xz/list.c:1195
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Versión de herramientas XZ mínima: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1168
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
msgstr[0] "%s fichero\n"
msgstr[1] "%s ficheros\n"
#: src/xz/list.c:1181
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Totales:"
#: src/xz/list.c:1259
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list solo funciona con ficheros .xz (--format=xz o --format=auto)"
#: src/xz/list.c:1265
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list no admite leer de la entrada estándar"
@ -540,68 +555,68 @@ msgstr "No se pueden leer datos de la entrada estándar cuando se leen nombres d
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Error interno (bug)"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "No se pueden establecer los manejadores de señales"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "No hay revisión de integridad; no se verifica la integridad del fichero"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "No se admite el tipo de revisión de integridad; no se verifica la integridad del fichero"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Se alcanzó el límite de uso de memoria"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "No se reconoce el formato del fichero"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Opciones sin soporte"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Los datos comprimidos están corruptos"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Fin de entrada inesperado"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Se requieren %s MiB de memoria. Se desactiva el limitador."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "Se requieren %s MiB de memoria. El límite es %s."
#: src/xz/message.c:1070
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: Cadena de filtro: %s\n"
#: src/xz/message.c:1080
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Intente `%s --help' para obtener más información."
#: src/xz/message.c:1106
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -612,17 +627,17 @@ msgstr ""
"Comprime o descomprime FICHEROs en el formato .xz.\n"
"\n"
#: src/xz/message.c:1113
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr ""
"Los argumentos obligatorios para las opciones largas también son\n"
"obligatorios para las opciones cortas.\n"
#: src/xz/message.c:1117
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Modo de operación:\n"
#: src/xz/message.c:1120
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -634,7 +649,7 @@ msgstr ""
" -t, --test prueba la integridad del fichero comprimido\n"
" -l, --list lista la información sobre los ficheros .xz"
#: src/xz/message.c:1126
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -642,7 +657,7 @@ msgstr ""
"\n"
" Modificadores de operación:\n"
#: src/xz/message.c:1129
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -654,7 +669,7 @@ msgstr ""
" -c, --stdout escribe a la entrada estándar y no borra los ficheros\n"
" de entrada"
#: src/xz/message.c:1138
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -662,7 +677,7 @@ msgstr ""
" --single-stream solo descomprime el primer flujo, y descarta\n"
" silenciosamente los posibles datos de entrada restantes"
#: src/xz/message.c:1141
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -679,7 +694,7 @@ msgstr ""
" terminar con el carácter de línea nueva\n"
" --files0[=FICH] como --files pero usa el carácter nulo como terminador"
#: src/xz/message.c:1150
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -687,7 +702,7 @@ msgstr ""
"\n"
" Opciones básicas de compresión y formato de fichero:\n"
#: src/xz/message.c:1152
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -701,11 +716,11 @@ msgstr ""
" `none' (usar con precaución),\n"
" `crc32', `crc64' (por defecto), o `sha256'"
#: src/xz/message.c:1157
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check no hace la verificación de integridad al descomprimir"
#: src/xz/message.c:1161
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -714,7 +729,7 @@ msgstr ""
" ¡Considere el uso de memoria del compresor *y*\n"
" del descompresor antes de usar 7-9!"
#: src/xz/message.c:1165
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -723,7 +738,7 @@ msgstr ""
" tiempo de procesamiento; no afecta los requisitos\n"
" de memoria del descompresor"
#: src/xz/message.c:1169
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -732,7 +747,7 @@ msgstr ""
" establezca a 0 para usar tantos hilos como hayan\n"
" núcleos de procesador"
#: src/xz/message.c:1174
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -743,7 +758,7 @@ msgstr ""
" de entrada; use esta opción para establecer el tamaño\n"
" de bloque para la compresión con hilos"
#: src/xz/message.c:1178
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -753,7 +768,7 @@ msgstr ""
" inicia un nuevo bloque .xz después de cada intervalo\n"
" dado, separado por comas, de datos sin comprimir"
#: src/xz/message.c:1182
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -766,7 +781,7 @@ msgstr ""
" produciría un bloqueo, todos los datos pendientes son\n"
" descartados"
#: src/xz/message.c:1188
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -786,7 +801,7 @@ msgstr ""
" anteriores; el LÍMITE está en bytes, % de RAM,\n"
" o 0 para valores por defecto"
#: src/xz/message.c:1197
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -795,7 +810,7 @@ msgstr ""
" uso de memoria, muestra un error en lugar de ajustar\n"
" los valores hacia abajo"
#: src/xz/message.c:1203
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -803,7 +818,7 @@ msgstr ""
"\n"
" Cadena de filtros para compresión (alternativa a valores predefinidos):"
#: src/xz/message.c:1212
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -834,7 +849,7 @@ msgstr ""
" depth=NÚM profundidad máxima de búsqueda;\n"
" 0=automática (por defecto)"
#: src/xz/message.c:1227
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -859,7 +874,7 @@ msgstr ""
" start=NÚM inicio de desplazamiento para\n"
" conversiones (por defecto=0)"
#: src/xz/message.c:1240
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -871,7 +886,7 @@ msgstr ""
" dist=NÚM distancia entre bytes que se restan\n"
" uno del otro (1-256; 1)"
#: src/xz/message.c:1248
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -879,7 +894,7 @@ msgstr ""
"\n"
" Otras opciones:\n"
#: src/xz/message.c:1251
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -887,15 +902,15 @@ msgstr ""
" -q, --quiet suprime avisos; use dos veces para suprimir errores\n"
" -v, --verbose detallado; use dos veces para obtener aún más detalle"
#: src/xz/message.c:1256
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn los avisos no afectan el estado de la salida"
#: src/xz/message.c:1258
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot usa mensajes analizables por máquina (útil para scripts)"
#: src/xz/message.c:1261
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -903,7 +918,7 @@ msgstr ""
" --info-memory muestra la cantidad total de RAM y los límites de uso\n"
" de memoria activos, y termina"
#: src/xz/message.c:1264
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -911,7 +926,7 @@ msgstr ""
" -h, --help muestra la ayuda corta (solo muestra las opciones básicas)\n"
" -H, --long-help muestra esta ayuda detallada y termina"
#: src/xz/message.c:1268
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -919,11 +934,11 @@ msgstr ""
" -h, --help muestra esta ayuda corta y termina\n"
" -H, --long-help muestra la ayuda larga (además muestra opciones avanzadas)"
#: src/xz/message.c:1273
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version muestra el número de versión y termina"
#: src/xz/message.c:1275
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -935,19 +950,19 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1281
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr ""
"Reporte errores a <%s> (en inglés o finlandés).\n"
"Reporte errores de traducción al español a <es@tp.org.es>.\n"
#: src/xz/message.c:1283
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "Sitio web de %s: <%s>\n"
#: src/xz/message.c:1287
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "ESTA ES UNA VERSIÓN EN DESARROLLO Y NO ESTÁ LISTA PARA USO EN PRODUCCIÓN."
@ -966,36 +981,26 @@ msgstr "%s: Nombre de opción inválido"
msgid "%s: Invalid option value"
msgstr "%s: Valor de opción inválido"
#: src/xz/options.c:286
#: src/xz/options.c:247
#, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "No se admite el valor predefinido LZMA1/LZMA2: %s"
#: src/xz/options.c:394
#: src/xz/options.c:355
msgid "The sum of lc and lp must not exceed 4"
msgstr "La suma de lc y lp no debe exceder 4"
#: src/xz/options.c:398
#, c-format
msgid "The selected match finder requires at least nice=%<PRIu32>"
msgstr "El buscador de coincidencias seleccionado requiere por lo menos nice=%<PRIu32>"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: Con --format=raw, se requiere --suffix=.SUF a menos que se escriba a la salida estándar"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: El nombre de fichero tiene un sufijo desconocido, se salta"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: El fichero ya tiene un sufijo `%s', se salta"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: Sufijo de nombre de fichero inválido"
@ -1035,6 +1040,9 @@ msgstr "Falló la escritura a la salida estándar"
msgid "Unknown error"
msgstr "Error desconocido"
#~ msgid "The selected match finder requires at least nice=%<PRIu32>"
#~ msgstr "El buscador de coincidencias seleccionado requiere por lo menos nice=%<PRIu32>"
#~ msgid "Memory usage limit for compression: "
#~ msgstr "Límite de uso de memoria para compresión: "

632
po/fr.po

File diff suppressed because it is too large Load Diff

222
po/hr.po
View File

@ -1,13 +1,13 @@
# Croatian translation of xz.
# This file is put in the public domain.
#
# Božidar Putanec <bozidarp@yahoo.com>, 2020, 2022.
# Božidar Putanec <bozidarp@yahoo.com>, 2020, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre2\n"
"Project-Id-Version: xz-5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-12-03 00:34+0800\n"
"PO-Revision-Date: 2022-12-02 19:30-0800\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-20 09:23+0200\n"
"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
"Language: hr\n"
@ -16,53 +16,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.2\n"
"X-Generator: Poedit 3.3.2\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: nevaljani argument za --block-list"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: Previše argumenata za --block-list"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 se može koristiti samo kao zadnji element za --block-list"
#: src/xz/args.c:436
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: Nepoznati tip formata datoteke"
#: src/xz/args.c:459 src/xz/args.c:467
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: Nepodržani tip provjere integriteta"
#: src/xz/args.c:503
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Samo jednu datoteku smijete navesti uz opcije „--files” ili „--files0”."
#: src/xz/args.c:571
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "Varijabla okoline %s sadrži previše argumenata"
#: src/xz/args.c:673
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Tijekom izrade programa onemogućena je podrška za kompresiju"
#: src/xz/args.c:680
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Tijekom izrade programa onemogućena je podrška za dekompresiju"
#: src/xz/args.c:686
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "Kompresija lzip datoteka (.lz) nije podržana"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "Uz opciju --format=raw i ako ne piše na standardni izlaz, --suffix=.SUF je nužan"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "Moguće je najviše do četiri filtara"
@ -134,11 +149,11 @@ msgstr "Prilagođena je veličina LZMA%c rječnika od %s na %s da se ne premaši
msgid "Error creating a pipe: %s"
msgstr "Greška pri stvaranju cijevi: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Nije uspjelo omogućiti sandbox"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: poll() nije uspjela: %s"
@ -153,111 +168,111 @@ msgstr "%s: poll() nije uspjela: %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Izgleda da je datoteka pomaknuta -- ne briše se"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: Brisanje nije moguće: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Promijeniti vlasnika datoteke nije moguće: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: Promijeniti grupu datoteke nije moguće: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Nije moguće postaviti prava dostupa: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Greška pri dobavljanju statusnih flagova datoteke iz standardnog ulaza: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: To je simbolička poveznica, preskačemo"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: To je direktorij, preskačemo"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: To nije regularna datoteka, preskačemo"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Datoteka ima postavljen setuid ili setgid bit, preskačemo"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Datoteka ima postavljen sticky bit, preskačemo"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: Ulazna datoteka ima više od jedne tvrde poveznice, preskačemo"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Prazna datoteka, preskačemo"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Greška pri vraćanju statusnih flagova na standardni ulaz: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Greška pri dobavljanju statusnih flagova datoteke iz standardnog izlazu: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Greška pri vraćanju O_APPEND flagova na standardni izlaz: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: Nije uspjelo zatvoriti datoteku: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: Poziciona greška pri pokušaju stvaranja raštrkane datoteke: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: Greška pri čitanju: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: Greška pozicioniranja u datoteci: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: Neočekivani kraj datoteke"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: Greška pri pisanju: %s"
@ -476,26 +491,26 @@ msgstr "%s: Premala, a da bi bila valjana .xz datoteka"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:730
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr " Tok Blok Komprimirano Dekomprimir Omjer Kontr Datoteka"
#: src/xz/list.c:1025 src/xz/list.c:1203
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Da"
#: src/xz/list.c:1025 src/xz/list.c:1203
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "Ne"
#: src/xz/list.c:1027 src/xz/list.c:1205
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Potrebna je inačica XY Utils: %s ili viša\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1178
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
@ -503,15 +518,15 @@ msgstr[0] "%s datoteka\n"
msgstr[1] "%s datoteke\n"
msgstr[2] "%s datoteka\n"
#: src/xz/list.c:1191
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Ukupno:"
#: src/xz/list.c:1269
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list radi samo sa .xz datoteke (--format=xz ili --format=auto)"
#: src/xz/list.c:1275
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list ne podržava čitanje iz standardnog izlaza"
@ -542,68 +557,68 @@ msgstr "Nije moguće čitati podatke iz standardnog ulaza dok se čitaju imena d
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Interna greška (bug)"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "Nije moguće uspostaviti rukovatelje signala"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "Nema provjere integriteta -- ne provjeravamo integritet datoteke"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Nepodržani tip provjere integriteta -- ne provjeravamo integritet datoteke"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Dostignuto je ograničenje za korištenje memorije"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "Format datoteke nije prepoznat"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Nepodržane opcije"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Komprimirani podaci su oštećeni"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Neočekivani kraj ulaznih podataka"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "%s MiB memorije je potrebno. Ograničenje je onemogućeno."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "%s MiB memorije je potrebno. Ograničenje je %s."
#: src/xz/message.c:915
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: Lanac filtara: %s\n"
#: src/xz/message.c:926
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Pokušajte s „`%s --help“ za pomoć i više informacija."
#: src/xz/message.c:952
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -614,15 +629,15 @@ msgstr ""
"Komprimira ili dekomprimira DATOTEKE u .xz formatu.\n"
"\n"
#: src/xz/message.c:959
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "Obvezni argumenti za duge opcije obvezni su također i za kratke opcije.\n"
msgstr "Obvezni argumenti za duge opcije, obvezni su i za kratke opcije.\n"
#: src/xz/message.c:963
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Način rada:\n"
#: src/xz/message.c:966
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -634,7 +649,7 @@ msgstr ""
" -t, --test testira integritet komprimirane datoteke\n"
" -l, --list ispiše podatke o .xz datotekama"
#: src/xz/message.c:972
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -642,7 +657,7 @@ msgstr ""
"\n"
" Modifikatori načina rada:\n"
#: src/xz/message.c:975
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -650,11 +665,11 @@ msgid ""
msgstr ""
" -k, --keep zadrži (ne briše) navedene ulazne datoteke\n"
" -f, --force piše preko izlaznih datoteka i\n"
" preko (de)komprimiranih poveznica \n"
" preko (de)komprimiranih poveznica\n"
" -c, --stdout piše na standardni izlaz i ne briše\n"
" ulazne datoteke"
#: src/xz/message.c:984
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -662,7 +677,7 @@ msgstr ""
" --single-stream dekomprimira samo prvi tok i nijemo\n"
" zanemari moguće preostale ulazne podatke"
#: src/xz/message.c:987
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -679,7 +694,7 @@ msgstr ""
" sa znakom novog reda\n"
" --files0[=DATOTEKA] kao --files, ali popis datoteka završi s NULL znakom"
#: src/xz/message.c:996
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -687,7 +702,7 @@ msgstr ""
"\n"
" Osnovne opcije za format datoteka i kompresiju:\n"
#: src/xz/message.c:998
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -699,11 +714,11 @@ msgstr ""
" -C, --check=KONTROLA tip provjere integriteta: „none” (koristite s oprezom),\n"
" „crc32”, „crc64” (zadano), ili „sha256”"
#: src/xz/message.c:1003
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check ne verificira provjeru integriteta pri dekompresiji"
#: src/xz/message.c:1007
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -711,7 +726,7 @@ msgstr ""
" -0 ... -9 pretpostavke za kompresiju; zadano je 6; uzmite u obzir\n"
" upotrebu memorije za (de)kompresor prije upotrebe 7-9!"
#: src/xz/message.c:1011
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -719,7 +734,7 @@ msgstr ""
" -e, --extreme pokuša poboljšati omjer kompresije koristeći više CPU\n"
" vremena; ne utječe na potrebnu memoriju za dekompresiju"
#: src/xz/message.c:1015
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -727,7 +742,7 @@ msgstr ""
" -T, --threads=BROJ rabi ne više od BROJ dretvi; zadano je 1; postavkom 0\n"
" za BROJ koristi se toliko dretvi koliko CPU ima jezgri"
#: src/xz/message.c:1020
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -737,7 +752,7 @@ msgstr ""
" ulaznih podataka; ovo rabite za postavljanje\n"
" veličine bloka za kompresiju s dretvama"
#: src/xz/message.c:1024
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -747,7 +762,7 @@ msgstr ""
" VELIČINE nekomprimiranih ulaznih podataka;\n"
" VELIČINE su zarezom odvojene"
#: src/xz/message.c:1028
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -759,7 +774,7 @@ msgstr ""
" čitanje bi blokiralo ulaz, svi podaci na\n"
" čekanju se isprazne iz kodera na izlaz"
#: src/xz/message.c:1034
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -777,7 +792,7 @@ msgstr ""
" dekompresiju, dretvama dekompresiju, ili sve ovo;\n"
" GRANICA je u bajtima, % RAM, ili 0 za zadano"
#: src/xz/message.c:1043
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -786,7 +801,7 @@ msgstr ""
" upotrebe memorije, završi s greškom umjesto da\n"
" prilagodi postavke shodno ograničenju memorije"
#: src/xz/message.c:1049
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -794,7 +809,7 @@ msgstr ""
"\n"
" Prilagođeni lanac filtara za kompresiju (alternativa korištenju pretpostavki):"
#: src/xz/message.c:1058
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -823,7 +838,7 @@ msgstr ""
" mf=IME podudarač (hc3, hc4, bt2, bt3, bt4; bt4)\n"
" depth=BROJ max. dubina traženja; 0=automatski (default)"
#: src/xz/message.c:1073
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -847,7 +862,7 @@ msgstr ""
" Valjane OPCIJE za BCJ filtre:\n"
" start=BROJ početni offset za konverzije (zadano=0)"
#: src/xz/message.c:1086
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -860,7 +875,7 @@ msgstr ""
" dist=BROJ razmak između bajtova koji se oduzimaju\n"
" jedan od drugog (1-256; 1)"
#: src/xz/message.c:1094
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -868,7 +883,7 @@ msgstr ""
"\n"
" Ostale opcije:\n"
#: src/xz/message.c:1097
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -876,15 +891,15 @@ msgstr ""
" -q, --quiet izostavi upozorenja; „-qq” izostavi i greške\n"
" -v, --verbose opširnije informira; „=vv” još više informira"
#: src/xz/message.c:1102
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn upozorenja nemaju utjecaja na status završetka (izlaza)"
#: src/xz/message.c:1104
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot poruke u strojnom formatu (korisno za skripte)"
#: src/xz/message.c:1107
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -892,7 +907,7 @@ msgstr ""
" --info-memory pokaže ukupnu količinu RAM-a i trenutno\n"
" aktivna ograničenja korištenja memorije, pa iziđe"
#: src/xz/message.c:1110
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -900,7 +915,7 @@ msgstr ""
" -h, --help prikaže kratku pomoć (izlista samo osnovne opcije)\n"
" -H, --long-help prikaže ovu dugačku pomoć i iziđe"
#: src/xz/message.c:1114
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -908,11 +923,11 @@ msgstr ""
" -h, --help prikaže ovu kratku pomoć i iziđe\n"
" -H, --long-help prikaže dugačku pomoć (izlista i napredne opcije)"
#: src/xz/message.c:1119
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version prikaže informacije o inačici i iziđe"
#: src/xz/message.c:1121
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -924,19 +939,19 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1127
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "Greške prijavite na <%s> (na engleskom ili finskom).\n"
#: src/xz/message.c:1129
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr ""
"%s matična mrežna stranica: <%s>\n"
"Pogreške u prijevodu i vaše prijedloge javite na <lokalizacija@linux.hr>.\n"
#: src/xz/message.c:1133
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "OVO JE RAZVOJNA INAČICA I NIJE NAMIJENJENA ZA PROIZVODNJU."
@ -964,22 +979,17 @@ msgstr "Nepodržana LZMA1/LZMA2 pretpostavka: %s"
msgid "The sum of lc and lp must not exceed 4"
msgstr "Zbroj lc i lp ne smije biti veći od 4"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: S/uz --format=raw, --suffix=.SUF je nužan osim ako se piše na standardni izlaz"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Ime datoteke nema poznati sufiks, preskačemo"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Datoteka već ima „%s” sufiks, preskačemo"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: Nevaljani sufiks imena datoteke"

332
po/ko.po
View File

@ -1,13 +1,13 @@
# Korean translation for the xz.
# This file is put in the public domain.
# Seong-ho Cho <darkcircle.0426@gmail.com>, 2019, 2022.
# Seong-ho Cho <darkcircle.0426@gmail.com>, 2019, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n"
"PO-Revision-Date: 2022-11-15 23:00+0900\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-20 10:59+0900\n"
"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
"Language-Team: Korean <translation-team-ko@googlegroups.com>\n"
"Language: ko\n"
@ -16,53 +16,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 2.3.1\n"
"X-Generator: Poedit 3.0.1\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: --block-list의 인자값이 잘못됨"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: --block-list 인자 갯수가 너무 많음"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 값은 --block-list의 마지막 원소로만 사용할 수 있습니다"
#: src/xz/args.c:424
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: 알 수 없는 파일 형식"
#: src/xz/args.c:447 src/xz/args.c:455
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: 지원하지 않는 무결성 검사 형식"
#: src/xz/args.c:491
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "`--files' 또는 `--files0' 옵션으로 하나의 파일만 지정할 수 있습니다."
#: src/xz/args.c:559
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "%s 환경 변수에 너무 많은 인자 값이 들어있습니다"
#: src/xz/args.c:661
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "빌드 시점에 압축 기능을 비활성했습니다"
#: src/xz/args.c:668
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "빌드 시점에 압축 해제 기능을 비활성했습니다"
#: src/xz/args.c:674
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "lzip 파일(.lz) 압축은 지원하지 않습니다"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "표준 출력으로 기록하지 않는 한 --format=raw, --suffix=.SUF 옵션이 필요합니다"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "최대 필터 갯수는 4 입니다"
@ -134,11 +149,11 @@ msgstr "메모리 사용량 %4$s MiB 제한을 넘지 않으려 %2$s MiB에서 %
msgid "Error creating a pipe: %s"
msgstr "파이프 생성 오류: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "샌드 박스 활성화 실패"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: poll() 실패: %s"
@ -153,252 +168,252 @@ msgstr "%s: poll() 실패: %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: 파일을 이동한 것 같음, 제거 안함"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: 제거할 수 없음: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: 파일 소유자를 설정할 수 없음: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: 파일 소유 그룹을 설정할 수 없음: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: 파일 권한을 설정할 수 없음: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "표준 입력에서 파일 상태 플래그 가져오기 오류: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: 심볼릭 링크, 건너뜀"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: 디렉터리입니다, 건너뜀"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: 일반 파일 아님, 건너뜀"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: setuid 또는 setgid 비트 설정 있음, 건너뜀"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: 끈적이 비트 설정이 있는 파일, 건너뜀"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: 입력 파일에 하나 이상의 하드링크가 있습니다, 건너뜀"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "파일 이름 없음, 건너뜀"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "표준 입력으로의 상태 플래그 복원 오류: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "표준 출력에서 파일 상태 플래그 가져오기 오류: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "표준 출력으로의 O_APPEND 플래그 복원 오류: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: 파일 닫기 실패: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: 분할 파일 생성 시도시 탐색 실패: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: 읽기 오류: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: 파일 탐색 오류: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: 예상치 못한 파일의 끝"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: 쓰기 오류: %s"
#: src/xz/hardware.c:225
#: src/xz/hardware.c:238
msgid "Disabled"
msgstr "사용 안함"
#: src/xz/hardware.c:256
#: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):"
msgstr "물리 메모리 양(RAM):"
#: src/xz/hardware.c:257
#: src/xz/hardware.c:270
msgid "Number of processor threads:"
msgstr "프로세서 스레드 수:"
#: src/xz/hardware.c:258
#: src/xz/hardware.c:271
msgid "Compression:"
msgstr "압축:"
#: src/xz/hardware.c:259
#: src/xz/hardware.c:272
msgid "Decompression:"
msgstr "압축해제:"
#: src/xz/hardware.c:260
#: src/xz/hardware.c:273
msgid "Multi-threaded decompression:"
msgstr "멀티 스레드 압축 해제:"
#: src/xz/hardware.c:261
#: src/xz/hardware.c:274
msgid "Default for -T0:"
msgstr "-T0 기본값:"
#: src/xz/hardware.c:279
#: src/xz/hardware.c:292
msgid "Hardware information:"
msgstr "하드웨어 정보:"
#: src/xz/hardware.c:286
#: src/xz/hardware.c:299
msgid "Memory usage limits:"
msgstr "메모리 사용량 제한:"
#: src/xz/list.c:65
#: src/xz/list.c:68
msgid "Streams:"
msgstr "스트림:"
#: src/xz/list.c:66
#: src/xz/list.c:69
msgid "Blocks:"
msgstr "블록 수:"
#: src/xz/list.c:67
#: src/xz/list.c:70
msgid "Compressed size:"
msgstr "압축 용량:"
#: src/xz/list.c:68
#: src/xz/list.c:71
msgid "Uncompressed size:"
msgstr "압축해제 용량:"
#: src/xz/list.c:69
#: src/xz/list.c:72
msgid "Ratio:"
msgstr "압축율:"
#: src/xz/list.c:70
#: src/xz/list.c:73
msgid "Check:"
msgstr "검사:"
#: src/xz/list.c:71
#: src/xz/list.c:74
msgid "Stream Padding:"
msgstr "스트림 패딩:"
#: src/xz/list.c:72
#: src/xz/list.c:75
msgid "Memory needed:"
msgstr "요구 메모리:"
#: src/xz/list.c:73
#: src/xz/list.c:76
msgid "Sizes in headers:"
msgstr "헤더 길이:"
#: src/xz/list.c:76
#: src/xz/list.c:79
msgid "Number of files:"
msgstr "파일 갯수:"
#: src/xz/list.c:119
#: src/xz/list.c:122
msgid "Stream"
msgstr "스트림"
#: src/xz/list.c:120
#: src/xz/list.c:123
msgid "Block"
msgstr "블록"
#: src/xz/list.c:121
#: src/xz/list.c:124
msgid "Blocks"
msgstr "블록"
#: src/xz/list.c:122
#: src/xz/list.c:125
msgid "CompOffset"
msgstr "압축오프셋"
#: src/xz/list.c:123
#: src/xz/list.c:126
msgid "UncompOffset"
msgstr "압축해제오프셋"
#: src/xz/list.c:124
#: src/xz/list.c:127
msgid "CompSize"
msgstr "압축크기"
#: src/xz/list.c:125
#: src/xz/list.c:128
msgid "UncompSize"
msgstr "압축해제크기"
#: src/xz/list.c:126
#: src/xz/list.c:129
msgid "TotalSize"
msgstr "총크기"
#: src/xz/list.c:127
#: src/xz/list.c:130
msgid "Ratio"
msgstr "압축율"
#: src/xz/list.c:128
#: src/xz/list.c:131
msgid "Check"
msgstr "검사"
#: src/xz/list.c:129
#: src/xz/list.c:132
msgid "CheckVal"
msgstr "검사값"
#: src/xz/list.c:130
#: src/xz/list.c:133
msgid "Padding"
msgstr "패딩"
#: src/xz/list.c:131
#: src/xz/list.c:134
msgid "Header"
msgstr "헤더"
#: src/xz/list.c:132
#: src/xz/list.c:135
msgid "Flags"
msgstr "플래그"
#: src/xz/list.c:133
#: src/xz/list.c:136
msgid "MemUsage"
msgstr "메모리사용"
#: src/xz/list.c:134
#: src/xz/list.c:137
msgid "Filters"
msgstr "필터"
@ -406,7 +421,7 @@ msgstr "필터"
#. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166
#: src/xz/list.c:169
msgid "None"
msgstr "없음"
@ -414,60 +429,60 @@ msgstr "없음"
#. but the Check ID is known (here 2). In older xz version these
#. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172
#: src/xz/list.c:175
msgid "Unknown-2"
msgstr "알 수 없음-2"
#: src/xz/list.c:173
#: src/xz/list.c:176
msgid "Unknown-3"
msgstr "알 수 없음-3"
#: src/xz/list.c:175
#: src/xz/list.c:178
msgid "Unknown-5"
msgstr "알 수 없음-5"
#: src/xz/list.c:176
#: src/xz/list.c:179
msgid "Unknown-6"
msgstr "알 수 없음-6"
#: src/xz/list.c:177
#: src/xz/list.c:180
msgid "Unknown-7"
msgstr "알 수 없음-7"
#: src/xz/list.c:178
#: src/xz/list.c:181
msgid "Unknown-8"
msgstr "알 수 없음-8"
#: src/xz/list.c:179
#: src/xz/list.c:182
msgid "Unknown-9"
msgstr "알 수 없음-9"
#: src/xz/list.c:181
#: src/xz/list.c:184
msgid "Unknown-11"
msgstr "알 수 없음-11"
#: src/xz/list.c:182
#: src/xz/list.c:185
msgid "Unknown-12"
msgstr "알 수 없음-12"
#: src/xz/list.c:183
#: src/xz/list.c:186
msgid "Unknown-13"
msgstr "알 수 없음-13"
#: src/xz/list.c:184
#: src/xz/list.c:187
msgid "Unknown-14"
msgstr "알 수 없음-14"
#: src/xz/list.c:185
#: src/xz/list.c:188
msgid "Unknown-15"
msgstr "알 수 없음-15"
#: src/xz/list.c:348
#: src/xz/list.c:351
#, c-format
msgid "%s: File is empty"
msgstr "%s: 파일 내용 없음"
#: src/xz/list.c:353
#: src/xz/list.c:356
#, c-format
msgid "%s: Too small to be a valid .xz file"
msgstr "%s: 유효한 .xz 파일로 보기에는 너무 작습니다"
@ -476,41 +491,41 @@ msgstr "%s: 유효한 .xz 파일로 보기에는 너무 작습니다"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:722
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "스트림 블록 압축 압축해제 압축율 검사 파일 이름"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "예"
# 주: 아니오가 아니라 아니요가 맞는 표현
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "아니요"
#: src/xz/list.c:1018 src/xz/list.c:1195
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " 최소 XZ Utils 버전: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1168
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
msgstr[0] "파일 %s개\n"
#: src/xz/list.c:1181
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "총:"
#: src/xz/list.c:1259
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list 옵션은 .xz 파일에만 동작합니다(--format=xz 또는 --format=auto)"
#: src/xz/list.c:1265
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list 옵션은 표준 입력 읽기를 지원하지 않습니다"
@ -541,68 +556,68 @@ msgstr "표준 출력에서 파일 이름을 읽을 때 표준 입력에서 데
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "내부 오류(버그)"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "시그널 처리자를 준비할 수 없습니다"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "무결성 검사 안함. 파일 무결성을 검증하지 않습니다"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "지원하지 않는 무결성 검사 형식. 파일 무결성을 검증하지 않습니다"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "메모리 사용량 한계에 도달했습니다"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "파일 형식을 인식할 수 없음"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "지원하지 않는 옵션"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "압축 데이터 깨짐"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "예상치 못한 입력 끝"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "%s MiB 메모리 용량이 필요합니다. 제한을 비활성합니다."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "%s MiB 메모리 용량이 필요합니다. 제한 값은 %s 입니다."
#: src/xz/message.c:1070
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: 필터 체인: %s\n"
#: src/xz/message.c:1080
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "자세한 사용법은 `%s --help'를 입력하십시오."
#: src/xz/message.c:1106
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -613,15 +628,15 @@ msgstr ""
".xz 형식으로 <파일> 다수를 압축(해제)합니다.\n"
"\n"
#: src/xz/message.c:1113
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "긴 옵션 버전의 필수 인자는 짧은 옵션 버전에도 해당합니다.\n"
#: src/xz/message.c:1117
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " 동작 방식:\n"
#: src/xz/message.c:1120
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -633,7 +648,7 @@ msgstr ""
" -t, --test 압축 파일 무결성 검사\n"
" -l, --list .xz 파일 정보 출력"
#: src/xz/message.c:1126
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -641,7 +656,7 @@ msgstr ""
"\n"
" 동작 지정:\n"
#: src/xz/message.c:1129
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -651,7 +666,7 @@ msgstr ""
" -f, --force 출력 파일을 강제로 덮어쓰고 링크도 압축(해제)합니다\n"
" -c, --stdout 표준 출력으로 기록하고 입력 파일을 삭제하지 않습니다"
#: src/xz/message.c:1138
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -659,7 +674,7 @@ msgstr ""
" --single-stream 첫번째 스트림만 압축해제하며, 나머지 입력 데이터는\n"
" 조용히 무시합니다"
#: src/xz/message.c:1141
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -678,7 +693,7 @@ msgstr ""
" --files0[=<파일>]\n"
" --files 옵션과 비슷하지만 NULL 문자로 끝납니다"
#: src/xz/message.c:1150
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -686,7 +701,7 @@ msgstr ""
"\n"
" 기본 파일 형식 및 압축 옵션:\n"
#: src/xz/message.c:1152
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -698,11 +713,11 @@ msgstr ""
" -C, --check=<검사> 무결성 검사 형식: `none'(위험),\n"
" `crc32', `crc64'(기본), `sha256'"
#: src/xz/message.c:1157
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check 압축 해제시 무결성 검사를 수행하지 않습니다"
#: src/xz/message.c:1161
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -710,7 +725,7 @@ msgstr ""
" -0 ... -9 압축 프리셋. 기본값은 6 입니다. 7-9를 사용하려면 입축\n"
" 메모리 사용량*과* 압축 해제 메모리 사용량을 지정하십시오!"
#: src/xz/message.c:1165
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -718,7 +733,7 @@ msgstr ""
" -e, --extreme CPU 점유시간을 더 확보하여 압축률을 개선합니다.\n"
" 압축 해제시 메모리 요구 용량에는 영향을 주지 않습니다"
#: src/xz/message.c:1169
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -728,7 +743,7 @@ msgstr ""
" 실제 프로세서 코어만큼의 스레드를 사용하려면 0 값으로\n"
" 지정합니다"
#: src/xz/message.c:1174
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -738,7 +753,7 @@ msgstr ""
" 모든 <크기>의 입력 다음 새 .xz 블록을 시작합니다.\n"
" 스레드 압축에 블록 크기를 지정할 때 사용합니다"
#: src/xz/message.c:1178
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -748,7 +763,7 @@ msgstr ""
" 콤마로 구분한 연속 지정값 만큼 압축해제한 데이터 용량을\n"
" 넘긴 후 새 .xz 블록을 시작합니다"
#: src/xz/message.c:1182
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -760,7 +775,7 @@ msgstr ""
" 단위 <제한시간>을 넘기면 모든 대기 데이터를\n"
" 플러싱아웃합니다"
#: src/xz/message.c:1188
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -779,7 +794,7 @@ msgstr ""
" 제한값을 설정합니다. <제한용량> 값 단위는 바이트 또는 램\n"
" 용량 백분율이며, 기본 값은 0 입니다"
#: src/xz/message.c:1197
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -787,7 +802,7 @@ msgstr ""
" --no-adjust 압축 설정이 메모리 사용량 제한을 넘어서면\n"
" 설정 값을 줄이는 대신 오류 정보를 나타냅니다"
#: src/xz/message.c:1203
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -795,7 +810,7 @@ msgstr ""
"\n"
" 압축용 개별 필터 체인 설정(사전 설정 사용을 대신함):"
#: src/xz/message.c:1212
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -825,7 +840,7 @@ msgstr ""
" 중 하나. bt4)\n"
" depth=<숫자> 최대 검색 깊이. 0=자동(기본값)"
#: src/xz/message.c:1227
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -849,7 +864,7 @@ msgstr ""
" 모든 BCJ 필터의 유효한 <옵션>:\n"
" start=<숫자> 변환 시작 오프셋(기본값=0)"
#: src/xz/message.c:1240
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -861,7 +876,7 @@ msgstr ""
" dist=<숫자> 각 바이트 값의 차이 값\n"
" (1-256, 1)"
#: src/xz/message.c:1248
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -869,7 +884,7 @@ msgstr ""
"\n"
"기타 옵션:\n"
#: src/xz/message.c:1251
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -877,15 +892,15 @@ msgstr ""
" -q, --quiet 경고 메시지 끔. 오류 메시지도 끄려면 두번 지정합니다\n"
" -v, --verbose 자세히 표시. 더 자세히 표시하려면 두번 지정합니다"
#: src/xz/message.c:1256
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn 경고가 종료 상태에 영향을 주지 않게합니다"
#: src/xz/message.c:1258
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot 기계 해석용 메시지를 사용합니다(스크립트에 적합)"
#: src/xz/message.c:1261
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -893,7 +908,7 @@ msgstr ""
" --info-memory 총 사용 메모리양과 현재 활성 메모리 사용 제한 값을\n"
" 표시하고 빠져나갑니다"
#: src/xz/message.c:1264
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -901,7 +916,7 @@ msgstr ""
" -h, --help 간단한 도움말을 표시합니다(기본 옵션만 나열)\n"
" -H, --long-help 긴 도움말을 표시하고 빠져나갑니다"
#: src/xz/message.c:1268
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -909,11 +924,11 @@ msgstr ""
" -h, --help 간단한 도움말을 표시하고 빠져나갑니다\n"
" -H, --long-help 긴 도움말을 표시합니다(고급 옵션도 나열)"
#: src/xz/message.c:1273
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version 버전 번호를 표시하고 빠져나갑니다"
#: src/xz/message.c:1275
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -925,17 +940,17 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1281
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "<%s> (영문 또는 핀란드어)에 버그를 보고하십시오.\n"
#: src/xz/message.c:1283
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "%s 홈페이지: <%s>\n"
#: src/xz/message.c:1287
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "!! 주의 !! 개발 버전이며 실제 사용 용도가 아닙니다."
@ -954,36 +969,26 @@ msgstr "%s: 잘못된 옵션 이름"
msgid "%s: Invalid option value"
msgstr "%s: 잘못된 옵션 값"
#: src/xz/options.c:286
#: src/xz/options.c:247
#, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "지원하지 않는 LZMA1/LZMA2 프리셋: %s"
#: src/xz/options.c:394
#: src/xz/options.c:355
msgid "The sum of lc and lp must not exceed 4"
msgstr "lc값과 lp값의 합이 4를 초과하면 안됩니다"
#: src/xz/options.c:398
#, c-format
msgid "The selected match finder requires at least nice=%<PRIu32>"
msgstr "선택한 일치 탐색기는 최소한 nice=%<PRIu32> 상태여야합니다"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: 표준 출력으로 기록하지 않는 한 --format=raw, --suffix=.SUF 옵션이 필요합니다"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: 파일 이름에 알 수 없는 확장자 붙음, 건너뜀"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: 파일에 이미 `%s' 확장자가 붙음, 건너뜀"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: 잘못된 파일 이름 확장자"
@ -1023,6 +1028,9 @@ msgstr "표준 출력 기록 실패"
msgid "Unknown error"
msgstr "알 수 없는 오류"
#~ msgid "The selected match finder requires at least nice=%<PRIu32>"
#~ msgstr "선택한 일치 탐색기는 최소한 nice=%<PRIu32> 상태여야합니다"
#~ msgid "Sandbox is disabled due to incompatible command line arguments"
#~ msgstr "비호환 명령행 인자값이 있어 샌드박스를 비활성했습니다"

327
po/pl.po
View File

@ -1,13 +1,13 @@
# Polish translation for xz.
# This file is put in the public domain.
# Jakub Bogusz <qboosh@pld-linux.org>, 2011-2022.
# Jakub Bogusz <qboosh@pld-linux.org>, 2011-2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n"
"PO-Revision-Date: 2022-11-10 18:02+0100\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 21:30+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n"
@ -17,51 +17,66 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: Błędny argument dla --block-list"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: Zbyt dużo argumentów dla --block-list"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 w --block-list może być użyte wyłącznie jako ostatni element"
#: src/xz/args.c:424
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: Nieznany typ formatu pliku"
#: src/xz/args.c:447 src/xz/args.c:455
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: Nieobsługiwany typ kontroli spójności"
#: src/xz/args.c:491
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Wraz z opcją `--files' lub `--files0' można podać tylko jeden plik."
#: src/xz/args.c:559
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "Zmienna środowiskowa %s zawiera zbyt dużo argumentów"
#: src/xz/args.c:661
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Obsługa kompresji została wyłączona na etapie budowania"
#: src/xz/args.c:668
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Obsługa dekompresji została wyłączona na etapie budowania"
#: src/xz/args.c:674
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "Kompresja plików lzip (.lz) nie jest osbługiwana"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "Przy --format=raw i zapisie do pliku wymagana jest opcja --suffix=.ROZ"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "Maksymalna liczba filtrów to cztery"
@ -133,11 +148,11 @@ msgstr "Skorygowano rozmiar słownika LZMA%c z %s MiB do %s MiB aby nie przekroc
msgid "Error creating a pipe: %s"
msgstr "Błąd tworzenia potoku: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Nie udało się włączyć piaskownicy"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: poll() nie powiodło się: %s"
@ -152,252 +167,252 @@ msgstr "%s: poll() nie powiodło się: %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Plik wygląda na przeniesiony, nie zostanie usunięty"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: Nie można usunąć: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Nie można ustawić właściciela pliku: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: Nie można ustawić grupy pliku: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Nie można ustawić uprawnień pliku: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Błąd podczas pobierania flag stanu pliku ze standardowego wejścia: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Jest dowiązaniem symbolicznym, pominięto"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: Jest katalogiem, pominięto"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: Nie jest zwykłym plikiem, pominięto"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Plik ma ustawiony bit setuid lub setgid, pominięto"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Plik ma ustawiony bit sticky, pominięto"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: Plik wejściowy ma więcej niż jedno dowiązanie zwykłe, pominięto"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Pusta nazwa pliku, pominięto"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Błąd podczas odtwarzania flag stanu dla standardowego wejścia: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Błąd podczas pobierania flag stanu pliku ze standardowego wyjścia: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Błąd podczas odtwarzania flagi O_APPEND dla standardowego wyjścia: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: Zamknięcie pliku nie powiodło się: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: Zmiana pozycji nie powiodła się podczas próby utworzenia pliku rzadkiego: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: Błąd odczytu: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: Błąd podczas zmiany pozycji w pliku: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: Nieoczekiwany koniec pliku"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: Błąd zapisu: %s"
#: src/xz/hardware.c:225
#: src/xz/hardware.c:238
msgid "Disabled"
msgstr "Wyłączony"
#: src/xz/hardware.c:256
#: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):"
msgstr "Rozmiar pamięci fizycznej (RAM):"
#: src/xz/hardware.c:257
#: src/xz/hardware.c:270
msgid "Number of processor threads:"
msgstr "Liczba wątków procesora:"
#: src/xz/hardware.c:258
#: src/xz/hardware.c:271
msgid "Compression:"
msgstr "Kompresja:"
#: src/xz/hardware.c:259
#: src/xz/hardware.c:272
msgid "Decompression:"
msgstr "Dekompresja:"
#: src/xz/hardware.c:260
#: src/xz/hardware.c:273
msgid "Multi-threaded decompression:"
msgstr "Dekompresja wielowątkowa:"
#: src/xz/hardware.c:261
#: src/xz/hardware.c:274
msgid "Default for -T0:"
msgstr "Domyślnie dla -T0:"
#: src/xz/hardware.c:279
#: src/xz/hardware.c:292
msgid "Hardware information:"
msgstr "Informacje o sprzęcie:"
#: src/xz/hardware.c:286
#: src/xz/hardware.c:299
msgid "Memory usage limits:"
msgstr "Limity użycia pamięci"
#: src/xz/list.c:65
#: src/xz/list.c:68
msgid "Streams:"
msgstr "Strumienie:"
#: src/xz/list.c:66
#: src/xz/list.c:69
msgid "Blocks:"
msgstr "Bloki:"
#: src/xz/list.c:67
#: src/xz/list.c:70
msgid "Compressed size:"
msgstr "Rozmiar spakowany:"
#: src/xz/list.c:68
#: src/xz/list.c:71
msgid "Uncompressed size:"
msgstr "Rozmiar rozpakowany:"
#: src/xz/list.c:69
#: src/xz/list.c:72
msgid "Ratio:"
msgstr "Współczynnik:"
#: src/xz/list.c:70
#: src/xz/list.c:73
msgid "Check:"
msgstr "Kontrola spójności:"
#: src/xz/list.c:71
#: src/xz/list.c:74
msgid "Stream Padding:"
msgstr "Wyrównanie strumienia:"
#: src/xz/list.c:72
#: src/xz/list.c:75
msgid "Memory needed:"
msgstr "Wymagana pamięć:"
#: src/xz/list.c:73
#: src/xz/list.c:76
msgid "Sizes in headers:"
msgstr "Rozmiar w nagłówkach:"
#: src/xz/list.c:76
#: src/xz/list.c:79
msgid "Number of files:"
msgstr "Liczba plików:"
#: src/xz/list.c:119
#: src/xz/list.c:122
msgid "Stream"
msgstr "Strumień"
#: src/xz/list.c:120
#: src/xz/list.c:123
msgid "Block"
msgstr "Blok"
#: src/xz/list.c:121
#: src/xz/list.c:124
msgid "Blocks"
msgstr "Bloki"
#: src/xz/list.c:122
#: src/xz/list.c:125
msgid "CompOffset"
msgstr "Offset spak."
#: src/xz/list.c:123
#: src/xz/list.c:126
msgid "UncompOffset"
msgstr "Offset rozp."
#: src/xz/list.c:124
#: src/xz/list.c:127
msgid "CompSize"
msgstr "Rozm.spak."
#: src/xz/list.c:125
#: src/xz/list.c:128
msgid "UncompSize"
msgstr "Rozm.rozp."
#: src/xz/list.c:126
#: src/xz/list.c:129
msgid "TotalSize"
msgstr "Rozm.całk."
#: src/xz/list.c:127
#: src/xz/list.c:130
msgid "Ratio"
msgstr "Wsp."
#: src/xz/list.c:128
#: src/xz/list.c:131
msgid "Check"
msgstr "Kontrola"
#: src/xz/list.c:129
#: src/xz/list.c:132
msgid "CheckVal"
msgstr "S.kontr."
#: src/xz/list.c:130
#: src/xz/list.c:133
msgid "Padding"
msgstr "Wyrównanie"
#: src/xz/list.c:131
#: src/xz/list.c:134
msgid "Header"
msgstr "Nagłówek"
#: src/xz/list.c:132
#: src/xz/list.c:135
msgid "Flags"
msgstr "Flagi"
#: src/xz/list.c:133
#: src/xz/list.c:136
msgid "MemUsage"
msgstr "Uż.pamięci"
#: src/xz/list.c:134
#: src/xz/list.c:137
msgid "Filters"
msgstr "Filtry"
@ -405,7 +420,7 @@ msgstr "Filtry"
#. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166
#: src/xz/list.c:169
msgid "None"
msgstr "Brak"
@ -413,60 +428,60 @@ msgstr "Brak"
#. but the Check ID is known (here 2). In older xz version these
#. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172
#: src/xz/list.c:175
msgid "Unknown-2"
msgstr "Nieznany-2"
#: src/xz/list.c:173
#: src/xz/list.c:176
msgid "Unknown-3"
msgstr "Nieznany-3"
#: src/xz/list.c:175
#: src/xz/list.c:178
msgid "Unknown-5"
msgstr "Nieznany-5"
#: src/xz/list.c:176
#: src/xz/list.c:179
msgid "Unknown-6"
msgstr "Nieznany-6"
#: src/xz/list.c:177
#: src/xz/list.c:180
msgid "Unknown-7"
msgstr "Nieznany-7"
#: src/xz/list.c:178
#: src/xz/list.c:181
msgid "Unknown-8"
msgstr "Nieznany-8"
#: src/xz/list.c:179
#: src/xz/list.c:182
msgid "Unknown-9"
msgstr "Nieznany-9"
#: src/xz/list.c:181
#: src/xz/list.c:184
msgid "Unknown-11"
msgstr "Nieznany11"
#: src/xz/list.c:182
#: src/xz/list.c:185
msgid "Unknown-12"
msgstr "Nieznany12"
#: src/xz/list.c:183
#: src/xz/list.c:186
msgid "Unknown-13"
msgstr "Nieznany13"
#: src/xz/list.c:184
#: src/xz/list.c:187
msgid "Unknown-14"
msgstr "Nieznany14"
#: src/xz/list.c:185
#: src/xz/list.c:188
msgid "Unknown-15"
msgstr "Nieznany15"
#: src/xz/list.c:348
#: src/xz/list.c:351
#, c-format
msgid "%s: File is empty"
msgstr "%s: Plik jest pusty"
#: src/xz/list.c:353
#: src/xz/list.c:356
#, c-format
msgid "%s: Too small to be a valid .xz file"
msgstr "%s: Za mały na poprawny plik .xz"
@ -475,26 +490,26 @@ msgstr "%s: Za mały na poprawny plik .xz"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:722
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Strum. Bloki Spakowany Rozpakowany Wsp. Kontrola Nazwa pliku"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Tak"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "Nie"
#: src/xz/list.c:1018 src/xz/list.c:1195
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Minimalna wersja XZ Utils: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1168
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
@ -502,15 +517,15 @@ msgstr[0] "%s plik\n"
msgstr[1] "%s pliki\n"
msgstr[2] "%s plików\n"
#: src/xz/list.c:1181
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Sumarycznie:"
#: src/xz/list.c:1259
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list działa tylko z plikami .xz (--format=xz lub --format=auto)"
#: src/xz/list.c:1265
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list nie obsługuje odczytu ze standardowego wejścia"
@ -541,68 +556,68 @@ msgstr "Nie można odczytać danych ze standardowego wejścia przy czytaniu nazw
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Błąd wewnętrzny"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "Nie można ustawić obsługi sygnałów"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "Brak kontroli spójności; poprawność plików nie będzie weryfikowana"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Nieobsługiwany typ kontroli spójności; poprawność plików nie będzie weryfikowana"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Osiągnięto limit użycia pamięci"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "Nie rozpoznany format pliku"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Nieobsługiwane opcje"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Dane skompresowane są uszkodzone"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Nieoczekiwany koniec wejścia"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Wymagane jest %s MiB pamięci. Limit jest wyłączony."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "Wymagane jest %s MiB pamięci. Limit to %s."
#: src/xz/message.c:1070
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: Łańcuch filtrów: %s\n"
#: src/xz/message.c:1080
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Polecenie `%s --help' pokaże więcej informacji."
#: src/xz/message.c:1106
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -613,17 +628,17 @@ msgstr ""
"Kompresja lub dekompresja PLIKÓW w formacie .xz.\n"
"\n"
#: src/xz/message.c:1113
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr ""
"Argumenty obowiązkowe dla opcji długich są obowiązkowe również dla opcji\n"
"krótkich.\n"
#: src/xz/message.c:1117
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Tryb pracy:\n"
#: src/xz/message.c:1120
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -635,7 +650,7 @@ msgstr ""
" -t, --test sprawdzenie spójności plików skompresowanych\n"
" -l, --list wypisanie informacji o plikach .xz"
#: src/xz/message.c:1126
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -643,7 +658,7 @@ msgstr ""
"\n"
" Modyfikatory operacji:\n"
#: src/xz/message.c:1129
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -653,7 +668,7 @@ msgstr ""
" -f, --force nadpisywanie plików wyjściowych i (de)kompresja dowiązań\n"
" -c, --stdout zapis na standardowe wyjście, nieusuwanie plików wej."
#: src/xz/message.c:1138
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -661,7 +676,7 @@ msgstr ""
" --single-stream dekompresja tylko pierwszego strumienia, ciche\n"
" zignorowanie pozostałych danych wejściowych"
#: src/xz/message.c:1141
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -677,7 +692,7 @@ msgstr ""
" wejścia; muszą być zakończone znakiem nowej linii\n"
" --files0[=PLIK] podobnie do --files, ale znakiem kończącym musi być NUL"
#: src/xz/message.c:1150
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -685,7 +700,7 @@ msgstr ""
"\n"
" Podstawowe opcje formatu pliku i kompresji:\n"
#: src/xz/message.c:1152
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -697,11 +712,11 @@ msgstr ""
" -C, --check=TEST typ kontroli spójności: `none' (ostrożnie!),\n"
" `crc32', `crc64' (domyślny) lub `sha256'"
#: src/xz/message.c:1157
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check bez kontroli sprawdzania integralności przy dekompresji"
#: src/xz/message.c:1161
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -710,7 +725,7 @@ msgstr ""
" użyciem wartości 7-9 należy wziąć pod uwagę wykorzystanie\n"
" pamięci przy kompresji *oraz* dekompresji!"
#: src/xz/message.c:1165
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -719,7 +734,7 @@ msgstr ""
" ilości czasu procesora; nie wpływa na wymagania\n"
" pamięciowe dekompresora"
#: src/xz/message.c:1169
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -727,7 +742,7 @@ msgstr ""
" -T, --threads=ILE użycie maksymalnie ILU wątków; domyślnie 1; 0 oznacza\n"
" tyle, ile jest rdzeni procesorów"
#: src/xz/message.c:1174
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -738,7 +753,7 @@ msgstr ""
" opcja służy do ustawienia rozmiaru bloku dla kompresji\n"
" wielowątkowej"
#: src/xz/message.c:1178
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -748,7 +763,7 @@ msgstr ""
" rozpoczęcie nowego bloku .xz po rozdzielonych przecinkiem\n"
" przedziałach danych nieskompresowanych"
#: src/xz/message.c:1182
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -760,7 +775,7 @@ msgstr ""
" ostatniegu zapisu bloku, a odczyt kolejnych danych byłby\n"
" blokujący, wszystkie gotowe dane są zapisywane"
#: src/xz/message.c:1188
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -779,7 +794,7 @@ msgstr ""
" dekompresji, dekompresji wielowątkowej lub wszystkich;\n"
" LIMIT jest w bajtach, % RAM lub 0 dla limitów domyślnych"
#: src/xz/message.c:1197
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -788,7 +803,7 @@ msgstr ""
" pamięci, zostanie zgłoszony błąd zamiast zmniejszania\n"
" ustawień"
#: src/xz/message.c:1203
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -796,7 +811,7 @@ msgstr ""
"\n"
" Łańcuch własnych filtrów do kompresji (alternatywa do używania -0 .. -9):"
#: src/xz/message.c:1212
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -825,7 +840,7 @@ msgstr ""
" mf=NAZWA dopasowywacz (hc3, hc4, bt2, bt3, bt4; bt4)\n"
" depth=ILE maks. głębokość szukania; 0=auto (domyślne)"
#: src/xz/message.c:1227
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -849,7 +864,7 @@ msgstr ""
" Poprawne OPCJE dla wszystkich filtrów BCJ:\n"
" start=ILE offset początku konwersji (domyślnie=0)"
#: src/xz/message.c:1240
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -861,7 +876,7 @@ msgstr ""
" dist=ILE odległość między bajtami odejmowanymi od\n"
" siebie (1-256; 1)"
#: src/xz/message.c:1248
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -869,7 +884,7 @@ msgstr ""
"\n"
" Inne opcje:\n"
#: src/xz/message.c:1251
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -877,15 +892,15 @@ msgstr ""
" -q, --quiet pominięcie ostrzeżeń; dwukrotne podanie pomija też błędy\n"
" -v, --verbose więcej informacji; dwukrotne podanie to jeszcze więcej"
#: src/xz/message.c:1256
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn ostrzeżenia nie mają wpływu na status zakończenia"
#: src/xz/message.c:1258
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot komunikaty w formacie dla maszyny (do skryptów)"
#: src/xz/message.c:1261
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -893,7 +908,7 @@ msgstr ""
" --info-memory wyświetlenie całkowitej ilości pamięci RAM oraz aktualnie\n"
" aktywnych limitów pamięci i zakończenie pracy"
#: src/xz/message.c:1264
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -901,7 +916,7 @@ msgstr ""
" -h, --help wyświetlenie krótkiego opisu (tylko podstawowe opcje)\n"
" -H, --long-help wyświetlenie tego długiego opisu i zakończenie"
#: src/xz/message.c:1268
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -909,11 +924,11 @@ msgstr ""
" -h, --help wyświetlenie tego krótkiego opisu i zakończenie\n"
" -H, --long-help wyświetlenie długiego opisu (także opcje zaawansowane)"
#: src/xz/message.c:1273
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version wyświetlenie informacji o wersji i zakończenie"
#: src/xz/message.c:1275
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -925,7 +940,7 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1281
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr ""
@ -934,12 +949,12 @@ msgstr ""
"Błędy w tłumaczeniu prosimy zgłaszać na adres\n"
"<translation-team-pl@lists.sourceforge.net>.\n"
#: src/xz/message.c:1283
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "Strona domowa %s: <%s>\n"
#: src/xz/message.c:1287
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "TA WERSJA JEST ROZWOJOWA, NIE PRZEZNACZONA DO UŻYTKU PRODUKCYJNEGO."
@ -958,36 +973,26 @@ msgstr "%s: Błędna nazwa opcji"
msgid "%s: Invalid option value"
msgstr "%s: Błędna wartość opcji"
#: src/xz/options.c:286
#: src/xz/options.c:247
#, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "Nieobsługiwane ustawienie predefiniowane LZMA1/LZMA2: %s"
#: src/xz/options.c:394
#: src/xz/options.c:355
msgid "The sum of lc and lp must not exceed 4"
msgstr "Suma lc i lp nie może przekroczyć 4"
#: src/xz/options.c:398
#, c-format
msgid "The selected match finder requires at least nice=%<PRIu32>"
msgstr "Wybrany dopasowywacz wymaga przynajmniej nice=%<PRIu32>"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: Przy --format=raw i zapisie do pliku wymagana jest opcja --suffix=.ROZ"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Nazwa pliku ma nieznane rozszerzenie, pominięto"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Plik już ma rozszerzenie `%s', pominięto"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: Błędne rozszerzenie nazwy pliku"

File diff suppressed because it is too large Load Diff

227
po/ro.po
View File

@ -2,21 +2,24 @@
# Mesajele în limba română pentru pachetul xz.
# This file is put in the public domain.
#
# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022.
# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022 = 2023.
#
# Cronologia traducerii fișierului „xz”:
# Traducerea inițială, făcută de R-GC, pentru versiunea xz 5.2.5.
# Actualizare a traducerii pentru versiunea 5.2.6 (nepublicată în TP), făcută de R-GC, 2022.
# Actualizare a algoritmului formelor de plural (de la „trei” la „patru” experimental).
# Actualizare a traducerii pentru versiunea 5.4.0-pre1, făcută de R-GC, 2022.
# Actualizare a traducerii pentru versiunea 5.4.0-pre2, făcută de R-GC, 2022.
# Actualizare a traducerii pentru versiunea 5.4.0-pre1, făcută de R-GC, noi-2022.
# Actualizare a traducerii pentru versiunea 5.4.0-pre2, făcută de R-GC, dec-2022.
# Actualizare a traducerii pentru versiunea 5.4.3, făcută de R-GC, mai-2023.
# Actualizare a traducerii pentru versiunea 5.4.4-pre1, făcută de R-GC, iul-2023.
# Actualizare a traducerii pentru versiunea Y, făcută de X, Z(luna-anul).
#
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre2\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-12-03 00:34+0800\n"
"PO-Revision-Date: 2022-12-05 16:11+0100\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 19:34+0200\n"
"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
"Language: ro\n"
@ -25,53 +28,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=((n==1) ? 0 : (n==2) ? 1 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 2 : 3);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.1.1\n"
"X-Generator: Poedit 3.2.2\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: Argument nevalid pentru opțiunea „--block-list”"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: Prea multe argumente pentru opțiunea „--block-list”"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 poate fi folosit doar ca ultimul element din opțiunea „--block-list”"
#: src/xz/args.c:436
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: Tip de format de fișier necunoscut"
#: src/xz/args.c:459 src/xz/args.c:467
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: Tip de verificare a integrității neacceptat"
#: src/xz/args.c:503
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Numai un fișier poate fi specificat cu „--files” sau „--files0”."
#: src/xz/args.c:571
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "Variabila de mediu „%s” conține prea multe argumente"
#: src/xz/args.c:673
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Suportul de comprimare a fost dezactivat în timpul construirii"
#: src/xz/args.c:680
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Suportul de decomprimare a fost dezactivat în timpul construirii"
#: src/xz/args.c:686
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "Comprimarea fișierelor lzip (.lz) nu este acceptată"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "Cu --format=raw, este necesar --suffix=.SUF, cu excepția cazului în care se scrie la ieșirea standard(stdout)"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "Numărul maxim de filtre este patru"
@ -152,13 +170,13 @@ msgstr "S-a ajustat dimensiunea dicționarului LZMA%c de la %sMio la %sMio pentr
#: src/xz/file_io.c:110 src/xz/file_io.c:118
#, c-format
msgid "Error creating a pipe: %s"
msgstr "Eroare la crearea unui racord(pipe): %s"
msgstr "Eroare la crearea unei conducte(pipe): %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Nu s-a reușit activarea cutiei de probă(sandbox)"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: poll() a eșuat: %s"
@ -173,111 +191,111 @@ msgstr "%s: poll() a eșuat: %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Fișierul pare să fi fost mutat, nu eliminat"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: Nu se poate elimina: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Nu se poate configura proprietarul fișierului: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: Nu se poate configura grupul proprietar al fișierului: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Nu se pot configura permisiunile fișierului: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Eroare la obținerea indicatorilor de stare a fișierului de la intrarea standard: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Este o legătură simbolică, se omite"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: Este un director, se omite"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: Nu este un fișier obișnuit, se omite"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Fișierul are activați biții «setuid» sau «setgid», se omite"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Fișierul are activat bitul lipicios(sticky), se omite"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: Fișierul de intrare are mai mult de o legătură dură, se omite"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Numele fișierului este gol, se omite"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Eroare la restabilirea indicatorilor de stare la intrarea standard: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Eroare la obținerea indicatorilor de stare a fișierului de la ieșirea standard: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Eroare la restabilirea indicatorului O_APPEND la ieșirea standard: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: Închiderea fișierului a eșuat: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: Căutarea a eșuat când se încerca crearea unui fișier dispers(sparse): %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: Eroare de citire: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: Eroare la căutarea fișierului: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: Sfârșit neașteptat al fișierului"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: Eroare de scriere: %s"
@ -504,26 +522,26 @@ msgstr "%s: Prea mic pentru a fi un fișier .xz valid"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:730
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Fluxuri Blocuri Comprimare Decomprimare Raport Verificare Nume fișier"
#: src/xz/list.c:1025 src/xz/list.c:1203
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Da"
#: src/xz/list.c:1025 src/xz/list.c:1203
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "Nu"
#: src/xz/list.c:1027 src/xz/list.c:1205
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Versiunea minimă XZ Utils: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1178
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
@ -532,15 +550,15 @@ msgstr[1] "două fișiere\n"
msgstr[2] "%s fișiere\n"
msgstr[3] "%s de fișiere\n"
#: src/xz/list.c:1191
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Totaluri:"
#: src/xz/list.c:1269
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list funcționează numai pe fișierele .xz (--format=xz sau --format=auto)"
#: src/xz/list.c:1275
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list nu acceptă citirea de la intrarea standard"
@ -579,68 +597,68 @@ msgstr "Nu se pot citi date de la intrarea standard atunci când se citesc numel
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Eroare internă (bug)"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "Nu se pot stabili operatorii de semnal"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "Fără verificare a integrității; nu se verifică integritatea fișierului"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Tip neacceptat de verificare a integrității; nu se verifică integritatea fișierului"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Limita de utilizare a memoriei a fost atinsă"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "Formatul fișierului nu este recunoscut"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Opțiuni neacceptate"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Datele comprimate sunt corupte"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Sfârșit neașteptat al intrării"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Se necesită %s Mio de memorie. Limitarea este dezactivată."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "Se necesită %sMio de memorie. Limita este de %s."
#: src/xz/message.c:915
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: Lanț de filtre: %s\n"
#: src/xz/message.c:926
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Încercați «%s --help» pentru mai multe informații."
#: src/xz/message.c:952
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -651,17 +669,17 @@ msgstr ""
"Comprimă sau decomprimă FIȘIER(e) în formatul .xz.\n"
"\n"
#: src/xz/message.c:959
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr ""
"Argumentele obligatorii pentru opțiunile lungi sunt obligatorii și\n"
"pentru opțiunile scurte.\n"
#: src/xz/message.c:963
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Mod de operare:\n"
#: src/xz/message.c:966
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -673,7 +691,7 @@ msgstr ""
" -t, --test testează integritatea fișierului comprimat\n"
" -l, --list listează informații despre fișierele .xz"
#: src/xz/message.c:972
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -681,7 +699,7 @@ msgstr ""
"\n"
" Modificatori de operare:\n"
#: src/xz/message.c:975
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -693,7 +711,7 @@ msgstr ""
" -c, --stdout scrie la ieșirea standard și nu șterge fișierele de\n"
" intrare"
#: src/xz/message.c:984
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -701,7 +719,7 @@ msgstr ""
" --single-stream decomprimă doar primul flux și ignoră în tăcere\n"
" posibilele date de intrare rămase"
#: src/xz/message.c:987
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -721,7 +739,7 @@ msgstr ""
" ca --files, dar folosește caracterul nul(null) ca\n"
" terminator"
#: src/xz/message.c:996
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -729,7 +747,7 @@ msgstr ""
"\n"
" Formatul de bază al fișierului și opțiunile de comprimare:\n"
#: src/xz/message.c:998
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -745,11 +763,11 @@ msgstr ""
" cu precauție), „crc32”, „crc64” (implicit) sau\n"
" „sha256”"
#: src/xz/message.c:1003
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check nu se efectuează verificarea integrității la decomprimare"
#: src/xz/message.c:1007
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -759,7 +777,7 @@ msgstr ""
" comprimare *și* de instrumentul de decomprimare, înainte\n"
" de a utiliza presetările 7-9!"
#: src/xz/message.c:1011
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -768,7 +786,7 @@ msgstr ""
" folosind mai mult timp CPU-ul; nu afectează cerințele\n"
" de memorie ale instrumentului de decomprimare"
#: src/xz/message.c:1015
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -778,7 +796,7 @@ msgstr ""
" este 1; specificați valoarea 0 pentru a utiliza atâtea\n"
" fire de execuție câte nuclee de procesor există"
#: src/xz/message.c:1020
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -789,7 +807,7 @@ msgstr ""
" utilizați acest lucru pentru a stabili dimensiunea\n"
" blocului pentru comprimarea cu fire de execuție"
#: src/xz/message.c:1024
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -799,7 +817,7 @@ msgstr ""
" începe un nou bloc .xz după intervalele date separate\n"
" prin virgulă, de date necomprimate"
#: src/xz/message.c:1028
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -812,7 +830,7 @@ msgstr ""
" multor intrări s-ar bloca, toate datele în așteptare\n"
" sunt eliminate"
#: src/xz/message.c:1034
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -832,7 +850,7 @@ msgstr ""
" execuție sau toate acestea; LIMITA este exprimată în\n"
" octeți, % din RAM sau 0 pt. a activa valoarea implicită"
#: src/xz/message.c:1043
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -840,7 +858,7 @@ msgstr ""
" --no-adjust dacă setările de comprimare depășesc limita de utilizare\n"
" a memoriei, dă o eroare în loc să reducă val. stabilite"
#: src/xz/message.c:1049
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -849,7 +867,7 @@ msgstr ""
" Lanț de filtrare personalizat pentru comprimare (alternativă la utilizarea\n"
" presetărilor):"
#: src/xz/message.c:1058
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -883,7 +901,7 @@ msgstr ""
" depth=NUM adâncimea maximă de căutare; 0=automată\n"
" (valoarea implicită)"
#: src/xz/message.c:1073
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -907,7 +925,7 @@ msgstr ""
" OPȚIUNI valide pentru toate filtrele BCJ:\n"
" start=NUM poziția de pornire a conversiilor (implicit=0)"
#: src/xz/message.c:1086
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -919,7 +937,7 @@ msgstr ""
" dist=NUM distanța dintre octeți fiind dedusă\n"
" scăzând un octet din celălalt (1-256; 1)"
#: src/xz/message.c:1094
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -927,7 +945,7 @@ msgstr ""
"\n"
" Alte opțiuni:\n"
#: src/xz/message.c:1097
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -937,17 +955,17 @@ msgstr ""
" -v, --verbose descriere detaliată; specificați de două ori pentru și\n"
" mai multe detalii"
#: src/xz/message.c:1102
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn face ca avertismentele să nu afecteze starea de ieșire"
#: src/xz/message.c:1104
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr ""
" --robot utilizează mesaje analizabile de mașină (utile pentru\n"
" scripturi)"
#: src/xz/message.c:1107
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -955,7 +973,7 @@ msgstr ""
" --info-memory afișează cantitatea totală de memorie RAM și limitele de\n"
" utilizare a memoriei active în prezent, și iese"
#: src/xz/message.c:1110
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -963,7 +981,7 @@ msgstr ""
" -h, --help afișează ajutorul scurt (enumeră doar opțiunile de bază)\n"
" -H, --long-help afișează acest ajutor lung(detaliat) și iese"
#: src/xz/message.c:1114
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -972,11 +990,11 @@ msgstr ""
" -H, --long-help afișează mesajul detaliat de ajutor (afișează și opțiunile\n"
" avansate)"
#: src/xz/message.c:1119
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version afișează numărul versiunii, și iese"
#: src/xz/message.c:1121
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -988,19 +1006,19 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1127
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr ""
"Raportați erorile la <%s> (în engleză sau finlandeză).\n"
"Raportați erorile de traducere la <translation-team-ro@lists.sourceforge.net>\n"
#: src/xz/message.c:1129
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "Pagina principală a %s: <%s>\n"
#: src/xz/message.c:1133
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "ACEASTA ESTE O VERSIUNE DE DEZVOLTARE, NEDESTINATĂ UTILIZĂRII ÎN PRODUCȚIE."
@ -1028,22 +1046,17 @@ msgstr "Presetare LZMA1/LZMA2 neacceptată: %s"
msgid "The sum of lc and lp must not exceed 4"
msgstr "Suma de lc și lp nu trebuie să depășească 4"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: Cu --format=raw, este necesar --suffix=.SUF, cu excepția cazului în care se scrie la ieșirea standard(stdout)"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Numele fișierului are un sufix necunoscut, care se omite"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Fișierul are deja sufixul „%s”, se omite"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: Sufixul numelui de fișier nu este valid"

332
po/sv.po
View File

@ -1,14 +1,14 @@
# Swedish messages for xz.
# This file is put in the public domain.
# Sebastian Rasmussen <sebras@gmail.com>, 2019.
# Luna Jernberg <droidbittin@gmail.com>, 2022.
# Luna Jernberg <droidbittin@gmail.com>, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n"
"PO-Revision-Date: 2022-11-14 19:08+0100\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 20:25+0200\n"
"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
@ -17,54 +17,69 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.2.1\n"
"X-Generator: Poedit 3.3.2\n"
"X-Poedit-Bookmarks: -1,10,-1,-1,-1,-1,-1,-1,-1,-1\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: Ogiltigt argument till --block-list"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: För många argument till --block-list"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 kan endast användas som det sista elementet i --block-list"
#: src/xz/args.c:424
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: Okänd filformatstyp"
#: src/xz/args.c:447 src/xz/args.c:455
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: Integritetskontrolltyp stöds inte"
#: src/xz/args.c:491
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Endast en fil kan anges med ”--files” eller ”--files0”."
#: src/xz/args.c:559
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "Miljövariabeln %s innehåller för många argument"
#: src/xz/args.c:661
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Komprimeringsstöd inaktiverades vid byggtid"
#: src/xz/args.c:668
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Dekomprimeringsstöd inaktiverades vid byggtid"
#: src/xz/args.c:674
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "Komprimering av lzip-filer (.lz) stöds inte"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "Med --format=raw, --suffix=.SUF krävs om data inte skrivs till standard ut"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "Maximalt antal filter är fyra"
@ -136,11 +151,11 @@ msgstr "Justerade storlek för LZMA%c-lexikon från %s MiB till %s MiB för att
msgid "Error creating a pipe: %s"
msgstr "Fel vid skapande av rörledning: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Misslyckades med att aktivera sandlådan"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: poll() misslyckades: %s"
@ -155,252 +170,252 @@ msgstr "%s: poll() misslyckades: %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Filen verkar ha flyttats, tar inte bort"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: Kan inte ta bort: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Kan inte sätta filägaren: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: Kan inte sätta filgruppen: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Kan inte sätta filrättigheterna: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Fel vid hämtning av filstatusflaggor från standard in: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Är en symbolisk länk, hoppar över"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: Är en katalog, hoppar över"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: Är inte en vanlig fil, hoppar över"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Filen har setuid- eller setgid-biten satt, hoppar över"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Filen har stickybiten satt, hoppar över"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: Indatafilen har mer än en hårdlänk, hoppar över"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Tomt filnamn, hoppar över"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Fel vid återställning av statusflaggorna för standard in: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Fel vid hämtning av filstatusflaggorna från standard ut: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Fel vid återställning av O_APPEND-flaggan till standard ut: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: Stängning av filen misslyckades: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: Sökning misslyckades vid skapande av gles fil: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: Läsfel: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: Fel vid sökning i fil: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: Oväntat filslut"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: Skrivfel: %s"
#: src/xz/hardware.c:225
#: src/xz/hardware.c:238
msgid "Disabled"
msgstr "Inaktiverad"
#: src/xz/hardware.c:256
#: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):"
msgstr "Totalt mängd fysiskt minne (RAM):"
#: src/xz/hardware.c:257
#: src/xz/hardware.c:270
msgid "Number of processor threads:"
msgstr "Antal processortrådar:"
#: src/xz/hardware.c:258
#: src/xz/hardware.c:271
msgid "Compression:"
msgstr "Komprimering:"
#: src/xz/hardware.c:259
#: src/xz/hardware.c:272
msgid "Decompression:"
msgstr "Dekomprimering:"
#: src/xz/hardware.c:260
#: src/xz/hardware.c:273
msgid "Multi-threaded decompression:"
msgstr "Flertrådad dekomprimering:"
#: src/xz/hardware.c:261
#: src/xz/hardware.c:274
msgid "Default for -T0:"
msgstr "Standard för -T0:"
#: src/xz/hardware.c:279
#: src/xz/hardware.c:292
msgid "Hardware information:"
msgstr "Hårdvaruinformation:"
#: src/xz/hardware.c:286
#: src/xz/hardware.c:299
msgid "Memory usage limits:"
msgstr "Minnesanvändningsgränser:"
#: src/xz/list.c:65
#: src/xz/list.c:68
msgid "Streams:"
msgstr "Strömmar:"
#: src/xz/list.c:66
#: src/xz/list.c:69
msgid "Blocks:"
msgstr "Block:"
#: src/xz/list.c:67
#: src/xz/list.c:70
msgid "Compressed size:"
msgstr "Komprimerad storlek:"
#: src/xz/list.c:68
#: src/xz/list.c:71
msgid "Uncompressed size:"
msgstr "Okomprimerad storlek:"
#: src/xz/list.c:69
#: src/xz/list.c:72
msgid "Ratio:"
msgstr "Förhållande:"
#: src/xz/list.c:70
#: src/xz/list.c:73
msgid "Check:"
msgstr "Kontroll:"
#: src/xz/list.c:71
#: src/xz/list.c:74
msgid "Stream Padding:"
msgstr "Strömfyllnad:"
#: src/xz/list.c:72
#: src/xz/list.c:75
msgid "Memory needed:"
msgstr "Minne som behövs:"
#: src/xz/list.c:73
#: src/xz/list.c:76
msgid "Sizes in headers:"
msgstr "Storlek i huvuden:"
#: src/xz/list.c:76
#: src/xz/list.c:79
msgid "Number of files:"
msgstr "Antal filer:"
#: src/xz/list.c:119
#: src/xz/list.c:122
msgid "Stream"
msgstr "Ström"
#: src/xz/list.c:120
#: src/xz/list.c:123
msgid "Block"
msgstr "Block"
#: src/xz/list.c:121
#: src/xz/list.c:124
msgid "Blocks"
msgstr "Block"
#: src/xz/list.c:122
#: src/xz/list.c:125
msgid "CompOffset"
msgstr "Komprimerad position"
#: src/xz/list.c:123
#: src/xz/list.c:126
msgid "UncompOffset"
msgstr "Okomprimerad position"
#: src/xz/list.c:124
#: src/xz/list.c:127
msgid "CompSize"
msgstr "Komprimerad storlek"
#: src/xz/list.c:125
#: src/xz/list.c:128
msgid "UncompSize"
msgstr "Okomprimerad storlek"
#: src/xz/list.c:126
#: src/xz/list.c:129
msgid "TotalSize"
msgstr "Total storlek"
#: src/xz/list.c:127
#: src/xz/list.c:130
msgid "Ratio"
msgstr "Förhållande"
#: src/xz/list.c:128
#: src/xz/list.c:131
msgid "Check"
msgstr "Kontroll"
#: src/xz/list.c:129
#: src/xz/list.c:132
msgid "CheckVal"
msgstr "Kontrollvärde"
#: src/xz/list.c:130
#: src/xz/list.c:133
msgid "Padding"
msgstr "Fyllnad"
#: src/xz/list.c:131
#: src/xz/list.c:134
msgid "Header"
msgstr "Huvud"
#: src/xz/list.c:132
#: src/xz/list.c:135
msgid "Flags"
msgstr "Flaggor"
#: src/xz/list.c:133
#: src/xz/list.c:136
msgid "MemUsage"
msgstr "Minnesanvändning"
#: src/xz/list.c:134
#: src/xz/list.c:137
msgid "Filters"
msgstr "Filters"
@ -408,7 +423,7 @@ msgstr "Filters"
#. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166
#: src/xz/list.c:169
msgid "None"
msgstr "Ingen"
@ -416,60 +431,60 @@ msgstr "Ingen"
#. but the Check ID is known (here 2). In older xz version these
#. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172
#: src/xz/list.c:175
msgid "Unknown-2"
msgstr "Okänd-2"
#: src/xz/list.c:173
#: src/xz/list.c:176
msgid "Unknown-3"
msgstr "Okänd-3"
#: src/xz/list.c:175
#: src/xz/list.c:178
msgid "Unknown-5"
msgstr "Okänd-5"
#: src/xz/list.c:176
#: src/xz/list.c:179
msgid "Unknown-6"
msgstr "Okänd-6"
#: src/xz/list.c:177
#: src/xz/list.c:180
msgid "Unknown-7"
msgstr "Okänd-7"
#: src/xz/list.c:178
#: src/xz/list.c:181
msgid "Unknown-8"
msgstr "Okänd-8"
#: src/xz/list.c:179
#: src/xz/list.c:182
msgid "Unknown-9"
msgstr "Okänd-9"
#: src/xz/list.c:181
#: src/xz/list.c:184
msgid "Unknown-11"
msgstr "Okänd-11"
#: src/xz/list.c:182
#: src/xz/list.c:185
msgid "Unknown-12"
msgstr "Okänd-12"
#: src/xz/list.c:183
#: src/xz/list.c:186
msgid "Unknown-13"
msgstr "Okänd-13"
#: src/xz/list.c:184
#: src/xz/list.c:187
msgid "Unknown-14"
msgstr "Okänd-14"
#: src/xz/list.c:185
#: src/xz/list.c:188
msgid "Unknown-15"
msgstr "Okänd-15"
#: src/xz/list.c:348
#: src/xz/list.c:351
#, c-format
msgid "%s: File is empty"
msgstr "%s: Fil är tom"
#: src/xz/list.c:353
#: src/xz/list.c:356
#, c-format
msgid "%s: Too small to be a valid .xz file"
msgstr "%s: För lite för att vara en giltig xz-fil"
@ -478,41 +493,41 @@ msgstr "%s: För lite för att vara en giltig xz-fil"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:722
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Strmr Block Komprimerd Okomprimerd Förh. Kntrll Filnamn"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Ja"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "Nej"
#: src/xz/list.c:1018 src/xz/list.c:1195
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Minsta XZ Utils-version: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1168
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
msgstr[0] "%s fil\n"
msgstr[1] "%s filer\n"
#: src/xz/list.c:1181
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Total:"
#: src/xz/list.c:1259
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list fungerar endast med .xz-filer (--format=xz eller --format=auto)"
#: src/xz/list.c:1265
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list saknar stöd för att läsa från standard in"
@ -543,68 +558,68 @@ msgstr "Kan inte läsa data från standard in när filnamn läses från standard
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Internt fel"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "Kan inte etablera signalhanterare"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "Ingen integritetskontroll; kan inte verifiera filintegritet"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Typ av integritetskontroll stöds inte; verifierar inte filintegritet"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Begränsning av minnesanvändning uppnådd"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "Filformat okänt"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Flaggor stöds inte"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Komprimerad data är korrupt"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Oväntat avslut av indata"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "%s MiB minne krävs. Begränsaren inaktiverad."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "%s MiB minne krävs. Begränsningen är %s."
#: src/xz/message.c:1070
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: Filterkedja: %s\n"
#: src/xz/message.c:1080
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Prova ”%s --help” för vidare information."
#: src/xz/message.c:1106
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -615,15 +630,15 @@ msgstr ""
"Komprimera eller dekomprimera FILer i .xz-formatet.\n"
"\n"
#: src/xz/message.c:1113
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "Nödvändiga argument till långa flaggor är också nödvändiga för korta flaggor.\n"
#: src/xz/message.c:1117
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Operationsläge:\n"
#: src/xz/message.c:1120
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -635,7 +650,7 @@ msgstr ""
" -t, --test testa integritet för komprimerad fil\n"
" -l, --list lista information om .xz-filer"
#: src/xz/message.c:1126
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -643,7 +658,7 @@ msgstr ""
"\n"
" Operationsmodifierare:\n"
#: src/xz/message.c:1129
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -654,7 +669,7 @@ msgstr ""
" länkar\n"
" -c, --stdout skriv till standard ut och ta inte bort indatafiler"
#: src/xz/message.c:1138
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -662,7 +677,7 @@ msgstr ""
" --single-stream dekomprimera endast den första strömmen och hoppa\n"
" tyst över eventuellt återstående indata"
#: src/xz/message.c:1141
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -678,7 +693,7 @@ msgstr ""
" filnamn måste avslutas med nyradstecken\n"
" --files0[=FIL] som --files men null-tecknet måste användas"
#: src/xz/message.c:1150
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -686,7 +701,7 @@ msgstr ""
"\n"
" Grundläggande filformat och komprimeringsflaggor:\n"
#: src/xz/message.c:1152
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -698,11 +713,11 @@ msgstr ""
" -C, --check=CHECK typ av integritetskontroll: ”none” (använd med\n"
" försiktighet), ”crc32”, ”crc64” (standard), eller ”sha256”"
#: src/xz/message.c:1157
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check verifiera inte integritet vid dekomprimering"
#: src/xz/message.c:1161
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -711,7 +726,7 @@ msgstr ""
" minnesanvändning för komprimerare *och* dekomprimerare\n"
" i beaktande innan du använder 7-9!"
#: src/xz/message.c:1165
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -720,7 +735,7 @@ msgstr ""
" använda mer CPU-tid; påverkar inte minnesanvändning för\n"
" dekomprimerare"
#: src/xz/message.c:1169
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -729,7 +744,7 @@ msgstr ""
" för att använda så många trådar som det finns\n"
" processorkärnor"
#: src/xz/message.c:1174
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -740,7 +755,7 @@ msgstr ""
" använd detta för att sätta blockstorleken för trådad\n"
" komprimering"
#: src/xz/message.c:1178
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -750,7 +765,7 @@ msgstr ""
" påbörja ett nytt .xz-block efter de angivna\n"
" komma-separerade intervallen av okomprimerad data"
#: src/xz/message.c:1182
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -763,7 +778,7 @@ msgstr ""
" mer indata skulle blockera, så kommer all väntande data\n"
" att spolas ut"
#: src/xz/message.c:1188
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -782,7 +797,7 @@ msgstr ""
" dekomprimering, trådad dekomprimering, eller alla av\n"
" dessa; BEGR är i byte, % RAM, eller 0 för standardvärden"
#: src/xz/message.c:1197
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -791,7 +806,7 @@ msgstr ""
" minnesanvändning, ge ett fel istället för att justera ner\n"
" inställningarna"
#: src/xz/message.c:1203
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -800,7 +815,7 @@ msgstr ""
" Anpassad filterkedja för komprimering (alternativ till att använda\n"
" förinställningar):"
#: src/xz/message.c:1212
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -831,7 +846,7 @@ msgstr ""
" bt4)\n"
" depth=NUM maximalt sökdjup; 0=automatisk (standard)"
#: src/xz/message.c:1227
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -856,7 +871,7 @@ msgstr ""
" start=NUM startposition för konverteringar\n"
" (standard=0)"
#: src/xz/message.c:1240
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -868,7 +883,7 @@ msgstr ""
" dist=NUM avstånd mellan byte som subtraheras\n"
" från varandra (1-256; 1)"
#: src/xz/message.c:1248
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -876,7 +891,7 @@ msgstr ""
"\n"
" Andra flaggor:\n"
#: src/xz/message.c:1251
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -885,17 +900,17 @@ msgstr ""
" undertrycka fel\n"
" -v, --verbose var utförlig; ange två gånger för än mer utförlig"
#: src/xz/message.c:1256
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn låt inte varningar påverka avslutningsstatus"
#: src/xz/message.c:1258
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr ""
" --robot använd maskintolkningsbara meddelanden\n"
" (användbara för skript)"
#: src/xz/message.c:1261
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -903,7 +918,7 @@ msgstr ""
" --info-memory visa den totala mängden RAM och den för närvarande aktiva\n"
" begränsningen av minnesanvändning och avsluta"
#: src/xz/message.c:1264
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -912,7 +927,7 @@ msgstr ""
" flaggorna)\n"
" -H, --long-help visar denna långa hjälp av avsluta"
#: src/xz/message.c:1268
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -921,11 +936,11 @@ msgstr ""
" -H, --long-help visa den långa hjälpen (listar också de avancerade\n"
" flaggorna)"
#: src/xz/message.c:1273
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version visa versionsnumret och avsluta"
#: src/xz/message.c:1275
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -937,19 +952,19 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1281
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr ""
"Rapportera buggar till <%s> (på engelska eller finska).\n"
"Rapportera översättningsfel till tp-sv@listor.tp-sv.se\n"
#: src/xz/message.c:1283
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "%s webbsida: <%s>\n"
#: src/xz/message.c:1287
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "DETTA ÄR EN UTVECKLINGSVERSION SOM INTE ÄR AVSEDD FÖR PRODUKTIONSANVÄNDNING."
@ -968,36 +983,26 @@ msgstr "%s: Ogiltigt flaggnamn"
msgid "%s: Invalid option value"
msgstr "%s: Ogiltigt flaggvärde"
#: src/xz/options.c:286
#: src/xz/options.c:247
#, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "LZMA1/LZMA2-förinställning stöds inte: %s"
#: src/xz/options.c:394
#: src/xz/options.c:355
msgid "The sum of lc and lp must not exceed 4"
msgstr "Summan av lc och lp får inte överstiga 4"
#: src/xz/options.c:398
#, c-format
msgid "The selected match finder requires at least nice=%<PRIu32>"
msgstr "Den valda matchningshittaren kräver åtminstone nice=%<PRIu32>"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s: Med --format=raw, krävs --suffix=.SUF om data inte skrivs till standard ut"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Filnamn har okänd filändelse, hoppar över"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Fil har redan ”%s”-ändelse, hoppar över"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: Ogiltig filnamnsändelse"
@ -1037,6 +1042,9 @@ msgstr "Skrivning till standard ut misslyckades"
msgid "Unknown error"
msgstr "Okänt fel"
#~ msgid "The selected match finder requires at least nice=%<PRIu32>"
#~ msgstr "Den valda matchningshittaren kräver åtminstone nice=%<PRIu32>"
#~ msgid "Sandbox is disabled due to incompatible command line arguments"
#~ msgstr "Sandlåda inaktiverad på grund av inkompatibla kommandoradsargument"

334
po/uk.po
View File

@ -1,13 +1,13 @@
# Ukrainian translation for xz.
# This file is put in the public domain.
#
# Yuri Chornoivan <yurchor@ukr.net>, 2019, 2022.
# Yuri Chornoivan <yurchor@ukr.net>, 2019, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n"
"PO-Revision-Date: 2022-11-12 23:03+0200\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 20:53+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
"Language: uk\n"
@ -18,51 +18,68 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 20.12.0\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s: некоректний аргумент --block-list"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s: забагато аргументів --block-list"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 можна використовувати лише як останній елемент у --block-list"
#: src/xz/args.c:424
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s: невідомий тип формату файлів"
#: src/xz/args.c:447 src/xz/args.c:455
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s: непідтримуваний тип перевірки цілісності"
#: src/xz/args.c:491
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Разом із параметрами --files або --files0 можна вказувати лише один файл."
#: src/xz/args.c:559
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s: %s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "У змінній середовища %s міститься надто багато аргументів"
#: src/xz/args.c:661
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "Підтримку стискання було вимкнено під час збирання програми"
#: src/xz/args.c:668
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "Підтримку розпаковування було вимкнено під час збирання програми"
#: src/xz/args.c:674
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "Підтримки стискання файлів lzip (.lz) не передбачено"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr ""
"Якщо вказано --format=raw, слід вказати і --suffix=.SUF, якщо дані\n"
"виводяться не до стандартного виведення"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "Максимальна кількість фільтрів — чотири"
@ -134,11 +151,11 @@ msgstr "Скориговано розмір словника LZMA%c з %s МіБ
msgid "Error creating a pipe: %s"
msgstr "Помилка під час створення каналу: %s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "Не вдалося увімкнути пісочницю"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%s: помилка poll(): %s"
@ -153,252 +170,252 @@ msgstr "%s: помилка poll(): %s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s: здається, файл пересунуто; не вилучаємо"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s: не вдалося вилучити: %s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s: не вдалося встановити власника файла: %s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s: не вдалося встановити групу власника файла: %s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: не вдалося встановити права доступу до файла: %s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "Помилка під час спроби отримання прапорців стану файла зі стандартного джерела вхідних даних: %s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s: є символічним посиланням; пропускаємо"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s: є каталогом; пропускаємо"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s: не є звичайним файлом; пропускаємо"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: для файла встановлено біт setuid або setgid; пропускаємо"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s: для файла встановлено липкий біт; пропускаємо"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: виявлено декілька жорстких посилань на файл із вхідними даними; пропускаємо"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "Порожня назва файла; пропускаємо"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "Помилка під час спроби відновлення прапорців стану для стандартного джерела вхідних даних: %s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "Помилка під час спроби отримання прапорців стану файла зі стандартного виведення: %s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Помилка під час спроби відновлення прапорця O_APPEND для стандартного виведення: %s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s: не вдалося закрити файл: %s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s: помилка позиціювання під час спроби створити розріджений файл: %s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s: помилка читання: %s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%s: помилка позиціювання у файлі: %s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s: неочікуваний кінець файла"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s: помилка під час спроби запису: %s"
#: src/xz/hardware.c:225
#: src/xz/hardware.c:238
msgid "Disabled"
msgstr "Вимкнено"
#: src/xz/hardware.c:256
#: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):"
msgstr "Обсяг фізичної пам'яті (RAM): "
#: src/xz/hardware.c:257
#: src/xz/hardware.c:270
msgid "Number of processor threads:"
msgstr "Кількість потоків обробки процесором:"
#: src/xz/hardware.c:258
#: src/xz/hardware.c:271
msgid "Compression:"
msgstr "Стискання:"
#: src/xz/hardware.c:259
#: src/xz/hardware.c:272
msgid "Decompression:"
msgstr "Розпакування:"
#: src/xz/hardware.c:260
#: src/xz/hardware.c:273
msgid "Multi-threaded decompression:"
msgstr "Багатопотокове розпаковування:"
#: src/xz/hardware.c:261
#: src/xz/hardware.c:274
msgid "Default for -T0:"
msgstr "Типове для -T0:"
#: src/xz/hardware.c:279
#: src/xz/hardware.c:292
msgid "Hardware information:"
msgstr "Дані щодо обладнання:"
#: src/xz/hardware.c:286
#: src/xz/hardware.c:299
msgid "Memory usage limits:"
msgstr "Обмеження на використання пам'яті:"
#: src/xz/list.c:65
#: src/xz/list.c:68
msgid "Streams:"
msgstr "Потоки:"
#: src/xz/list.c:66
#: src/xz/list.c:69
msgid "Blocks:"
msgstr "Блоки:"
#: src/xz/list.c:67
#: src/xz/list.c:70
msgid "Compressed size:"
msgstr "Стиснутий розмір:"
#: src/xz/list.c:68
#: src/xz/list.c:71
msgid "Uncompressed size:"
msgstr "Нестиснутий розмір:"
#: src/xz/list.c:69
#: src/xz/list.c:72
msgid "Ratio:"
msgstr "Пропорція:"
#: src/xz/list.c:70
#: src/xz/list.c:73
msgid "Check:"
msgstr "Перевірка:"
#: src/xz/list.c:71
#: src/xz/list.c:74
msgid "Stream Padding:"
msgstr "Доповнення потоку:"
#: src/xz/list.c:72
#: src/xz/list.c:75
msgid "Memory needed:"
msgstr "Потрібний об'єм пам'яті:"
#: src/xz/list.c:73
#: src/xz/list.c:76
msgid "Sizes in headers:"
msgstr "Розмір у заголовках:"
#: src/xz/list.c:76
#: src/xz/list.c:79
msgid "Number of files:"
msgstr "Кількість файлів:"
#: src/xz/list.c:119
#: src/xz/list.c:122
msgid "Stream"
msgstr "Потік"
#: src/xz/list.c:120
#: src/xz/list.c:123
msgid "Block"
msgstr "Блок"
#: src/xz/list.c:121
#: src/xz/list.c:124
msgid "Blocks"
msgstr "Блоки"
#: src/xz/list.c:122
#: src/xz/list.c:125
msgid "CompOffset"
msgstr "СтисЗсув"
#: src/xz/list.c:123
#: src/xz/list.c:126
msgid "UncompOffset"
msgstr "НестисЗсув"
#: src/xz/list.c:124
#: src/xz/list.c:127
msgid "CompSize"
msgstr "СтисРозмір"
#: src/xz/list.c:125
#: src/xz/list.c:128
msgid "UncompSize"
msgstr "НестисРозмір"
#: src/xz/list.c:126
#: src/xz/list.c:129
msgid "TotalSize"
msgstr "Загальний розмір"
#: src/xz/list.c:127
#: src/xz/list.c:130
msgid "Ratio"
msgstr "Пропорція"
#: src/xz/list.c:128
#: src/xz/list.c:131
msgid "Check"
msgstr "Перевірка"
#: src/xz/list.c:129
#: src/xz/list.c:132
msgid "CheckVal"
msgstr "ЗначПерев"
#: src/xz/list.c:130
#: src/xz/list.c:133
msgid "Padding"
msgstr "Заповн"
#: src/xz/list.c:131
#: src/xz/list.c:134
msgid "Header"
msgstr "Заголов"
#: src/xz/list.c:132
#: src/xz/list.c:135
msgid "Flags"
msgstr "Прапор"
#: src/xz/list.c:133
#: src/xz/list.c:136
msgid "MemUsage"
msgstr "ВикПам"
#: src/xz/list.c:134
#: src/xz/list.c:137
msgid "Filters"
msgstr "Фільтри"
@ -406,7 +423,7 @@ msgstr "Фільтри"
#. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166
#: src/xz/list.c:169
msgid "None"
msgstr "Немає"
@ -414,60 +431,60 @@ msgstr "Немає"
#. but the Check ID is known (here 2). In older xz version these
#. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172
#: src/xz/list.c:175
msgid "Unknown-2"
msgstr "Невідомо-2"
#: src/xz/list.c:173
#: src/xz/list.c:176
msgid "Unknown-3"
msgstr "Невідомо-3"
#: src/xz/list.c:175
#: src/xz/list.c:178
msgid "Unknown-5"
msgstr "Невідомо-5"
#: src/xz/list.c:176
#: src/xz/list.c:179
msgid "Unknown-6"
msgstr "Невідомо-6"
#: src/xz/list.c:177
#: src/xz/list.c:180
msgid "Unknown-7"
msgstr "Невідомо-7"
#: src/xz/list.c:178
#: src/xz/list.c:181
msgid "Unknown-8"
msgstr "Невідомо-8"
#: src/xz/list.c:179
#: src/xz/list.c:182
msgid "Unknown-9"
msgstr "Невідомо-9"
#: src/xz/list.c:181
#: src/xz/list.c:184
msgid "Unknown-11"
msgstr "Невідом-11"
#: src/xz/list.c:182
#: src/xz/list.c:185
msgid "Unknown-12"
msgstr "Невідом-12"
#: src/xz/list.c:183
#: src/xz/list.c:186
msgid "Unknown-13"
msgstr "Невідом-13"
#: src/xz/list.c:184
#: src/xz/list.c:187
msgid "Unknown-14"
msgstr "Невідом-14"
#: src/xz/list.c:185
#: src/xz/list.c:188
msgid "Unknown-15"
msgstr "Невідом-15"
#: src/xz/list.c:348
#: src/xz/list.c:351
#, c-format
msgid "%s: File is empty"
msgstr "%s: файл порожній"
#: src/xz/list.c:353
#: src/xz/list.c:356
#, c-format
msgid "%s: Too small to be a valid .xz file"
msgstr "%s: є надто малим для коректного файла .xz"
@ -476,26 +493,26 @@ msgstr "%s: є надто малим для коректного файла .xz"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:722
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Потоки Блоки Стиснуті Нестиснуті Коеф. Перев. Назва файла"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "Так"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "Ні"
#: src/xz/list.c:1018 src/xz/list.c:1195
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " Мінімальна версія програм XZ: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1168
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
@ -503,15 +520,15 @@ msgstr[0] "%s файл\n"
msgstr[1] "%s файли\n"
msgstr[2] "%s файлів\n"
#: src/xz/list.c:1181
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "Загалом:"
#: src/xz/list.c:1259
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list працює лише для файлів .xz (--format=xz або --format=auto)"
#: src/xz/list.c:1265
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "Використання --list скасовує підтримку читання зі стандартного джерела вхідних даних"
@ -542,68 +559,68 @@ msgstr "Читання даних зі стандартного джерела
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s: "
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "Внутрішня помилка (вада)"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "Не вдалося встановити обробники сигналів"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "Немає перевірки цілісності; цілісність файлів перевірено не буде"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Непідтримуваний тип перевірки цілісності; перевірки цілісності виконано не буде"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "Перевищено обмеження на використання пам'яті"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "Формат файла не розпізнано"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "Непідтримувані параметри"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "Стиснені дані пошкоджено"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "Несподіваний кінець вхідних даних"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Потрібно %s МіБ пам'яті. Обмеження вимкнено."
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "Потрібно %s МіБ пам'яті. Маємо обмеження у %s."
#: src/xz/message.c:1070
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s: ланцюжок фільтрування: %s\n"
#: src/xz/message.c:1080
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "Спробуйте «%s --help» для отримання докладнішого опису."
#: src/xz/message.c:1106
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -614,17 +631,17 @@ msgstr ""
"Стиснути або розпакувати файли у форматі .xz.\n"
"\n"
#: src/xz/message.c:1113
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr ""
"Обов’язкові аргументи для довгих форм запису параметрів є обов’язковими і для\n"
"скорочених форм.\n"
#: src/xz/message.c:1117
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " Режим роботи:\n"
#: src/xz/message.c:1120
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -636,7 +653,7 @@ msgstr ""
" -t, --test перевірити цілісність стиснених файлів\n"
" -l, --list вивести дані щодо файлів .xz"
#: src/xz/message.c:1126
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -644,7 +661,7 @@ msgstr ""
"\n"
" Модифікатори дій:\n"
#: src/xz/message.c:1129
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -656,7 +673,7 @@ msgstr ""
" -c, --stdout записувати дані до стандартного виведення і не вилучати\n"
" вхідні файли"
#: src/xz/message.c:1138
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
@ -664,7 +681,7 @@ msgstr ""
" --single-stream розпакувати лише перший потік і без запитань\n"
" ігнорувати решту вхідних даних"
#: src/xz/message.c:1141
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -682,7 +699,7 @@ msgstr ""
" --files0[=ФАЙЛ] подібний до --files, але список файлів завершується\n"
" нуль-символом"
#: src/xz/message.c:1150
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -690,7 +707,7 @@ msgstr ""
"\n"
" Базові параметри формату файлів і стискання:\n"
#: src/xz/message.c:1152
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -702,11 +719,11 @@ msgstr ""
" -C, --check=ТИП тип перевірки цілісності: none («немає», будьте обережні),\n"
" crc32, crc64 (типовий) або sha256"
#: src/xz/message.c:1157
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check не виконувати перевірку цілісності при розпаковуванні"
#: src/xz/message.c:1161
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -715,7 +732,7 @@ msgstr ""
" параметри використання пам'яті для пакування і\n"
" розпакування, перш ніж використовувати рівні 7-9!"
#: src/xz/message.c:1165
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -724,7 +741,7 @@ msgstr ""
" процесора; не впливає на вимоги щодо пам'яті для\n"
" розпаковування"
#: src/xz/message.c:1169
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -734,7 +751,7 @@ msgstr ""
" використовувала стільки потоків, скільки є ядер\n"
" у процесора"
#: src/xz/message.c:1174
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -746,7 +763,7 @@ msgstr ""
" встановлення розміру блоку для пакування у декілька\n"
" потоків"
#: src/xz/message.c:1178
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -756,7 +773,7 @@ msgstr ""
" розпочинати нові блоки .xz після вказаних інтервалів\n"
" нестиснених даних; записи відокремлюються комами"
#: src/xz/message.c:1182
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -769,7 +786,7 @@ msgstr ""
" минуло більше за ЧАС_ОЧІКУВАННЯ мілісекунд, витерти\n"
" усі дані у черзі"
#: src/xz/message.c:1188
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -788,7 +805,7 @@ msgstr ""
" або усіх режимів; ОБМЕЖЕННЯ слід вказувати у байтах,\n"
" % RAM або вказати 0 (типове значення)"
#: src/xz/message.c:1197
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
@ -797,7 +814,7 @@ msgstr ""
" обмежень на пам'ять, вивести помилку і не коригувати\n"
" параметри"
#: src/xz/message.c:1203
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -806,7 +823,7 @@ msgstr ""
" Нетиповий ланцюжок фільтрування для стискання (альтернатива використання\n"
" рівнів):"
#: src/xz/message.c:1212
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -837,7 +854,7 @@ msgstr ""
" bt4; bt4)\n"
" depth=N макс. глибина пошуку; 0=авто (типова)"
#: src/xz/message.c:1227
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -861,7 +878,7 @@ msgstr ""
" Коректні значення ПАРАМЕТРИ для усіх фільтрів BCJ:\n"
" start=N початковий зсув для перетворень (типовий=0)"
#: src/xz/message.c:1240
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -873,7 +890,7 @@ msgstr ""
" dist=N відстань між байтами, які віднімаються\n"
" один від одного (1-256; 1)"
#: src/xz/message.c:1248
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -881,7 +898,7 @@ msgstr ""
"\n"
" Інші параметри:\n"
#: src/xz/message.c:1251
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -891,17 +908,17 @@ msgstr ""
" -v, --verbose режим докладних повідомлень; вкажіть двічі, щоб підвищити\n"
" докладність"
#: src/xz/message.c:1256
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn попередження не впливають на стан виходу"
#: src/xz/message.c:1258
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr ""
" --robot використовувати повідомлення для обробки комп'ютером\n"
" (корисно для створення сценаріїв)"
#: src/xz/message.c:1261
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
@ -909,7 +926,7 @@ msgstr ""
" --info-memory вивести загальні дані щодо оперативної пам'яті і поточних\n"
" обмежень щодо її використання, потім завершити роботу"
#: src/xz/message.c:1264
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -919,7 +936,7 @@ msgstr ""
" -H, --long-help вивести це розширене довідкове повідомлення і завершити\n"
" роботу"
#: src/xz/message.c:1268
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -928,11 +945,11 @@ msgstr ""
" -H, --long-help показати розгорнуту довідку (із усіма додатковими\n"
" параметрами)"
#: src/xz/message.c:1273
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version вивести дані щодо версії програми і завершити роботу"
#: src/xz/message.c:1275
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -945,19 +962,19 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1281
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr ""
"Сповіщайте розробників про вади за адресою <%s>\n"
"(англійською і фінською).\n"
#: src/xz/message.c:1283
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "Домашня сторінка %s: <%s>\n"
#: src/xz/message.c:1287
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "ЦЕ ТЕСТОВА ВЕРСІЯ, ЯКУ НЕ ПРИЗНАЧЕНО ДЛЯ ПРОМИСЛОВОГО ВИКОРИСТАННЯ."
@ -976,38 +993,26 @@ msgstr "%s: некоректна назва параметра"
msgid "%s: Invalid option value"
msgstr "%s: некоректне значення параметра"
#: src/xz/options.c:286
#: src/xz/options.c:247
#, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "Непідтримуваний рівень стискання LZMA1/LZMA2: %s"
#: src/xz/options.c:394
#: src/xz/options.c:355
msgid "The sum of lc and lp must not exceed 4"
msgstr "Сума lc і lp не повинна перевищувати 4"
#: src/xz/options.c:398
#, c-format
msgid "The selected match finder requires at least nice=%<PRIu32>"
msgstr "Вибраний засіб пошуку відповідності потребує принаймні nice=%<PRIu32>"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr ""
"%s: якщо вказано --format=raw, слід вказати і --suffix=.SUF, якщо дані\n"
"виводяться не до стандартного виведення"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: назва файла має невідомий суфікс; пропускаємо"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: файл вже має суфікс назви %s; пропускаємо"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s: некоректний суфікс назви файла"
@ -1047,6 +1052,9 @@ msgstr "Не вдалося записати дані до стандартно
msgid "Unknown error"
msgstr "Невідома помилка"
#~ msgid "The selected match finder requires at least nice=%<PRIu32>"
#~ msgstr "Вибраний засіб пошуку відповідності потребує принаймні nice=%<PRIu32>"
#~ msgid "Memory usage limit for compression: "
#~ msgstr "Обмеження пам'яті для пакування: "

631
po/vi.po

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
# Chinese translations for xz package
# xz 软件包的简体中文翻译。
# This file is put in the public domain.
# Boyuan Yang <073plan@gmail.com>, 2019, 2022.
# Boyuan Yang <073plan@gmail.com>, 2019, 2022, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n"
"PO-Revision-Date: 2022-11-30 13:31-0500\n"
"Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2023-07-19 14:24-0400\n"
"Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n"
@ -17,53 +17,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"X-Generator: Poedit 3.2\n"
"X-Generator: Poedit 3.2.2\n"
#: src/xz/args.c:64
#: src/xz/args.c:77
#, c-format
msgid "%s: Invalid argument to --block-list"
msgstr "%s--block-list 的无效参数"
#: src/xz/args.c:74
#: src/xz/args.c:87
#, c-format
msgid "%s: Too many arguments to --block-list"
msgstr "%s--block-list 得到过多参数"
#: src/xz/args.c:103
#: src/xz/args.c:116
msgid "0 can only be used as the last element in --block-list"
msgstr "0 仅可用于 --block-list 的最后一个元素"
#: src/xz/args.c:424
#: src/xz/args.c:451
#, c-format
msgid "%s: Unknown file format type"
msgstr "%s位置文件格式类型"
msgstr "%s未知文件格式类型"
#: src/xz/args.c:447 src/xz/args.c:455
#: src/xz/args.c:474 src/xz/args.c:482
#, c-format
msgid "%s: Unsupported integrity check type"
msgstr "%s不支持的完整性检查类型"
#: src/xz/args.c:491
#: src/xz/args.c:518
msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "仅可使用“--files”或“--files0”指定一个文件。"
#: src/xz/args.c:559
#. TRANSLATORS: This is a translatable
#. string because French needs a space
#. before the colon ("%s : %s").
#: src/xz/args.c:533 src/xz/coder.c:691 src/xz/coder.c:707 src/xz/coder.c:967
#: src/xz/coder.c:970 src/xz/file_io.c:605 src/xz/file_io.c:679
#: src/xz/file_io.c:769 src/xz/file_io.c:940 src/xz/list.c:369
#: src/xz/list.c:415 src/xz/list.c:477 src/xz/list.c:581 src/xz/list.c:590
#, c-format
msgid "%s: %s"
msgstr "%s%s"
#: src/xz/args.c:589
#, c-format
msgid "The environment variable %s contains too many arguments"
msgstr "环境变量 %s 包含过多参数"
#: src/xz/args.c:661
#: src/xz/args.c:691
msgid "Compression support was disabled at build time"
msgstr "压缩支持已在构建时禁用"
#: src/xz/args.c:668
#: src/xz/args.c:698
msgid "Decompression support was disabled at build time"
msgstr "解压支持已在构建时禁用"
#: src/xz/args.c:674
#: src/xz/args.c:704
msgid "Compression of lzip files (.lz) is not supported"
msgstr "不支持对 lzip 文件 (.lz) 的压缩"
#: src/xz/args.c:735
msgid "With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "启用 --format-raw 选项时,必须指定 --suffix=.SUF 获知写入至标准输出"
#: src/xz/coder.c:115
msgid "Maximum number of filters is four"
msgstr "过滤器最多数量为四"
@ -135,11 +150,11 @@ msgstr "已调整 LZMA%c 字典大小(从 %s MiB 调整为 %s MiB以不
msgid "Error creating a pipe: %s"
msgstr "创建管道时出错:%s"
#: src/xz/file_io.c:235
#: src/xz/file_io.c:252
msgid "Failed to enable the sandbox"
msgstr "沙盒启用失败"
#: src/xz/file_io.c:277
#: src/xz/file_io.c:294
#, c-format
msgid "%s: poll() failed: %s"
msgstr "%spoll() 失败:%s"
@ -154,252 +169,252 @@ msgstr "%spoll() 失败:%s"
#. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously
#. shouldn't be removed.
#: src/xz/file_io.c:344
#: src/xz/file_io.c:361
#, c-format
msgid "%s: File seems to have been moved, not removing"
msgstr "%s文件似乎已移动不再进行删除操作"
#: src/xz/file_io.c:351 src/xz/file_io.c:907
#: src/xz/file_io.c:368 src/xz/file_io.c:924
#, c-format
msgid "%s: Cannot remove: %s"
msgstr "%s无法删除%s"
#: src/xz/file_io.c:377
#: src/xz/file_io.c:394
#, c-format
msgid "%s: Cannot set the file owner: %s"
msgstr "%s无法设置文件所有者%s"
#: src/xz/file_io.c:390
#: src/xz/file_io.c:407
#, c-format
msgid "%s: Cannot set the file group: %s"
msgstr "%s无法设置文件所有组%s"
#: src/xz/file_io.c:409
#: src/xz/file_io.c:426
#, c-format
msgid "%s: Cannot set the file permissions: %s"
msgstr "%s无法设置文件权限%s"
#: src/xz/file_io.c:535
#: src/xz/file_io.c:552
#, c-format
msgid "Error getting the file status flags from standard input: %s"
msgstr "从标准输入获取文件状态标志出错:%s"
#: src/xz/file_io.c:593 src/xz/file_io.c:655
#: src/xz/file_io.c:610 src/xz/file_io.c:672
#, c-format
msgid "%s: Is a symbolic link, skipping"
msgstr "%s是符号链接跳过"
#: src/xz/file_io.c:684
#: src/xz/file_io.c:701
#, c-format
msgid "%s: Is a directory, skipping"
msgstr "%s是目录跳过"
#: src/xz/file_io.c:690
#: src/xz/file_io.c:707
#, c-format
msgid "%s: Not a regular file, skipping"
msgstr "%s不是标准文件跳过"
#: src/xz/file_io.c:707
#: src/xz/file_io.c:724
#, c-format
msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s文件有设置用户ID或设置组ID标识跳过"
#: src/xz/file_io.c:714
#: src/xz/file_io.c:731
#, c-format
msgid "%s: File has sticky bit set, skipping"
msgstr "%s文件有粘滞位标识跳过"
#: src/xz/file_io.c:721
#: src/xz/file_io.c:738
#, c-format
msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s输入文件有多于一个硬链接跳过"
#: src/xz/file_io.c:763
#: src/xz/file_io.c:780
msgid "Empty filename, skipping"
msgstr "空文件名,跳过"
#: src/xz/file_io.c:817
#: src/xz/file_io.c:834
#, c-format
msgid "Error restoring the status flags to standard input: %s"
msgstr "回复标准输入的状态标志时出错:%s"
#: src/xz/file_io.c:865
#: src/xz/file_io.c:882
#, c-format
msgid "Error getting the file status flags from standard output: %s"
msgstr "获取标准输出的文件状态标志时出错:%s"
#: src/xz/file_io.c:1043
#: src/xz/file_io.c:1060
#, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "恢复标准输出的 O_APPEND 标志时出错:%s"
#: src/xz/file_io.c:1055
#: src/xz/file_io.c:1072
#, c-format
msgid "%s: Closing the file failed: %s"
msgstr "%s关闭文件失败%s"
#: src/xz/file_io.c:1091 src/xz/file_io.c:1354
#: src/xz/file_io.c:1108 src/xz/file_io.c:1371
#, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s"
msgstr "%s尝试创建稀疏文件时 seek 失败:%s"
#: src/xz/file_io.c:1192
#: src/xz/file_io.c:1209
#, c-format
msgid "%s: Read error: %s"
msgstr "%s读取错误%s"
#: src/xz/file_io.c:1222
#: src/xz/file_io.c:1239
#, c-format
msgid "%s: Error seeking the file: %s"
msgstr "%sseek 文件时出错:%s"
#: src/xz/file_io.c:1246
#: src/xz/file_io.c:1263
#, c-format
msgid "%s: Unexpected end of file"
msgstr "%s未预期的文件结束"
#: src/xz/file_io.c:1305
#: src/xz/file_io.c:1322
#, c-format
msgid "%s: Write error: %s"
msgstr "%s写入错误%s"
#: src/xz/hardware.c:225
#: src/xz/hardware.c:238
msgid "Disabled"
msgstr "已禁用"
#: src/xz/hardware.c:256
#: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):"
msgstr "物理内存RAM用量"
#: src/xz/hardware.c:257
#: src/xz/hardware.c:270
msgid "Number of processor threads:"
msgstr "处理器线程数:"
#: src/xz/hardware.c:258
#: src/xz/hardware.c:271
msgid "Compression:"
msgstr "压缩:"
#: src/xz/hardware.c:259
#: src/xz/hardware.c:272
msgid "Decompression:"
msgstr "解压缩:"
#: src/xz/hardware.c:260
#: src/xz/hardware.c:273
msgid "Multi-threaded decompression:"
msgstr "多线程解压缩:"
#: src/xz/hardware.c:261
#: src/xz/hardware.c:274
msgid "Default for -T0:"
msgstr "-T0 的默认值:"
#: src/xz/hardware.c:279
#: src/xz/hardware.c:292
msgid "Hardware information:"
msgstr "硬件信息:"
#: src/xz/hardware.c:286
#: src/xz/hardware.c:299
msgid "Memory usage limits:"
msgstr "内存使用限制:"
#: src/xz/list.c:65
#: src/xz/list.c:68
msgid "Streams:"
msgstr "流:"
#: src/xz/list.c:66
#: src/xz/list.c:69
msgid "Blocks:"
msgstr "块:"
#: src/xz/list.c:67
#: src/xz/list.c:70
msgid "Compressed size:"
msgstr "压缩后大小:"
#: src/xz/list.c:68
#: src/xz/list.c:71
msgid "Uncompressed size:"
msgstr "解压缩大小:"
#: src/xz/list.c:69
#: src/xz/list.c:72
msgid "Ratio:"
msgstr "比例:"
#: src/xz/list.c:70
#: src/xz/list.c:73
msgid "Check:"
msgstr "校验:"
#: src/xz/list.c:71
#: src/xz/list.c:74
msgid "Stream Padding:"
msgstr "流填充大小:"
#: src/xz/list.c:72
#: src/xz/list.c:75
msgid "Memory needed:"
msgstr "所需内存:"
#: src/xz/list.c:73
#: src/xz/list.c:76
msgid "Sizes in headers:"
msgstr "头部存放大小:"
#: src/xz/list.c:76
#: src/xz/list.c:79
msgid "Number of files:"
msgstr "文件数量:"
#: src/xz/list.c:119
#: src/xz/list.c:122
msgid "Stream"
msgstr "流"
#: src/xz/list.c:120
#: src/xz/list.c:123
msgid "Block"
msgstr "块"
#: src/xz/list.c:121
#: src/xz/list.c:124
msgid "Blocks"
msgstr "块"
#: src/xz/list.c:122
#: src/xz/list.c:125
msgid "CompOffset"
msgstr "压缩偏移量"
#: src/xz/list.c:123
#: src/xz/list.c:126
msgid "UncompOffset"
msgstr "解压偏移量"
#: src/xz/list.c:124
#: src/xz/list.c:127
msgid "CompSize"
msgstr "压缩后大小"
#: src/xz/list.c:125
#: src/xz/list.c:128
msgid "UncompSize"
msgstr "解压缩大小"
#: src/xz/list.c:126
#: src/xz/list.c:129
msgid "TotalSize"
msgstr "总大小"
#: src/xz/list.c:127
#: src/xz/list.c:130
msgid "Ratio"
msgstr "比例"
#: src/xz/list.c:128
#: src/xz/list.c:131
msgid "Check"
msgstr "校验"
#: src/xz/list.c:129
#: src/xz/list.c:132
msgid "CheckVal"
msgstr "校验值"
#: src/xz/list.c:130
#: src/xz/list.c:133
msgid "Padding"
msgstr "填充"
#: src/xz/list.c:131
#: src/xz/list.c:134
msgid "Header"
msgstr "头部"
#: src/xz/list.c:132
#: src/xz/list.c:135
msgid "Flags"
msgstr "标志"
#: src/xz/list.c:133
#: src/xz/list.c:136
msgid "MemUsage"
msgstr "内存用量"
#: src/xz/list.c:134
#: src/xz/list.c:137
msgid "Filters"
msgstr "过滤器"
@ -407,7 +422,7 @@ msgstr "过滤器"
#. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166
#: src/xz/list.c:169
msgid "None"
msgstr "无"
@ -415,60 +430,60 @@ msgstr "无"
#. but the Check ID is known (here 2). In older xz version these
#. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172
#: src/xz/list.c:175
msgid "Unknown-2"
msgstr "未知-2"
#: src/xz/list.c:173
#: src/xz/list.c:176
msgid "Unknown-3"
msgstr "未知-3"
#: src/xz/list.c:175
#: src/xz/list.c:178
msgid "Unknown-5"
msgstr "未知-5"
#: src/xz/list.c:176
#: src/xz/list.c:179
msgid "Unknown-6"
msgstr "未知-6"
#: src/xz/list.c:177
#: src/xz/list.c:180
msgid "Unknown-7"
msgstr "未知-7"
#: src/xz/list.c:178
#: src/xz/list.c:181
msgid "Unknown-8"
msgstr "未知-8"
#: src/xz/list.c:179
#: src/xz/list.c:182
msgid "Unknown-9"
msgstr "未知-9"
#: src/xz/list.c:181
#: src/xz/list.c:184
msgid "Unknown-11"
msgstr "未知-11"
#: src/xz/list.c:182
#: src/xz/list.c:185
msgid "Unknown-12"
msgstr "未知-12"
#: src/xz/list.c:183
#: src/xz/list.c:186
msgid "Unknown-13"
msgstr "未知-13"
#: src/xz/list.c:184
#: src/xz/list.c:187
msgid "Unknown-14"
msgstr "未知-14"
#: src/xz/list.c:185
#: src/xz/list.c:188
msgid "Unknown-15"
msgstr "未知-15"
#: src/xz/list.c:348
#: src/xz/list.c:351
#, c-format
msgid "%s: File is empty"
msgstr "%s文件为空"
#: src/xz/list.c:353
#: src/xz/list.c:356
#, c-format
msgid "%s: Too small to be a valid .xz file"
msgstr "%s过小而不是有效的 .xz 文件"
@ -477,40 +492,40 @@ msgstr "%s过小而不是有效的 .xz 文件"
#. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz".
#: src/xz/list.c:722
#: src/xz/list.c:731
msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr " 流 块 压缩大小 解压大小 比例 校验 文件名"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "Yes"
msgstr "是"
#: src/xz/list.c:1016 src/xz/list.c:1193
#: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No"
msgstr "否"
#: src/xz/list.c:1018 src/xz/list.c:1195
#: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format
msgid " Minimum XZ Utils version: %s\n"
msgstr " 最低 XZ Utils 版本:%s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this
#. message is used (e.g. "2 files"). Test with "xz -l foo.xz bar.xz".
#: src/xz/list.c:1168
#: src/xz/list.c:1179
#, c-format
msgid "%s file\n"
msgid_plural "%s files\n"
msgstr[0] "%s 文件\n"
#: src/xz/list.c:1181
#: src/xz/list.c:1192
msgid "Totals:"
msgstr "总计:"
#: src/xz/list.c:1259
#: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list 仅适用于 .xz 文件(--format=xz 或 --format=auto"
#: src/xz/list.c:1265
#: src/xz/list.c:1276
msgid "--list does not support reading from standard input"
msgstr "--list 不支持从标准输入读取"
@ -541,68 +556,68 @@ msgstr "无法同时从标准输入读取数据和文件名列表"
#. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs
#. a space before a colon.
#: src/xz/message.c:725
#: src/xz/message.c:670 src/xz/message.c:725
#, c-format
msgid "%s: "
msgstr "%s"
#: src/xz/message.c:788 src/xz/message.c:847
#: src/xz/message.c:797 src/xz/message.c:856
msgid "Internal error (bug)"
msgstr "内部错误bug"
#: src/xz/message.c:795
#: src/xz/message.c:804
msgid "Cannot establish signal handlers"
msgstr "无法建立信号处理器"
#: src/xz/message.c:804
#: src/xz/message.c:813
msgid "No integrity check; not verifying file integrity"
msgstr "无完整性检查;将不验证文件完整性"
#: src/xz/message.c:807
#: src/xz/message.c:816
msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "不支持的完整性检查类型;将不验证文件完整性"
#: src/xz/message.c:814
#: src/xz/message.c:823
msgid "Memory usage limit reached"
msgstr "达到内存使用限制"
#: src/xz/message.c:817
#: src/xz/message.c:826
msgid "File format not recognized"
msgstr "无法识别文件格式"
#: src/xz/message.c:820
#: src/xz/message.c:829
msgid "Unsupported options"
msgstr "不支持的选项"
#: src/xz/message.c:823
#: src/xz/message.c:832
msgid "Compressed data is corrupt"
msgstr "压缩数据已损坏"
#: src/xz/message.c:826
#: src/xz/message.c:835
msgid "Unexpected end of input"
msgstr "输入意外结束"
#: src/xz/message.c:868
#: src/xz/message.c:877
#, c-format
msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "需要 %s MiB 的内存空间。限制已禁用。"
#: src/xz/message.c:896
#: src/xz/message.c:905
#, c-format
msgid "%s MiB of memory is required. The limit is %s."
msgstr "需要 %s MiB 的内存空间。限制为 %s。"
#: src/xz/message.c:1070
#: src/xz/message.c:924
#, c-format
msgid "%s: Filter chain: %s\n"
msgstr "%s过滤器链%s\n"
#: src/xz/message.c:1080
#: src/xz/message.c:935
#, c-format
msgid "Try `%s --help' for more information."
msgstr "请尝试执行“%s --help”来获取更多信息。"
#: src/xz/message.c:1106
#: src/xz/message.c:961
#, c-format
msgid ""
"Usage: %s [OPTION]... [FILE]...\n"
@ -613,15 +628,15 @@ msgstr ""
"使用 .xz 格式压缩或解压缩文件。\n"
"\n"
#: src/xz/message.c:1113
#: src/xz/message.c:968
msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "必选参数对长短选项同时适用。\n"
#: src/xz/message.c:1117
#: src/xz/message.c:972
msgid " Operation mode:\n"
msgstr " 操作模式:\n"
#: src/xz/message.c:1120
#: src/xz/message.c:975
msgid ""
" -z, --compress force compression\n"
" -d, --decompress force decompression\n"
@ -633,7 +648,7 @@ msgstr ""
" -t, --test 测试压缩文件完整性\n"
" -l, --list 列出 .xz 文件的信息"
#: src/xz/message.c:1126
#: src/xz/message.c:981
msgid ""
"\n"
" Operation modifiers:\n"
@ -641,7 +656,7 @@ msgstr ""
"\n"
" 操作修饰符:\n"
#: src/xz/message.c:1129
#: src/xz/message.c:984
msgid ""
" -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n"
@ -651,13 +666,13 @@ msgstr ""
" -f, --force 强制覆写输出文件和(解)压缩链接\n"
" -c, --stdout 向标准输出写入,同时不要删除输入文件"
#: src/xz/message.c:1138
#: src/xz/message.c:993
msgid ""
" --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data"
msgstr " --single-stream 仅解压缩第一个流,忽略其后可能继续出现的输入数据"
#: src/xz/message.c:1141
#: src/xz/message.c:996
msgid ""
" --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -672,7 +687,7 @@ msgstr ""
" 将从标准输入读取文件名列表;文件名必须使用换行符分隔\n"
" --files0[=文件] 类似 --files但使用空字符进行分隔"
#: src/xz/message.c:1150
#: src/xz/message.c:1005
msgid ""
"\n"
" Basic file format and compression options:\n"
@ -680,7 +695,7 @@ msgstr ""
"\n"
" 基本文件格式和压缩选项:\n"
#: src/xz/message.c:1152
#: src/xz/message.c:1007
msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -693,11 +708,11 @@ msgstr ""
" -C, --check=类型 完整性检查类型“none”请谨慎使用、\n"
" “crc32”、“crc64”默认或“sha256”"
#: src/xz/message.c:1157
#: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check 解压缩时不要进行完整性检查验证"
#: src/xz/message.c:1161
#: src/xz/message.c:1016
msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!"
@ -705,7 +720,7 @@ msgstr ""
" -0 ... -9 压缩预设等级;默认为 6使用 7-9 的等级之前,请先考虑\n"
" 压缩和解压缩所需的内存用量!(会占用大量内存空间)"
#: src/xz/message.c:1165
#: src/xz/message.c:1020
msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements"
@ -713,7 +728,7 @@ msgstr ""
" -e, --extreme 尝试使用更多 CPU 时间来改进压缩比率;\n"
" 不会影响解压缩的内存需求量"
#: src/xz/message.c:1169
#: src/xz/message.c:1024
msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n"
" to use as many threads as there are processor cores"
@ -721,7 +736,7 @@ msgstr ""
" -T, --threads=数量 使用最多指定数量的线程;默认值为 1设置为 0\n"
" 可以使用与处理器内核数量相同的线程数"
#: src/xz/message.c:1174
#: src/xz/message.c:1029
msgid ""
" --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\n"
@ -731,7 +746,7 @@ msgstr ""
" 输入每读取指定块大小的数据后即开始一个新的 .xz 块;\n"
" 使用该选项可以设置多线程压缩中的块大小"
#: src/xz/message.c:1178
#: src/xz/message.c:1033
msgid ""
" --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\n"
@ -741,7 +756,7 @@ msgstr ""
" 在所给出的未压缩数据间隔大小的数据之后开始一个新的\n"
" .xz 块(使用逗号分隔)"
#: src/xz/message.c:1182
#: src/xz/message.c:1037
msgid ""
" --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n"
@ -752,7 +767,7 @@ msgstr ""
" 进行压缩时,如果从上次刷洗输出之后经过了指定的超时时间\n"
" 且读取更多数据会被阻塞,则刷洗输出所有缓冲数据"
#: src/xz/message.c:1188
#: src/xz/message.c:1043
#, no-c-format
msgid ""
" --memlimit-compress=LIMIT\n"
@ -771,13 +786,13 @@ msgstr ""
" 所指定限制量单位为字节,或以百分号 % 结尾表示内存比例,\n"
" 或者指定 0 取软件默认值"
#: src/xz/message.c:1197
#: src/xz/message.c:1052
msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards"
msgstr " --no-adjust 如果压缩设置超出内存用量限制,不调整设置而直接报错"
#: src/xz/message.c:1203
#: src/xz/message.c:1058
msgid ""
"\n"
" Custom filter chain for compression (alternative for using presets):"
@ -785,7 +800,7 @@ msgstr ""
"\n"
" 用于压缩的自定义过滤器链(不使用预设等级时的备选用法):"
#: src/xz/message.c:1212
#: src/xz/message.c:1067
msgid ""
"\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\n"
@ -814,7 +829,7 @@ msgstr ""
" (hc3, hc4, bt2, bt3, bt4; bt4)\n"
" depth=数字 最大搜索深度; 0=自动(默认)"
#: src/xz/message.c:1227
#: src/xz/message.c:1082
msgid ""
"\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -838,7 +853,7 @@ msgstr ""
" 所有过滤器可用选项:\n"
" start=数字 转换的起始偏移量(默认=0"
#: src/xz/message.c:1240
#: src/xz/message.c:1095
msgid ""
"\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\n"
@ -849,7 +864,7 @@ msgstr ""
" --delta[=选项] 增量过滤器;有效选项(有效值;默认值):\n"
" dist=NUM 相减的字节之间的距离 (1-256; 1)"
#: src/xz/message.c:1248
#: src/xz/message.c:1103
msgid ""
"\n"
" Other options:\n"
@ -857,7 +872,7 @@ msgstr ""
"\n"
" 其它选项:\n"
#: src/xz/message.c:1251
#: src/xz/message.c:1106
msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"
@ -865,21 +880,21 @@ msgstr ""
" -q, --quiet 不显示警告信息;指定两次可不显示错误信息\n"
" -v, --verbose 输出详细信息;指定两次可以输出更详细的信息"
#: src/xz/message.c:1256
#: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn 使得警告信息不影响程序退出返回值"
#: src/xz/message.c:1258
#: src/xz/message.c:1113
msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot 使用机器可解析的信息(对于脚本有用)"
#: src/xz/message.c:1261
#: src/xz/message.c:1116
msgid ""
" --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit"
msgstr " --info-memory 显示 RAM 总量和当前配置的内存用量限制,然后退出"
#: src/xz/message.c:1264
#: src/xz/message.c:1119
msgid ""
" -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit"
@ -887,7 +902,7 @@ msgstr ""
" -h, --help 显示短帮助信息(仅列出基本选项)\n"
" -H, --long-help 显示本长帮助信息"
#: src/xz/message.c:1268
#: src/xz/message.c:1123
msgid ""
" -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)"
@ -895,11 +910,11 @@ msgstr ""
" -h, --help 显示本短帮助信息并退出\n"
" -H, --long-help 显示长帮助信息(同时列出高级选项)"
#: src/xz/message.c:1273
#: src/xz/message.c:1128
msgid " -V, --version display the version number and exit"
msgstr " -V, --version 显示软件版本号并退出"
#: src/xz/message.c:1275
#: src/xz/message.c:1130
msgid ""
"\n"
"With no FILE, or when FILE is -, read standard input.\n"
@ -911,7 +926,7 @@ msgstr ""
#. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks.
#: src/xz/message.c:1281
#: src/xz/message.c:1136
#, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr ""
@ -919,12 +934,12 @@ msgstr ""
"请使用中文向 TP 简体中文翻译团队 <i18n-zh@googlegroups.com>\n"
"报告软件的简体中文翻译错误。\n"
#: src/xz/message.c:1283
#: src/xz/message.c:1138
#, c-format
msgid "%s home page: <%s>\n"
msgstr "%s 主页:<%s>\n"
#: src/xz/message.c:1287
#: src/xz/message.c:1142
msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "这是开发版本,不适用于生产环境使用。"
@ -943,36 +958,26 @@ msgstr "%s无效的选项名称"
msgid "%s: Invalid option value"
msgstr "%s无效的选项值"
#: src/xz/options.c:286
#: src/xz/options.c:247
#, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "不支持的 LZMA1/LZMA2 预设等级:%s"
#: src/xz/options.c:394
#: src/xz/options.c:355
msgid "The sum of lc and lp must not exceed 4"
msgstr "lc 和 lp 的和必须不大于 4"
#: src/xz/options.c:398
#, c-format
msgid "The selected match finder requires at least nice=%<PRIu32>"
msgstr "所选中的匹配搜索器match finder至少需要 nice=%<PRIu32>"
#: src/xz/suffix.c:134 src/xz/suffix.c:265
#, c-format
msgid "%s: With --format=raw, --suffix=.SUF is required unless writing to stdout"
msgstr "%s在启用 --format-raw 选项时,必须指定 --suffix=.SUF 获知写入至标准输出"
#: src/xz/suffix.c:165
#: src/xz/suffix.c:160
#, c-format
msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s文件名有未知后缀跳过"
#: src/xz/suffix.c:186
#: src/xz/suffix.c:181
#, c-format
msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s文件已有“%s”后缀名跳过"
#: src/xz/suffix.c:402
#: src/xz/suffix.c:388
#, c-format
msgid "%s: Invalid filename suffix"
msgstr "%s无效的文件名后缀"
@ -1012,6 +1017,9 @@ msgstr "写入标准输出失败"
msgid "Unknown error"
msgstr "未知错误"
#~ msgid "The selected match finder requires at least nice=%<PRIu32>"
#~ msgstr "所选中的匹配搜索器match finder至少需要 nice=%<PRIu32>"
#~ msgid "Sandbox is disabled due to incompatible command line arguments"
#~ msgstr "沙盒已因不兼容的命令行参数而禁用"

File diff suppressed because it is too large Load Diff

1297
po4a/de.po

File diff suppressed because it is too large Load Diff

3676
po4a/ko.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
# to get a new .po file. After translating the .po file, run
# "update-po" again to generate the translated man pages.
[po4a_langs] de fr ro
[po4a_langs] de fr ko pt_BR ro uk
[po4a_paths] xz-man.pot $lang:$lang.po
[type: man] ../src/xz/xz.1 $lang:man/$lang/xz.1

3677
po4a/pt_BR.po Normal file

File diff suppressed because it is too large Load Diff

1267
po4a/ro.po

File diff suppressed because it is too large Load Diff

3679
po4a/uk.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@ fi
if test ! -f po4a.conf; then
cd `dirname "$0"` || exit 1
if test ! -f po4a.conf; then
echo "update-po: Error: Cannot find po4a.conf." >&2
echo "po4a/update-po: Error: Cannot find po4a.conf." >&2
exit 1
fi
fi

View File

@ -79,7 +79,7 @@ do { \
} while (0)
#if !(defined(_WIN32) && !defined(__CYGWIN__))
#if !(defined(_WIN32) && !defined(__CYGWIN__)) && !defined(__wasm__)
// Use sigprocmask() to set the signal mask in single-threaded programs.
#include <signal.h>
@ -100,12 +100,18 @@ mythread_sigmask(int how, const sigset_t *restrict set,
// Using pthreads //
////////////////////
#include <sys/time.h>
#include <pthread.h>
#include <signal.h>
#include <time.h>
#include <errno.h>
// If clock_gettime() isn't available, use gettimeofday() from <sys/time.h>
// as a fallback. gettimeofday() is in SUSv2 and thus is supported on all
// relevant POSIX systems.
#ifndef HAVE_CLOCK_GETTIME
# include <sys/time.h>
#endif
#define MYTHREAD_RET_TYPE void *
#define MYTHREAD_RET_VALUE NULL
@ -219,8 +225,8 @@ static inline int
mythread_cond_init(mythread_cond *mycond)
{
#ifdef HAVE_CLOCK_GETTIME
// NOTE: HAVE_DECL_CLOCK_MONOTONIC is always defined to 0 or 1.
# if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && HAVE_DECL_CLOCK_MONOTONIC
# if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && \
defined(HAVE_CLOCK_MONOTONIC)
struct timespec ts;
pthread_condattr_t condattr;
@ -294,8 +300,8 @@ static inline void
mythread_condtime_set(mythread_condtime *condtime, const mythread_cond *cond,
uint32_t timeout_ms)
{
condtime->tv_sec = timeout_ms / 1000;
condtime->tv_nsec = (timeout_ms % 1000) * 1000000;
condtime->tv_sec = (time_t)(timeout_ms / 1000);
condtime->tv_nsec = (long)((timeout_ms % 1000) * 1000000);
#ifdef HAVE_CLOCK_GETTIME
struct timespec now;
@ -372,7 +378,7 @@ typedef struct {
abort(); \
if (pending_) { \
func(); \
if (!InitOnceComplete(&once, 0, NULL)) \
if (!InitOnceComplete(&once_, 0, NULL)) \
abort(); \
} \
} while (0)

View File

@ -24,7 +24,15 @@
# include <config.h>
#endif
// Get standard-compliant stdio functions under MinGW and MinGW-w64.
// This #define ensures that C99 and POSIX compliant stdio functions are
// available with MinGW-w64 (both 32-bit and 64-bit). Modern MinGW-w64 adds
// this automatically, for example, when the compiler is in C99 (or later)
// mode when building against msvcrt.dll. It still doesn't hurt to be explicit
// that we always want this and #define this unconditionally.
//
// With Universal CRT (UCRT) this is less important because UCRT contains
// C99-compatible stdio functions. It's still nice to #define this as UCRT
// doesn't support the POSIX thousand separator flag in printf (like "%'u").
#ifdef __MINGW32__
# define __USE_MINGW_ANSI_STDIO 1
#endif
@ -127,7 +135,7 @@
#include <stdlib.h>
#include <assert.h>
// Pre-C99 systems lack stdbool.h. All the code in LZMA Utils must be written
// Pre-C99 systems lack stdbool.h. All the code in XZ Utils must be written
// so that it works with fake bool type, for example:
//
// bool foo = (flags & 0x100) != 0;
@ -149,18 +157,8 @@ typedef unsigned char _Bool;
# define __bool_true_false_are_defined 1
#endif
// string.h should be enough but let's include strings.h and memory.h too if
// they exists, since that shouldn't do any harm, but may improve portability.
#include <string.h>
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#ifdef HAVE_MEMORY_H
# include <memory.h>
#endif
// As of MSVC 2013, inline and restrict are supported with
// non-standard keywords.
#if defined(_WIN32) && defined(_MSC_VER)

View File

@ -52,6 +52,12 @@
// and such functions.
#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500)
# include <immintrin.h>
// Only include <intrin.h> when it is needed. GCC and Clang can both
// use __builtin's, so we only need Windows instrincs when using MSVC.
// GCC and Clang can set _MSC_VER on Windows, so we need to exclude these
// cases explicitly.
#elif defined(_MSC_VER) && !TUKLIB_GNUC_REQ(3, 4) && !defined(__clang__)
# include <intrin.h>
#endif
@ -189,6 +195,9 @@
// Unaligned reads and writes //
////////////////////////////////
// No-strict-align archs like x86-64
// ---------------------------------
//
// The traditional way of casting e.g. *(const uint16_t *)uint8_pointer
// is bad even if the uint8_pointer is properly aligned because this kind
// of casts break strict aliasing rules and result in undefined behavior.
@ -203,12 +212,115 @@
// build time. A third method, casting to a packed struct, would also be
// an option but isn't provided to keep things simpler (it's already a mess).
// Hopefully this is flexible enough in practice.
//
// Some compilers on x86-64 like Clang >= 10 and GCC >= 5.1 detect that
//
// buf[0] | (buf[1] << 8)
//
// reads a 16-bit value and can emit a single 16-bit load and produce
// identical code than with the memcpy() method. In other cases Clang and GCC
// produce either the same or better code with memcpy(). For example, Clang 9
// on x86-64 can detect 32-bit load but not 16-bit load.
//
// MSVC uses unaligned access with the memcpy() method but emits byte-by-byte
// code for "buf[0] | (buf[1] << 8)".
//
// Conclusion: The memcpy() method is the best choice when unaligned access
// is supported.
//
// Strict-align archs like SPARC
// -----------------------------
//
// GCC versions from around 4.x to to at least 13.2.0 produce worse code
// from the memcpy() method than from simple byte-by-byte shift-or code
// when reading a 32-bit integer:
//
// (1) It may be constructed on stack using using four 8-bit loads,
// four 8-bit stores to stack, and finally one 32-bit load from stack.
//
// (2) Especially with -Os, an actual memcpy() call may be emitted.
//
// This is true on at least on ARM, ARM64, SPARC, SPARC64, MIPS64EL, and
// RISC-V. Of these, ARM, ARM64, and RISC-V support unaligned access in
// some processors but not all so this is relevant only in the case when
// GCC assumes that unaligned is not supported or -mstrict-align or
// -mno-unaligned-access is used.
//
// For Clang it makes little difference. ARM64 with -O2 -mstrict-align
// was one the very few with a minor difference: the memcpy() version
// was one instruction longer.
//
// Conclusion: At least in case of GCC and Clang, byte-by-byte code is
// the best choice for strict-align archs to do unaligned access.
//
// See also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111502
//
// Thanks to <https://godbolt.org/> it was easy to test different compilers.
// The following is for little endian targets:
/*
#include <stdint.h>
#include <string.h>
uint32_t bytes16(const uint8_t *b)
{
return (uint32_t)b[0]
| ((uint32_t)b[1] << 8);
}
uint32_t copy16(const uint8_t *b)
{
uint16_t v;
memcpy(&v, b, sizeof(v));
return v;
}
uint32_t bytes32(const uint8_t *b)
{
return (uint32_t)b[0]
| ((uint32_t)b[1] << 8)
| ((uint32_t)b[2] << 16)
| ((uint32_t)b[3] << 24);
}
uint32_t copy32(const uint8_t *b)
{
uint32_t v;
memcpy(&v, b, sizeof(v));
return v;
}
void wbytes16(uint8_t *b, uint16_t v)
{
b[0] = (uint8_t)v;
b[1] = (uint8_t)(v >> 8);
}
void wcopy16(uint8_t *b, uint16_t v)
{
memcpy(b, &v, sizeof(v));
}
void wbytes32(uint8_t *b, uint32_t v)
{
b[0] = (uint8_t)v;
b[1] = (uint8_t)(v >> 8);
b[2] = (uint8_t)(v >> 16);
b[3] = (uint8_t)(v >> 24);
}
void wcopy32(uint8_t *b, uint32_t v)
{
memcpy(b, &v, sizeof(v));
}
*/
#ifdef TUKLIB_FAST_UNALIGNED_ACCESS
static inline uint16_t
read16ne(const uint8_t *buf)
{
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
return *(const uint16_t *)buf;
#else
uint16_t num;
@ -221,8 +333,7 @@ read16ne(const uint8_t *buf)
static inline uint32_t
read32ne(const uint8_t *buf)
{
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
return *(const uint32_t *)buf;
#else
uint32_t num;
@ -235,8 +346,7 @@ read32ne(const uint8_t *buf)
static inline uint64_t
read64ne(const uint8_t *buf)
{
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
return *(const uint64_t *)buf;
#else
uint64_t num;
@ -249,8 +359,7 @@ read64ne(const uint8_t *buf)
static inline void
write16ne(uint8_t *buf, uint16_t num)
{
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
*(uint16_t *)buf = num;
#else
memcpy(buf, &num, sizeof(num));
@ -262,8 +371,7 @@ write16ne(uint8_t *buf, uint16_t num)
static inline void
write32ne(uint8_t *buf, uint32_t num)
{
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
*(uint32_t *)buf = num;
#else
memcpy(buf, &num, sizeof(num));
@ -275,8 +383,7 @@ write32ne(uint8_t *buf, uint32_t num)
static inline void
write64ne(uint8_t *buf, uint64_t num)
{
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
#ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
*(uint64_t *)buf = num;
#else
memcpy(buf, &num, sizeof(num));
@ -288,68 +395,122 @@ write64ne(uint8_t *buf, uint64_t num)
static inline uint16_t
read16be(const uint8_t *buf)
{
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint16_t num = read16ne(buf);
return conv16be(num);
#else
uint16_t num = ((uint16_t)buf[0] << 8) | (uint16_t)buf[1];
return num;
#endif
}
static inline uint16_t
read16le(const uint8_t *buf)
{
#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint16_t num = read16ne(buf);
return conv16le(num);
#else
uint16_t num = ((uint16_t)buf[0]) | ((uint16_t)buf[1] << 8);
return num;
#endif
}
static inline uint32_t
read32be(const uint8_t *buf)
{
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint32_t num = read32ne(buf);
return conv32be(num);
#else
uint32_t num = (uint32_t)buf[0] << 24;
num |= (uint32_t)buf[1] << 16;
num |= (uint32_t)buf[2] << 8;
num |= (uint32_t)buf[3];
return num;
#endif
}
static inline uint32_t
read32le(const uint8_t *buf)
{
#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint32_t num = read32ne(buf);
return conv32le(num);
#else
uint32_t num = (uint32_t)buf[0];
num |= (uint32_t)buf[1] << 8;
num |= (uint32_t)buf[2] << 16;
num |= (uint32_t)buf[3] << 24;
return num;
#endif
}
static inline uint64_t
read64be(const uint8_t *buf)
{
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint64_t num = read64ne(buf);
return conv64be(num);
}
static inline uint64_t
read64le(const uint8_t *buf)
{
uint64_t num = read64ne(buf);
return conv64le(num);
}
// NOTE: Possible byte swapping must be done in a macro to allow the compiler
// to optimize byte swapping of constants when using glibc's or *BSD's
// byte swapping macros. The actual write is done in an inline function
// to make type checking of the buf pointer possible.
#define write16be(buf, num) write16ne(buf, conv16be(num))
#define write32be(buf, num) write32ne(buf, conv32be(num))
#define write64be(buf, num) write64ne(buf, conv64be(num))
#define write16le(buf, num) write16ne(buf, conv16le(num))
#define write32le(buf, num) write32ne(buf, conv32le(num))
#define write64le(buf, num) write64ne(buf, conv64le(num))
#else
#ifdef WORDS_BIGENDIAN
# define read16ne read16be
# define read32ne read32be
# define read64ne read64be
# define write16ne write16be
# define write32ne write32be
# define write64ne write64be
#else
# define read16ne read16le
# define read32ne read32le
# define read64ne read64le
# define write16ne write16le
# define write32ne write32le
# define write64ne write64le
#endif
static inline uint16_t
read16be(const uint8_t *buf)
{
uint16_t num = ((uint16_t)buf[0] << 8) | (uint16_t)buf[1];
return num;
}
static inline uint16_t
read16le(const uint8_t *buf)
{
uint16_t num = ((uint16_t)buf[0]) | ((uint16_t)buf[1] << 8);
return num;
}
static inline uint32_t
read32be(const uint8_t *buf)
{
uint32_t num = (uint32_t)buf[0] << 24;
num |= (uint32_t)buf[1] << 16;
num |= (uint32_t)buf[2] << 8;
num |= (uint32_t)buf[3];
return num;
}
static inline uint32_t
read32le(const uint8_t *buf)
{
uint32_t num = (uint32_t)buf[0];
num |= (uint32_t)buf[1] << 8;
num |= (uint32_t)buf[2] << 16;
num |= (uint32_t)buf[3] << 24;
return num;
}
static inline uint64_t
read64be(const uint8_t *buf)
{
uint64_t num = (uint64_t)buf[0] << 56;
num |= (uint64_t)buf[1] << 48;
num |= (uint64_t)buf[2] << 40;
@ -359,17 +520,12 @@ read64be(const uint8_t *buf)
num |= (uint64_t)buf[6] << 8;
num |= (uint64_t)buf[7];
return num;
#endif
}
static inline uint64_t
read64le(const uint8_t *buf)
{
#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint64_t num = read64ne(buf);
return conv64le(num);
#else
uint64_t num = (uint64_t)buf[0];
num |= (uint64_t)buf[1] << 8;
num |= (uint64_t)buf[2] << 16;
@ -379,28 +535,9 @@ read64le(const uint8_t *buf)
num |= (uint64_t)buf[6] << 48;
num |= (uint64_t)buf[7] << 56;
return num;
#endif
}
// NOTE: Possible byte swapping must be done in a macro to allow the compiler
// to optimize byte swapping of constants when using glibc's or *BSD's
// byte swapping macros. The actual write is done in an inline function
// to make type checking of the buf pointer possible.
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
# define write16be(buf, num) write16ne(buf, conv16be(num))
# define write32be(buf, num) write32ne(buf, conv32be(num))
# define write64be(buf, num) write64ne(buf, conv64be(num))
#endif
#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
# define write16le(buf, num) write16ne(buf, conv16le(num))
# define write32le(buf, num) write32ne(buf, conv32le(num))
# define write64le(buf, num) write64ne(buf, conv64le(num))
#endif
#ifndef write16be
static inline void
write16be(uint8_t *buf, uint16_t num)
{
@ -408,10 +545,8 @@ write16be(uint8_t *buf, uint16_t num)
buf[1] = (uint8_t)num;
return;
}
#endif
#ifndef write16le
static inline void
write16le(uint8_t *buf, uint16_t num)
{
@ -419,10 +554,8 @@ write16le(uint8_t *buf, uint16_t num)
buf[1] = (uint8_t)(num >> 8);
return;
}
#endif
#ifndef write32be
static inline void
write32be(uint8_t *buf, uint32_t num)
{
@ -432,10 +565,8 @@ write32be(uint8_t *buf, uint32_t num)
buf[3] = (uint8_t)num;
return;
}
#endif
#ifndef write32le
static inline void
write32le(uint8_t *buf, uint32_t num)
{
@ -445,6 +576,37 @@ write32le(uint8_t *buf, uint32_t num)
buf[3] = (uint8_t)(num >> 24);
return;
}
static inline void
write64be(uint8_t *buf, uint64_t num)
{
buf[0] = (uint8_t)(num >> 56);
buf[1] = (uint8_t)(num >> 48);
buf[2] = (uint8_t)(num >> 40);
buf[3] = (uint8_t)(num >> 32);
buf[4] = (uint8_t)(num >> 24);
buf[5] = (uint8_t)(num >> 16);
buf[6] = (uint8_t)(num >> 8);
buf[7] = (uint8_t)num;
return;
}
static inline void
write64le(uint8_t *buf, uint64_t num)
{
buf[0] = (uint8_t)num;
buf[1] = (uint8_t)(num >> 8);
buf[2] = (uint8_t)(num >> 16);
buf[3] = (uint8_t)(num >> 24);
buf[4] = (uint8_t)(num >> 32);
buf[5] = (uint8_t)(num >> 40);
buf[6] = (uint8_t)(num >> 48);
buf[7] = (uint8_t)(num >> 56);
return;
}
#endif
@ -630,7 +792,7 @@ bsr32(uint32_t n)
#if defined(__INTEL_COMPILER)
return _bit_scan_reverse(n);
#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX == UINT32_MAX
#elif (TUKLIB_GNUC_REQ(3, 4) || defined(__clang__)) && UINT_MAX == UINT32_MAX
// GCC >= 3.4 has __builtin_clz(), which gives good results on
// multiple architectures. On x86, __builtin_clz() ^ 31U becomes
// either plain BSR (so the XOR gets optimized away) or LZCNT and
@ -684,7 +846,7 @@ clz32(uint32_t n)
#if defined(__INTEL_COMPILER)
return _bit_scan_reverse(n) ^ 31U;
#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX == UINT32_MAX
#elif (TUKLIB_GNUC_REQ(3, 4) || defined(__clang__)) && UINT_MAX == UINT32_MAX
return (uint32_t)__builtin_clz(n);
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
@ -736,7 +898,7 @@ ctz32(uint32_t n)
#if defined(__INTEL_COMPILER)
return _bit_scan_forward(n);
#elif TUKLIB_GNUC_REQ(3, 4) && UINT_MAX >= UINT32_MAX
#elif (TUKLIB_GNUC_REQ(3, 4) || defined(__clang__)) && UINT_MAX >= UINT32_MAX
return (uint32_t)__builtin_ctz(n);
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))

View File

@ -27,5 +27,5 @@ tuklib_mbstr_fw(const char *str, int columns_min)
if (width < (size_t)columns_min)
len += (size_t)columns_min - width;
return len;
return (int)len;
}

View File

@ -73,6 +73,17 @@
#endif
// With GCC >= 8.1 with -Wextra and Clang >= 13 with -Wcast-function-type
// will warn about the Windows-specific code.
#if defined(__has_warning)
# if __has_warning("-Wcast-function-type")
# define CAN_DISABLE_WCAST_FUNCTION_TYPE 1
# endif
#elif TUKLIB_GNUC_REQ(8,1)
# define CAN_DISABLE_WCAST_FUNCTION_TYPE 1
#endif
extern uint64_t
tuklib_physmem(void)
{
@ -87,8 +98,15 @@ tuklib_physmem(void)
HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll"));
if (kernel32 != NULL) {
typedef BOOL (WINAPI *gmse_type)(LPMEMORYSTATUSEX);
#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wcast-function-type"
#endif
gmse_type gmse = (gmse_type)GetProcAddress(
kernel32, "GlobalMemoryStatusEx");
#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE
# pragma GCC diagnostic pop
#endif
if (gmse != NULL) {
MEMORYSTATUSEX meminfo;
meminfo.dwLength = sizeof(meminfo);

View File

@ -14,7 +14,7 @@
#include <string.h>
#if !HAVE_DECL_PROGRAM_INVOCATION_NAME
#ifndef HAVE_PROGRAM_INVOCATION_NAME
char *progname = NULL;
#endif

View File

@ -18,7 +18,7 @@
TUKLIB_DECLS_BEGIN
#if HAVE_DECL_PROGRAM_INVOCATION_NAME
#ifdef HAVE_PROGRAM_INVOCATION_NAME
# define progname program_invocation_name
#else
# define progname TUKLIB_SYMBOL(tuklib_progname)

View File

@ -24,7 +24,7 @@ liblzma_la_CPPFLAGS = \
-I$(top_srcdir)/src/liblzma/simple \
-I$(top_srcdir)/src/common \
-DTUKLIB_SYMBOL_PREFIX=lzma_
liblzma_la_LDFLAGS = -no-undefined -version-info 9:0:4
liblzma_la_LDFLAGS = -no-undefined -version-info 9:6:4
EXTRA_DIST += liblzma_generic.map liblzma_linux.map validate_map.sh
if COND_SYMVERS_GENERIC
@ -72,11 +72,15 @@ endif
# static liblzma, we overwrite the static object file with an object file
# compiled from empty input. Note that GNU-specific features are OK here,
# because on Windows we are compiled with the GNU toolchain.
#
# The typedef in empty.c will prevent an empty translation unit, which is
# not allowed by the C standard. It results in a warning with
# -Wempty-translation-unit with Clang or -pedantic for GCC.
.rc.lo:
$(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \
$(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \
-i $< -o $@
echo > empty.c
echo "typedef void empty;" > empty.c
$(COMPILE) -c empty.c -o $(*D)/$(*F).o
# Remove ordinals from the generated .def file. People must link by name,

View File

@ -1,22 +1,23 @@
/**
* \file api/lzma.h
* \brief The public API of liblzma data compression library
* \mainpage
*
* liblzma is a public domain general-purpose data compression library with
* a zlib-like API. The native file format is .xz, but also the old .lzma
* format and raw (no headers) streams are supported. Multiple compression
* algorithms (filters) are supported. Currently LZMA2 is the primary filter.
*
* liblzma is part of XZ Utils <http://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.
* liblzma is part of XZ Utils <https://xz.tukaani.org/xz-utils/>. 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.
*
* Major parts of liblzma are based on Igor Pavlov's public domain LZMA SDK
* <http://7-zip.org/sdk.html>.
* <https://7-zip.org/sdk.html>.
*
* The SHA-256 implementation is based on the public domain code found from
* 7-Zip <http://7-zip.org/>, which has a modified version of the public
* domain SHA-256 code found from Crypto++ <http://www.cryptopp.com/>.
* 7-Zip <https://7-zip.org/>, which has a modified version of the public
* domain SHA-256 code found from Crypto++ <https://www.cryptopp.com/>.
* The SHA-256 code in Crypto++ was written by Kevin Springle and Wei Dai.
*/
@ -181,11 +182,11 @@
* against static liblzma on them, don't worry about LZMA_API_STATIC. That
* is, most developers will never need to use LZMA_API_STATIC.
*
* The GCC variants are a special case on Windows (Cygwin and MinGW).
* The GCC variants are a special case on Windows (Cygwin and MinGW-w64).
* We rely on GCC doing the right thing with its auto-import feature,
* and thus don't use __declspec(dllimport). This way developers don't
* need to worry about LZMA_API_STATIC. Also the calling convention is
* omitted on Cygwin but not on MinGW.
* omitted on Cygwin but not on MinGW-w64.
*/
#ifndef LZMA_API_IMPORT
# if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__GNUC__)

View File

@ -1,6 +1,7 @@
/**
* \file lzma/base.h
* \brief Data types and functions used in many places in liblzma API
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -138,7 +137,7 @@ typedef enum {
*/
LZMA_MEMLIMIT_ERROR = 6,
/**
/**<
* \brief Memory usage limit was reached
*
* Decoder would need more memory than allowed by the
@ -277,7 +276,7 @@ typedef enum {
* \brief The `action' argument for lzma_code()
*
* After the first use of LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, LZMA_FULL_BARRIER,
* or LZMA_FINISH, the same `action' must is used until lzma_code() returns
* or LZMA_FINISH, the same `action' must be used until lzma_code() returns
* LZMA_STREAM_END. Also, the amount of input (that is, strm->avail_in) must
* not be modified by the application until lzma_code() returns
* LZMA_STREAM_END. Changing the `action' or modifying the amount of input
@ -546,9 +545,17 @@ typedef struct {
* you should not touch these, because the names of these variables
* may change.
*/
/** \private Reserved member. */
void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2;
/** \private Reserved member. */
void *reserved_ptr3;
/** \private Reserved member. */
void *reserved_ptr4;
/**
@ -563,10 +570,19 @@ typedef struct {
*/
uint64_t seek_pos;
/** \private Reserved member. */
uint64_t reserved_int2;
/** \private Reserved member. */
size_t reserved_int3;
/** \private Reserved member. */
size_t reserved_int4;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2;
} lzma_stream;
@ -607,6 +623,14 @@ typedef struct {
*
* See the description of the coder-specific initialization function to find
* out what `action' values are supported by the coder.
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param action Action for this function to take. Must be a valid
* lzma_action enum value.
*
* \return Any valid lzma_ret. See the lzma_ret enum description for more
* information.
*/
extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action)
lzma_nothrow lzma_attr_warn_unused_result;
@ -615,15 +639,15 @@ extern LZMA_API(lzma_ret) lzma_code(lzma_stream *strm, lzma_action action)
/**
* \brief Free memory allocated for the coder data structures
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
*
* After lzma_end(strm), strm->internal is guaranteed to be NULL. No other
* members of the lzma_stream structure are touched.
*
* \note zlib indicates an error if application end()s unfinished
* stream structure. liblzma doesn't do this, and assumes that
* application knows what it is doing.
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
*/
extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow;
@ -642,6 +666,11 @@ extern LZMA_API(void) lzma_end(lzma_stream *strm) lzma_nothrow;
* mode by taking into account the progress made by each thread. In
* single-threaded mode *progress_in and *progress_out are set to
* strm->total_in and strm->total_out, respectively.
*
* \param strm Pointer to lzma_stream that is at least
* initialized with LZMA_STREAM_INIT.
* \param[out] progress_in Pointer to the number of input bytes processed.
* \param[out] progress_out Pointer to the number of output bytes processed.
*/
extern LZMA_API(void) lzma_get_progress(lzma_stream *strm,
uint64_t *progress_in, uint64_t *progress_out) lzma_nothrow;
@ -660,6 +689,9 @@ extern LZMA_API(void) lzma_get_progress(lzma_stream *strm,
* this may give misleading information if decoding .xz Streams that have
* multiple Blocks, because each Block can have different memory requirements.
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
*
* \return How much memory is currently allocated for the filter
* decoders. If no filter chain is currently allocated,
* some non-zero value is still returned, which is less than
@ -679,6 +711,9 @@ extern LZMA_API(uint64_t) lzma_memusage(const lzma_stream *strm)
* This function is supported only when *strm has been initialized with
* a function that takes a memlimit argument.
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
*
* \return On success, the current memory usage limit is returned
* (always non-zero). On error, zero is returned.
*/
@ -702,7 +737,8 @@ extern LZMA_API(uint64_t) lzma_memlimit_get(const lzma_stream *strm)
* after LZMA_MEMLIMIT_ERROR even if the limit was increased using
* lzma_memlimit_set(). Other decoders worked correctly.
*
* \return - LZMA_OK: New memory usage limit successfully set.
* \return Possible lzma_ret values:
* - LZMA_OK: New memory usage limit successfully set.
* - LZMA_MEMLIMIT_ERROR: The new limit is too small.
* The limit was not changed.
* - LZMA_PROG_ERROR: Invalid arguments, e.g. *strm doesn't

View File

@ -1,6 +1,7 @@
/**
* \file lzma/bcj.h
* \brief Branch/Call/Jump conversion filters
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -19,43 +18,44 @@
/* Filter IDs for lzma_filter.id */
/**
* \brief Filter for x86 binaries
*/
#define LZMA_FILTER_X86 LZMA_VLI_C(0x04)
/**<
* Filter for x86 binaries
*/
#define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05)
/**<
* Filter for Big endian PowerPC binaries
*/
#define LZMA_FILTER_IA64 LZMA_VLI_C(0x06)
/**<
* Filter for IA-64 (Itanium) binaries.
*/
#define LZMA_FILTER_ARM LZMA_VLI_C(0x07)
/**<
* Filter for ARM binaries.
*/
#define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08)
/**<
* Filter for ARM-Thumb binaries.
*/
#define LZMA_FILTER_SPARC LZMA_VLI_C(0x09)
/**<
* Filter for SPARC binaries.
*/
#define LZMA_FILTER_ARM64 LZMA_VLI_C(0x0A)
/**<
* Filter for ARM64 binaries.
*/
/**
* \brief Options for BCJ filters (except ARM64)
* \brief Filter for Big endian PowerPC binaries
*/
#define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05)
/**
* \brief Filter for IA-64 (Itanium) binaries
*/
#define LZMA_FILTER_IA64 LZMA_VLI_C(0x06)
/**
* \brief Filter for ARM binaries
*/
#define LZMA_FILTER_ARM LZMA_VLI_C(0x07)
/**
* \brief Filter for ARM-Thumb binaries
*/
#define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08)
/**
* \brief Filter for SPARC binaries
*/
#define LZMA_FILTER_SPARC LZMA_VLI_C(0x09)
/**
* \brief Filter for ARM64 binaries
*/
#define LZMA_FILTER_ARM64 LZMA_VLI_C(0x0A)
/**
* \brief Options for BCJ filters
*
* The BCJ filters never change the size of the data. Specifying options
* for them is optional: if pointer to options is NULL, default value is

View File

@ -1,6 +1,7 @@
/**
* \file lzma/block.h
* \brief .xz Block handling
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -32,19 +31,28 @@ typedef struct {
* \brief Block format version
*
* To prevent API and ABI breakages when new features are needed,
* a version number is used to indicate which fields in this
* a version number is used to indicate which members in this
* structure are in use:
* - liblzma >= 5.0.0: version = 0 is supported.
* - liblzma >= 5.1.4beta: Support for version = 1 was added,
* which adds the ignore_check field.
* which adds the ignore_check member.
*
* If version is greater than one, most Block related functions
* will return LZMA_OPTIONS_ERROR (lzma_block_header_decode() works
* with any version value).
*
* Read by:
* - All functions that take pointer to lzma_block as argument,
* including lzma_block_header_decode().
* - lzma_block_header_size()
* - lzma_block_header_encode()
* - lzma_block_header_decode()
* - lzma_block_compressed_size()
* - lzma_block_unpadded_size()
* - lzma_block_total_size()
* - lzma_block_encoder()
* - lzma_block_decoder()
* - lzma_block_buffer_encode()
* - lzma_block_uncomp_encode()
* - lzma_block_buffer_decode()
*
* Written by:
* - lzma_block_header_decode()
@ -52,7 +60,7 @@ typedef struct {
uint32_t version;
/**
* \brief Size of the Block Header field
* \brief Size of the Block Header field in bytes
*
* This is always a multiple of four.
*
@ -68,6 +76,7 @@ typedef struct {
* Written by:
* - lzma_block_header_size()
* - lzma_block_buffer_encode()
* - lzma_block_uncomp_encode()
*/
uint32_t header_size;
# define LZMA_BLOCK_HEADER_SIZE_MIN 8
@ -143,6 +152,7 @@ typedef struct {
* - lzma_block_encoder()
* - lzma_block_decoder()
* - lzma_block_buffer_encode()
* - lzma_block_uncomp_encode()
* - lzma_block_buffer_decode()
*/
lzma_vli compressed_size;
@ -167,6 +177,7 @@ typedef struct {
* - lzma_block_encoder()
* - lzma_block_decoder()
* - lzma_block_buffer_encode()
* - lzma_block_uncomp_encode()
* - lzma_block_buffer_decode()
*/
lzma_vli uncompressed_size;
@ -212,6 +223,7 @@ typedef struct {
* - lzma_block_encoder()
* - lzma_block_decoder()
* - lzma_block_buffer_encode()
* - lzma_block_uncomp_encode()
* - lzma_block_buffer_decode()
*/
uint8_t raw_check[LZMA_CHECK_SIZE_MAX];
@ -223,26 +235,56 @@ typedef struct {
* with the currently supported options, so it is safe to leave these
* uninitialized.
*/
/** \private Reserved member. */
void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2;
/** \private Reserved member. */
void *reserved_ptr3;
/** \private Reserved member. */
uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2;
/** \private Reserved member. */
lzma_vli reserved_int3;
/** \private Reserved member. */
lzma_vli reserved_int4;
/** \private Reserved member. */
lzma_vli reserved_int5;
/** \private Reserved member. */
lzma_vli reserved_int6;
/** \private Reserved member. */
lzma_vli reserved_int7;
/** \private Reserved member. */
lzma_vli reserved_int8;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum3;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum4;
/**
* \brief A flag to Block decoder to not verify the Check field
*
* This field is supported by liblzma >= 5.1.4beta if .version >= 1.
* This member is supported by liblzma >= 5.1.4beta if .version >= 1.
*
* If this is set to true, the integrity check won't be calculated
* and verified. Unless you know what you are doing, you should
@ -260,12 +302,25 @@ typedef struct {
*/
lzma_bool ignore_check;
/** \private Reserved member. */
lzma_bool reserved_bool2;
/** \private Reserved member. */
lzma_bool reserved_bool3;
/** \private Reserved member. */
lzma_bool reserved_bool4;
/** \private Reserved member. */
lzma_bool reserved_bool5;
/** \private Reserved member. */
lzma_bool reserved_bool6;
/** \private Reserved member. */
lzma_bool reserved_bool7;
/** \private Reserved member. */
lzma_bool reserved_bool8;
} lzma_block;
@ -280,7 +335,8 @@ typedef struct {
* Note that if the first byte is 0x00, it indicates beginning of Index; use
* this macro only when the byte is not 0x00.
*
* There is no encoding macro, because Block Header encoder is enough for that.
* There is no encoding macro because lzma_block_header_size() and
* lzma_block_header_encode() should be used.
*/
#define lzma_block_header_size_decode(b) (((uint32_t)(b) + 1) * 4)
@ -294,17 +350,20 @@ typedef struct {
* four and doesn't exceed LZMA_BLOCK_HEADER_SIZE_MAX. Increasing header_size
* just means that lzma_block_header_encode() will add Header Padding.
*
* \return - LZMA_OK: Size calculated successfully and stored to
* block->header_size.
* - LZMA_OPTIONS_ERROR: Unsupported version, filters or
* filter options.
* - LZMA_PROG_ERROR: Invalid values like compressed_size == 0.
*
* \note This doesn't check that all the options are valid i.e. this
* may return LZMA_OK even if lzma_block_header_encode() or
* lzma_block_encoder() would fail. If you want to validate the
* filter chain, consider using lzma_memlimit_encoder() which as
* a side-effect validates the filter chain.
*
* \param block Block options
*
* \return Possible lzma_ret values:
* - LZMA_OK: Size calculated successfully and stored to
* block->header_size.
* - LZMA_OPTIONS_ERROR: Unsupported version, filters or
* filter options.
* - LZMA_PROG_ERROR: Invalid values like compressed_size == 0.
*/
extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block)
lzma_nothrow lzma_attr_warn_unused_result;
@ -318,11 +377,12 @@ extern LZMA_API(lzma_ret) lzma_block_header_size(lzma_block *block)
* lzma_block_header_size() is used, the Block Header will be padded to the
* specified size.
*
* \param out Beginning of the output buffer. This must be
* at least block->header_size bytes.
* \param block Block options to be encoded.
* \param[out] out Beginning of the output buffer. This must be
* at least block->header_size bytes.
*
* \return - LZMA_OK: Encoding was successful. block->header_size
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful. block->header_size
* bytes were written to output buffer.
* - LZMA_OPTIONS_ERROR: Invalid or unsupported options.
* - LZMA_PROG_ERROR: Invalid arguments, for example
@ -354,14 +414,15 @@ extern LZMA_API(lzma_ret) lzma_block_header_encode(
* block->filters must have been allocated, but they don't need to be
* initialized (possible existing filter options are not freed).
*
* \param block Destination for Block options.
* \param[out] block Destination for Block options
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() (and also free()
* if an error occurs).
* \param in Beginning of the input buffer. This must be
* at least block->header_size bytes.
*
* \return - LZMA_OK: Decoding was successful. block->header_size
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful. block->header_size
* bytes were read from the input buffer.
* - LZMA_OPTIONS_ERROR: The Block Header specifies some
* unsupported options such as unsupported filters. This can
@ -398,7 +459,12 @@ extern LZMA_API(lzma_ret) lzma_block_header_decode(lzma_block *block,
* field so that it can properly validate Compressed Size if it
* was present in Block Header.
*
* \return - LZMA_OK: block->compressed_size was set successfully.
* \param block Block options: block->header_size must
* already be set with lzma_block_header_size().
* \param unpadded_size Unpadded Size from the Index field in bytes
*
* \return Possible lzma_ret values:
* - LZMA_OK: block->compressed_size was set successfully.
* - LZMA_DATA_ERROR: unpadded_size is too small compared to
* block->header_size and lzma_check_size(block->check).
* - LZMA_PROG_ERROR: Some values are invalid. For example,
@ -419,6 +485,9 @@ extern LZMA_API(lzma_ret) lzma_block_compressed_size(
* Compressed Size, and size of the Check field. This is where this function
* is needed.
*
* \param block Block options: block->header_size must already be
* set with lzma_block_header_size().
*
* \return Unpadded Size on success, or zero on error.
*/
extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block)
@ -431,6 +500,9 @@ extern LZMA_API(lzma_vli) lzma_block_unpadded_size(const lzma_block *block)
* This is equivalent to lzma_block_unpadded_size() except that the returned
* value includes the size of the Block Padding field.
*
* \param block Block options: block->header_size must already be
* set with lzma_block_header_size().
*
* \return On success, total encoded size of the Block. On error,
* zero is returned.
*/
@ -444,7 +516,17 @@ extern LZMA_API(lzma_vli) lzma_block_total_size(const lzma_block *block)
* Valid actions for lzma_code() are LZMA_RUN, LZMA_SYNC_FLUSH (only if the
* filter chain supports it), and LZMA_FINISH.
*
* \return - LZMA_OK: All good, continue with lzma_code().
* The Block encoder encodes the Block Data, Block Padding, and Check value.
* It does NOT encode the Block Header which can be encoded with
* lzma_block_header_encode().
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param block Block options: block->version, block->check,
* and block->filters must have been initialized.
*
* \return Possible lzma_ret values:
* - LZMA_OK: All good, continue with lzma_code().
* - LZMA_MEM_ERROR
* - LZMA_OPTIONS_ERROR
* - LZMA_UNSUPPORTED_CHECK: block->check specifies a Check ID
@ -463,7 +545,16 @@ extern LZMA_API(lzma_ret) lzma_block_encoder(
* Valid actions for lzma_code() are LZMA_RUN and LZMA_FINISH. Using
* LZMA_FINISH is not required. It is supported only for convenience.
*
* \return - LZMA_OK: All good, continue with lzma_code().
* The Block decoder decodes the Block Data, Block Padding, and Check value.
* It does NOT decode the Block Header which can be decoded with
* lzma_block_header_decode().
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param block Block options
*
* \return Possible lzma_ret values:
* - LZMA_OK: All good, continue with lzma_code().
* - LZMA_PROG_ERROR
* - LZMA_MEM_ERROR
*/
@ -477,6 +568,11 @@ extern LZMA_API(lzma_ret) lzma_block_decoder(
*
* This is equivalent to lzma_stream_buffer_bound() but for .xz Blocks.
* See the documentation of lzma_stream_buffer_bound().
*
* \param uncompressed_size Size of the data to be encoded with the
* single-call Block encoder.
*
* \return Maximum output size in bytes for single-call Block encoding.
*/
extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size)
lzma_nothrow;
@ -505,13 +601,14 @@ extern LZMA_API(size_t) lzma_block_buffer_bound(size_t uncompressed_size)
* Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer
* \param in_size Size of the input buffer
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_BUF_ERROR: Not enough output buffer space.
* - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR
@ -537,6 +634,25 @@ extern LZMA_API(lzma_ret) lzma_block_buffer_encode(
* Since the data won't be compressed, this function ignores block->filters.
* This function doesn't take lzma_allocator because this function doesn't
* allocate any memory from the heap.
*
* \param block Block options: block->version, block->check,
* and block->filters must have been initialized.
* \param in Beginning of the input buffer
* \param in_size Size of the input buffer
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_BUF_ERROR: Not enough output buffer space.
* - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR
* - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR
* - LZMA_PROG_ERROR
*/
extern LZMA_API(lzma_ret) lzma_block_uncomp_encode(lzma_block *block,
const uint8_t *in, size_t in_size,
@ -550,7 +666,7 @@ extern LZMA_API(lzma_ret) lzma_block_uncomp_encode(lzma_block *block,
* This is single-call equivalent of lzma_block_decoder(), and requires that
* the caller has already decoded Block Header and checked its memory usage.
*
* \param block Block options just like with lzma_block_decoder().
* \param block Block options
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer
@ -558,13 +674,14 @@ extern LZMA_API(lzma_ret) lzma_block_uncomp_encode(lzma_block *block,
* *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size].
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Decoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful.
* - LZMA_OPTIONS_ERROR
* - LZMA_DATA_ERROR
* - LZMA_MEM_ERROR

View File

@ -1,6 +1,7 @@
/**
* \file lzma/check.h
* \brief Integrity checks
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -71,12 +70,17 @@ typedef enum {
/**
* \brief Test if the given Check ID is supported
*
* Return true if the given Check ID is supported by this liblzma build.
* Otherwise false is returned. It is safe to call this with a value that
* is not in the range [0, 15]; in that case the return value is always false.
* LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always supported (even if
* liblzma is built with limited features).
*
* You can assume that LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always
* supported (even if liblzma is built with limited features).
* \note It is safe to call this with a value that is not in the
* range [0, 15]; in that case the return value is always false.
*
* \param check Check ID
*
* \return lzma_bool:
* - true if Check ID is supported by this liblzma build.
* - false otherwise.
*/
extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check)
lzma_nothrow lzma_attr_const;
@ -90,7 +94,10 @@ extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check)
* the Check field with the specified Check ID. The values are:
* { 0, 4, 4, 4, 8, 8, 8, 16, 16, 16, 32, 32, 32, 64, 64, 64 }
*
* If the argument is not in the range [0, 15], UINT32_MAX is returned.
* \param check Check ID
*
* \return Size of the Check field in bytes. If the argument is not in
* the range [0, 15], UINT32_MAX is returned.
*/
extern LZMA_API(uint32_t) lzma_check_size(lzma_check check)
lzma_nothrow lzma_attr_const;
@ -126,25 +133,32 @@ extern LZMA_API(uint32_t) lzma_crc32(
*
* Calculate CRC64 using the polynomial from the ECMA-182 standard.
*
* This function is used similarly to lzma_crc32(). See its documentation.
* This function is used similarly to lzma_crc32().
*
* \param buf Pointer to the input buffer
* \param size Size of the input buffer
* \param crc Previously returned CRC value. This is used to
* calculate the CRC of a big buffer in smaller chunks.
* Set to zero when starting a new calculation.
*
* \return Updated CRC value, which can be passed to this function
* again to continue CRC calculation.
*/
extern LZMA_API(uint64_t) lzma_crc64(
const uint8_t *buf, size_t size, uint64_t crc)
lzma_nothrow lzma_attr_pure;
/*
* SHA-256 functions are currently not exported to public API.
* Contact Lasse Collin if you think it should be.
*/
/**
* \brief Get the type of the integrity check
*
* This function can be called only immediately after lzma_code() has
* returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK.
* Calling this function in any other situation has undefined behavior.
*
* \param strm Pointer to lzma_stream meeting the above conditions.
*
* \return Check ID in the lzma_stream, or undefined if called improperly.
*/
extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm)
lzma_nothrow;

View File

@ -1,6 +1,7 @@
/**
* \file lzma/container.h
* \brief File formats
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -51,7 +50,7 @@
*
* This flag modifies the preset to make the encoding significantly slower
* while improving the compression ratio only marginally. This is useful
* when you don't mind wasting time to get as small result as possible.
* when you don't mind spending time to get as small result as possible.
*
* This flag doesn't affect the memory usage requirements of the decoder (at
* least not significantly). The memory usage of the encoder may be increased
@ -72,9 +71,12 @@ typedef struct {
* Encoder: No flags are currently supported.
*
* Decoder: Bitwise-or of zero or more of the decoder flags:
* LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
* LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
* LZMA_CONCATENATED, LZMA_FAIL_FAST
* - LZMA_TELL_NO_CHECK
* - LZMA_TELL_UNSUPPORTED_CHECK
* - LZMA_TELL_ANY_CHECK
* - LZMA_IGNORE_CHECK
* - LZMA_CONCATENATED
* - LZMA_FAIL_FAST
*/
uint32_t flags;
@ -111,7 +113,7 @@ typedef struct {
/**
* \brief Timeout to allow lzma_code() to return early
*
* Multithreading can make liblzma to consume input and produce
* Multithreading can make liblzma consume input and produce
* output in a very bursty way: it may first read a lot of input
* to fill internal buffers, then no input or output occurs for
* a while.
@ -128,14 +130,13 @@ typedef struct {
* LZMA_OK. Reasonable values are 100 ms or more. The xz command
* line tool uses 300 ms.
*
* If long blocking times are fine for you, set timeout to a special
* value of 0, which will disable the timeout mechanism and will make
* If long blocking times are acceptable, set timeout to a special
* value of 0. This will disable the timeout mechanism and will make
* lzma_code() block until all the input is consumed or the output
* buffer has been filled.
*
* \note Even with a timeout, lzma_code() might sometimes take
* somewhat long time to return. No timing guarantees
* are made.
* a long time to return. No timing guarantees are made.
*/
uint32_t timeout;
@ -171,12 +172,25 @@ typedef struct {
* with the currently supported options, so it is safe to leave these
* uninitialized.
*/
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum3;
/** \private Reserved member. */
uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2;
/** \private Reserved member. */
uint32_t reserved_int3;
/** \private Reserved member. */
uint32_t reserved_int4;
/**
@ -222,11 +236,22 @@ typedef struct {
*/
uint64_t memlimit_stop;
/** \private Reserved member. */
uint64_t reserved_int7;
/** \private Reserved member. */
uint64_t reserved_int8;
/** \private Reserved member. */
void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2;
/** \private Reserved member. */
void *reserved_ptr3;
/** \private Reserved member. */
void *reserved_ptr4;
} lzma_mt;
@ -240,8 +265,7 @@ typedef struct {
* \param preset Compression preset (level and possible flags)
*
* \return Number of bytes of memory required for the given
* preset when encoding. If an error occurs, for example
* due to unsupported preset, UINT64_MAX is returned.
* preset when encoding or UINT64_MAX on error.
*/
extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset)
lzma_nothrow lzma_attr_pure;
@ -255,9 +279,8 @@ extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset)
* \param preset Compression preset (level and possible flags)
*
* \return Number of bytes of memory required to decompress a file
* that was compressed using the given preset. If an error
* occurs, for example due to unsupported preset, UINT64_MAX
* is returned.
* that was compressed using the given preset or UINT64_MAX
* on error.
*/
extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset)
lzma_nothrow lzma_attr_pure;
@ -267,7 +290,16 @@ extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset)
* \brief Initialize .xz Stream encoder using a preset number
*
* This function is intended for those who just want to use the basic features
* if liblzma (that is, most developers out there).
* of liblzma (that is, most developers out there).
*
* If initialization fails (return value is not LZMA_OK), all the memory
* allocated for *strm by liblzma is always freed. Thus, there is no need
* to call lzma_end() after failed initialization.
*
* If initialization succeeds, use lzma_code() to do the actual encoding.
* Valid values for `action' (the second argument of lzma_code()) are
* LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future,
* there may be compression levels or flags that don't support LZMA_SYNC_FLUSH.
*
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
@ -283,7 +315,8 @@ extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset)
* unsure. LZMA_CHECK_CRC32 is good too as long as the
* uncompressed file is not many gigabytes.
*
* \return - LZMA_OK: Initialization succeeded. Use lzma_code() to
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization succeeded. Use lzma_code() to
* encode your data.
* - LZMA_MEM_ERROR: Memory allocation failed.
* - LZMA_OPTIONS_ERROR: The given compression preset is not
@ -292,15 +325,6 @@ extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset)
* supported by this liblzma build.
* - LZMA_PROG_ERROR: One or more of the parameters have values
* that will never be valid. For example, strm == NULL.
*
* If initialization fails (return value is not LZMA_OK), all the memory
* allocated for *strm by liblzma is always freed. Thus, there is no need
* to call lzma_end() after failed initialization.
*
* If initialization succeeds, use lzma_code() to do the actual encoding.
* Valid values for `action' (the second argument of lzma_code()) are
* LZMA_RUN, LZMA_SYNC_FLUSH, LZMA_FULL_FLUSH, and LZMA_FINISH. In future,
* there may be compression levels or flags that don't support LZMA_SYNC_FLUSH.
*/
extern LZMA_API(lzma_ret) lzma_easy_encoder(
lzma_stream *strm, uint32_t preset, lzma_check check)
@ -321,13 +345,14 @@ extern LZMA_API(lzma_ret) lzma_easy_encoder(
* Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer
* \param in_size Size of the input buffer
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_BUF_ERROR: Not enough output buffer space.
* - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR
@ -345,14 +370,16 @@ extern LZMA_API(lzma_ret) lzma_easy_buffer_encode(
/**
* \brief Initialize .xz Stream encoder using a custom filter chain
*
* \param strm Pointer to properly prepared lzma_stream
* \param filters Array of filters. This must be terminated with
* filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for
* more information.
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN. See filters.h for more
* information.
* \param check Type of the integrity check to calculate from
* uncompressed data.
*
* \return - LZMA_OK: Initialization was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization was successful.
* - LZMA_MEM_ERROR
* - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR
@ -392,10 +419,12 @@ extern LZMA_API(uint64_t) lzma_stream_encoder_mt_memusage(
* LZMA_FULL_BARRIER, and LZMA_FINISH. Support for LZMA_SYNC_FLUSH might be
* added in the future.
*
* \param strm Pointer to properly prepared lzma_stream
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param options Pointer to multithreaded compression options
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR
@ -421,7 +450,12 @@ extern LZMA_API(lzma_ret) lzma_stream_encoder_mt(
* No kind of flushing is supported, because the file format doesn't make
* it possible.
*
* \return - LZMA_OK
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param options Pointer to encoder options
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
@ -434,7 +468,7 @@ extern LZMA_API(lzma_ret) lzma_alone_encoder(
/**
* \brief Calculate output buffer size for single-call Stream encoder
*
* When trying to compress uncompressible data, the encoded size will be
* When trying to compress incompressible data, the encoded size will be
* slightly bigger than the input data. This function calculates how much
* output buffer space is required to be sure that lzma_stream_buffer_encode()
* doesn't return LZMA_BUF_ERROR.
@ -450,8 +484,13 @@ extern LZMA_API(lzma_ret) lzma_alone_encoder(
* \note The limit calculated by this function applies only to
* single-call encoding. Multi-call encoding may (and probably
* will) have larger maximum expansion when encoding
* uncompressible data. Currently there is no function to
* incompressible data. Currently there is no function to
* calculate the maximum expansion of multi-call encoding.
*
* \param uncompressed_size Size in bytes of the uncompressed
* input data
*
* \return Maximum number of bytes needed to store the compressed data.
*/
extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size)
lzma_nothrow;
@ -460,22 +499,23 @@ extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size)
/**
* \brief Single-call .xz Stream encoder
*
* \param filters Array of filters. This must be terminated with
* filters[n].id = LZMA_VLI_UNKNOWN. See filter.h
* for more information.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN. See filters.h for more
* information.
* \param check Type of the integrity check to calculate from
* uncompressed data.
* \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_size Size of the input buffer
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_BUF_ERROR: Not enough output buffer space.
* - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR
@ -531,7 +571,12 @@ extern LZMA_API(lzma_ret) lzma_stream_buffer_encode(
* uses too where many small streams are needed. XZ Embedded includes a
* decoder for this format.
*
* \return - LZMA_STREAM_END: All good. Check the amounts of input used
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param options Pointer to encoder options
*
* \return Possible lzma_ret values:
* - LZMA_STREAM_END: All good. Check the amounts of input used
* and output produced. Store the amount of input used
* (uncompressed size) as it needs to be known to decompress
* the data.
@ -542,7 +587,8 @@ extern LZMA_API(lzma_ret) lzma_stream_buffer_encode(
* output space (6 bytes) to create a valid MicroLZMA stream.
*/
extern LZMA_API(lzma_ret) lzma_microlzma_encoder(
lzma_stream *strm, const lzma_options_lzma *options);
lzma_stream *strm, const lzma_options_lzma *options)
lzma_nothrow;
/************
@ -648,7 +694,8 @@ extern LZMA_API(lzma_ret) lzma_microlzma_encoder(
/**
* \brief Initialize .xz Stream decoder
*
* \param strm Pointer to properly prepared lzma_stream
* \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
* 5.2.3 and earlier don't allow 0 here and return
@ -659,7 +706,8 @@ extern LZMA_API(lzma_ret) lzma_microlzma_encoder(
* LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
* LZMA_CONCATENATED, LZMA_FAIL_FAST
*
* \return - LZMA_OK: Initialization was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization was successful.
* - LZMA_MEM_ERROR: Cannot allocate memory.
* - LZMA_OPTIONS_ERROR: Unsupported flags
* - LZMA_PROG_ERROR
@ -672,9 +720,6 @@ extern LZMA_API(lzma_ret) lzma_stream_decoder(
/**
* \brief Initialize multithreaded .xz Stream decoder
*
* \param strm Pointer to properly prepared lzma_stream
* \param options Pointer to multithreaded compression options
*
* The decoder can decode multiple Blocks in parallel. This requires that each
* Block Header contains the Compressed Size and Uncompressed size fields
* which are added by the multi-threaded encoder, see lzma_stream_encoder_mt().
@ -688,7 +733,12 @@ extern LZMA_API(lzma_ret) lzma_stream_decoder(
* This function behaves like lzma_stream_decoder() when options->threads == 1
* and options->memlimit_threading <= 1.
*
* \return - LZMA_OK: Initialization was successful.
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param options Pointer to multithreaded compression options
*
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization was successful.
* - LZMA_MEM_ERROR: Cannot allocate memory.
* - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
* - LZMA_OPTIONS_ERROR: Unsupported flags.
@ -715,7 +765,8 @@ 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 properly prepared lzma_stream
* \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
* 5.2.3 and earlier don't allow 0 here and return
@ -726,7 +777,8 @@ extern LZMA_API(lzma_ret) lzma_stream_decoder_mt(
* LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
* LZMA_CONCATENATED, LZMA_FAIL_FAST
*
* \return - LZMA_OK: Initialization was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization was successful.
* - LZMA_MEM_ERROR: Cannot allocate memory.
* - LZMA_OPTIONS_ERROR: Unsupported flags
* - LZMA_PROG_ERROR
@ -739,18 +791,20 @@ extern LZMA_API(lzma_ret) lzma_auto_decoder(
/**
* \brief Initialize .lzma decoder (legacy file format)
*
* \param strm Pointer to properly prepared lzma_stream
* Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH.
* There is no need to use LZMA_FINISH, but it's allowed because it may
* simplify certain types of applications.
*
* \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
* 5.2.3 and earlier don't allow 0 here and return
* LZMA_PROG_ERROR; later versions treat 0 as if 1
* had been specified.
*
* Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH.
* There is no need to use LZMA_FINISH, but it's allowed because it may
* simplify certain types of applications.
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_PROG_ERROR
*/
@ -762,18 +816,6 @@ extern LZMA_API(lzma_ret) lzma_alone_decoder(
/**
* \brief Initialize .lz (lzip) decoder (a foreign file format)
*
* \param strm Pointer to properly prepared lzma_stream
* \param memlimit Memory usage limit as bytes. Use UINT64_MAX
* to effectively disable the limiter.
* \param flags Bitwise-or of flags, or zero for no flags.
* All decoder flags listed above are supported
* although only LZMA_CONCATENATED and (in very rare
* cases) LZMA_IGNORE_CHECK are actually useful.
* LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
* and LZMA_FAIL_FAST do nothing. LZMA_TELL_ANY_CHECK
* is supported for consistency only as CRC32 is
* always used in the .lz format.
*
* This decoder supports the .lz format version 0 and the unextended .lz
* format version 1:
*
@ -807,7 +849,21 @@ extern LZMA_API(lzma_ret) lzma_alone_decoder(
* one should ensure that none of the first four bytes of trailing data are
* equal to the magic bytes because lzip >= 1.20 requires it by default.
*
* \return - LZMA_OK: Initialization was successful.
* \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.
* \param flags Bitwise-or of flags, or zero for no flags.
* All decoder flags listed above are supported
* although only LZMA_CONCATENATED and (in very rare
* cases) LZMA_IGNORE_CHECK are actually useful.
* LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK,
* and LZMA_FAIL_FAST do nothing. LZMA_TELL_ANY_CHECK
* is supported for consistency only as CRC32 is
* always used in the .lz format.
*
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization was successful.
* - LZMA_MEM_ERROR: Cannot allocate memory.
* - LZMA_OPTIONS_ERROR: Unsupported flags
* - LZMA_PROG_ERROR
@ -836,13 +892,14 @@ extern LZMA_API(lzma_ret) lzma_lzip_decoder(
* *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size].
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if decoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Decoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful.
* - LZMA_FORMAT_ERROR
* - LZMA_OPTIONS_ERROR
* - LZMA_DATA_ERROR
@ -867,12 +924,13 @@ extern LZMA_API(lzma_ret) lzma_stream_buffer_decode(
/**
* \brief MicroLZMA decoder
*
* See lzma_microlzma_decoder() for more information.
* See lzma_microlzma_encoder() for more information.
*
* The lzma_code() usage with this decoder is completely normal. The
* special behavior of lzma_code() applies to lzma_microlzma_encoder() only.
*
* \param strm Pointer to properly prepared lzma_stream
* \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT.
* \param comp_size Compressed size of the MicroLZMA stream.
* The caller must somehow know this exactly.
* \param uncomp_size Uncompressed size of the MicroLZMA stream.
@ -897,8 +955,14 @@ extern LZMA_API(lzma_ret) lzma_stream_buffer_decode(
* the implementation in XZ Embedded it doesn't
* affect the memory usage if one specifies bigger
* dictionary than actually required.)
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
*/
extern LZMA_API(lzma_ret) lzma_microlzma_decoder(
lzma_stream *strm, uint64_t comp_size,
uint64_t uncomp_size, lzma_bool uncomp_size_is_exact,
uint32_t dict_size);
uint32_t dict_size) lzma_nothrow;

View File

@ -1,6 +1,7 @@
/**
* \file lzma/delta.h
* \brief Delta filter
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -57,7 +56,15 @@ typedef struct {
* - 24-bit RGB image data: distance = 3 bytes
*/
uint32_t dist;
/**
* \brief Minimum value for lzma_options_delta.dist.
*/
# define LZMA_DELTA_DIST_MIN 1
/**
* \brief Maximum value for lzma_options_delta.dist.
*/
# define LZMA_DELTA_DIST_MAX 256
/*
@ -67,11 +74,23 @@ typedef struct {
* when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these
* uninitialized.
*/
/** \private Reserved member. */
uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2;
/** \private Reserved member. */
uint32_t reserved_int3;
/** \private Reserved member. */
uint32_t reserved_int4;
/** \private Reserved member. */
void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2;
} lzma_options_delta;

View File

@ -1,6 +1,7 @@
/**
* \file lzma/filter.h
* \brief Common filter related types and functions
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -29,7 +28,7 @@
/**
* \brief Filter options
*
* This structure is used to pass Filter ID and a pointer filter's
* This structure is used to pass a Filter ID and a pointer to the filter's
* options to liblzma. A few functions work with a single lzma_filter
* structure, while most functions expect a filter chain.
*
@ -37,8 +36,8 @@
* The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter
* array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to
* be able to hold any arbitrary filter chain. This is important when
* using lzma_block_header_decode() from block.h, because too small
* array would make liblzma write past the end of the filters array.
* using lzma_block_header_decode() from block.h, because a filter array
* that is too small would make liblzma write past the end of the array.
*/
typedef struct {
/**
@ -68,12 +67,12 @@ typedef struct {
/**
* \brief Test if the given Filter ID is supported for encoding
*
* Return true if the give Filter ID is supported for encoding by this
* liblzma build. Otherwise false is returned.
* \param id Filter ID
*
* There is no way to list which filters are available in this particular
* liblzma version and build. It would be useless, because the application
* couldn't know what kind of options the filter would need.
* \return lzma_bool:
* - true if the Filter ID is supported for encoding by this
* liblzma build.
* - false otherwise.
*/
extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id)
lzma_nothrow lzma_attr_const;
@ -82,8 +81,12 @@ extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id)
/**
* \brief Test if the given Filter ID is supported for decoding
*
* Return true if the give Filter ID is supported for decoding by this
* liblzma build. Otherwise false is returned.
* \param id Filter ID
*
* \return lzma_bool:
* - true if the Filter ID is supported for decoding by this
* liblzma build.
* - false otherwise.
*/
extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id)
lzma_nothrow lzma_attr_const;
@ -112,7 +115,14 @@ extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id)
* array and leave its contents in an undefined state if an error occurs.
* liblzma 5.2.7 and newer only modify the dest array when returning LZMA_OK.
*
* \return - LZMA_OK
* \param src Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
* \param[out] dest Destination filter array
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options
* is not NULL.
@ -137,8 +147,13 @@ extern LZMA_API(lzma_ret) lzma_filters_copy(
* - options will be set to NULL.
* - id will be set to LZMA_VLI_UNKNOWN.
*
* If filters is NULL, this does nothing but remember that this never frees
* the filters array itself.
* If filters is NULL, this does nothing. Again, this never frees the
* filters array itself.
*
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*/
extern LZMA_API(void) lzma_filters_free(
lzma_filter *filters, const lzma_allocator *allocator)
@ -156,9 +171,7 @@ extern LZMA_API(void) lzma_filters_free(
* .id == LZMA_VLI_UNKNOWN.
*
* \return Number of bytes of memory required for the given
* filter chain when encoding. If an error occurs,
* for example due to unsupported filter chain,
* UINT64_MAX is returned.
* filter chain when encoding or UINT64_MAX on error.
*/
extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters)
lzma_nothrow lzma_attr_pure;
@ -175,9 +188,7 @@ extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters)
* .id == LZMA_VLI_UNKNOWN.
*
* \return Number of bytes of memory required for the given
* filter chain when decoding. If an error occurs,
* for example due to unsupported filter chain,
* UINT64_MAX is returned.
* filter chain when decoding or UINT64_MAX on error.
*/
extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters)
lzma_nothrow lzma_attr_pure;
@ -188,14 +199,16 @@ extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters)
*
* This function may be useful when implementing custom file formats.
*
* \param strm Pointer to properly prepared lzma_stream
* \param filters Array of lzma_filter structures. The end of the
* array must be marked with .id = LZMA_VLI_UNKNOWN.
*
* The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the
* filter chain supports it), or LZMA_FINISH.
*
* \return - LZMA_OK
* \param strm Pointer to lzma_stream that is at least
* initialized with LZMA_STREAM_INIT.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
@ -213,7 +226,13 @@ extern LZMA_API(lzma_ret) lzma_raw_encoder(
* The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using
* LZMA_FINISH is not required, it is supported just for convenience.
*
* \return - LZMA_OK
* \param strm Pointer to lzma_stream that is at least
* initialized with LZMA_STREAM_INIT.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
@ -235,7 +254,7 @@ extern LZMA_API(lzma_ret) lzma_raw_decoder(
* chain to be used for the next Block(s).
*
* - After LZMA_SYNC_FLUSH: Raw encoder (lzma_raw_encoder()),
* Block encocder (lzma_block_encoder()), and single-threaded .xz Stream
* Block encoder (lzma_block_encoder()), and single-threaded .xz Stream
* encoder (lzma_stream_encoder()) allow changing certain filter-specific
* options in the middle of encoding. The actual filters in the chain
* (Filter IDs) must not be changed! Currently only the lc, lp, and pb
@ -249,7 +268,13 @@ extern LZMA_API(lzma_ret) lzma_raw_decoder(
* as if LZMA_FULL_FLUSH (Stream encoders) or LZMA_SYNC_FLUSH (Raw or Block
* encoder) had been used right before calling this function.
*
* \return - LZMA_OK
* \param strm Pointer to lzma_stream that is at least
* initialized with LZMA_STREAM_INIT.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_MEMLIMIT_ERROR
* - LZMA_OPTIONS_ERROR
@ -262,29 +287,30 @@ extern LZMA_API(lzma_ret) lzma_filters_update(
/**
* \brief Single-call raw encoder
*
* \param filters Array of lzma_filter structures. The end of the
* array must be marked with .id = LZMA_VLI_UNKNOWN.
* \note There is no function to calculate how big output buffer
* would surely be big enough. (lzma_stream_buffer_bound()
* works only for lzma_stream_buffer_encode(); raw encoder
* won't necessarily meet that bound.)
*
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
* \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_size Size of the input buffer
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_BUF_ERROR: Not enough output buffer space.
* - LZMA_OPTIONS_ERROR
* - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR
* - LZMA_PROG_ERROR
*
* \note There is no function to calculate how big output buffer
* would surely be big enough. (lzma_stream_buffer_bound()
* works only for lzma_stream_buffer_encode(); raw encoder
* won't necessarily meet that bound.)
*/
extern LZMA_API(lzma_ret) lzma_raw_buffer_encode(
const lzma_filter *filters, const lzma_allocator *allocator,
@ -295,8 +321,8 @@ extern LZMA_API(lzma_ret) lzma_raw_buffer_encode(
/**
* \brief Single-call raw decoder
*
* \param filters Array of lzma_filter structures. The end of the
* array must be marked with .id = LZMA_VLI_UNKNOWN.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer
@ -304,11 +330,19 @@ extern LZMA_API(lzma_ret) lzma_raw_buffer_encode(
* *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size].
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful.
* - LZMA_BUF_ERROR: Not enough output buffer space.
* - LZMA_OPTIONS_ERROR
* - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR
* - LZMA_PROG_ERROR
*/
extern LZMA_API(lzma_ret) lzma_raw_buffer_decode(
const lzma_filter *filters, const lzma_allocator *allocator,
@ -322,18 +356,19 @@ extern LZMA_API(lzma_ret) lzma_raw_buffer_decode(
* This function may be useful when implementing custom file formats
* using the raw encoder and decoder.
*
* \param size Pointer to uint32_t to hold the size of the properties
* \param filter Filter ID and options (the size of the properties may
* vary depending on the options)
*
* \return - LZMA_OK
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
*
* \note This function validates the Filter ID, but does not
* necessarily validate the options. Thus, it is possible
* that this returns LZMA_OK while the following call to
* lzma_properties_encode() returns LZMA_OPTIONS_ERROR.
*
* \param[out] size Pointer to uint32_t to hold the size of the properties
* \param filter Filter ID and options (the size of the properties may
* vary depending on the options)
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
*/
extern LZMA_API(lzma_ret) lzma_properties_size(
uint32_t *size, const lzma_filter *filter) lzma_nothrow;
@ -342,15 +377,6 @@ extern LZMA_API(lzma_ret) lzma_properties_size(
/**
* \brief Encode the Filter Properties field
*
* \param filter Filter ID and options
* \param props Buffer to hold the encoded options. The size of
* buffer must have been already determined with
* lzma_properties_size().
*
* \return - LZMA_OK
* - LZMA_OPTIONS_ERROR
* - LZMA_PROG_ERROR
*
* \note Even this function won't validate more options than actually
* necessary. Thus, it is possible that encoding the properties
* succeeds but using the same options to initialize the encoder
@ -360,6 +386,15 @@ extern LZMA_API(lzma_ret) lzma_properties_size(
* of the Filter Properties field is zero, calling
* lzma_properties_encode() is not required, but it
* won't do any harm either.
*
* \param filter Filter ID and options
* \param[out] props Buffer to hold the encoded options. The size of
* the buffer must have been already determined with
* lzma_properties_size().
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_PROG_ERROR
*/
extern LZMA_API(lzma_ret) lzma_properties_encode(
const lzma_filter *filter, uint8_t *props) lzma_nothrow;
@ -375,15 +410,16 @@ extern LZMA_API(lzma_ret) lzma_properties_encode(
* it's application's responsibility to free it when
* appropriate. filter->options is set to NULL if
* there are no properties or if an error occurs.
* \param allocator Custom memory allocator used to allocate the
* options. Set to NULL to use the default malloc(),
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
* and in case of an error, also free().
* \param props Input buffer containing the properties.
* \param props_size Size of the properties. This must be the exact
* size; giving too much or too little input will
* return LZMA_OPTIONS_ERROR.
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR
* - LZMA_MEM_ERROR
*/
@ -398,18 +434,19 @@ extern LZMA_API(lzma_ret) lzma_properties_decode(
* Knowing the size of Filter Flags is useful to know when allocating
* memory to hold the encoded Filter Flags.
*
* \param size Pointer to integer to hold the calculated size
* \note If you need to calculate size of List of Filter Flags,
* you need to loop over every lzma_filter entry.
*
* \param[out] size Pointer to integer to hold the calculated size
* \param filter Filter ID and associated options whose encoded
* size is to be calculated
*
* \return - LZMA_OK: *size set successfully. Note that this doesn't
* \return Possible lzma_ret values:
* - LZMA_OK: *size set successfully. Note that this doesn't
* guarantee that filter->options is valid, thus
* lzma_filter_flags_encode() may still fail.
* - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options.
* - LZMA_PROG_ERROR: Invalid options
*
* \note If you need to calculate size of List of Filter Flags,
* you need to loop over every lzma_filter entry.
*/
extern LZMA_API(lzma_ret) lzma_filter_flags_size(
uint32_t *size, const lzma_filter *filter)
@ -423,12 +460,13 @@ extern LZMA_API(lzma_ret) lzma_filter_flags_size(
* This is due to how this function is used internally by liblzma.
*
* \param filter Filter ID and options to be encoded
* \param out Beginning of the output buffer
* \param out_pos out[*out_pos] is the next write position. This
* \param[out] out Beginning of the output buffer
* \param[out] out_pos out[*out_pos] is the next write position. This
* is updated by the encoder.
* \param out_size out[out_size] is the first byte to not write.
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_OPTIONS_ERROR: Invalid or unsupported options.
* - LZMA_PROG_ERROR: Invalid options or not enough output
* buffer space (you should have checked it with
@ -443,11 +481,26 @@ extern LZMA_API(lzma_ret) lzma_filter_flags_encode(const lzma_filter *filter,
* \brief Decode Filter Flags from given buffer
*
* The decoded result is stored into *filter. The old value of
* filter->options is not free()d.
* filter->options is not free()d. If anything other than LZMA_OK
* is returned, filter->options is set to NULL.
*
* \return - LZMA_OK
* \param[out] filter Destination filter. The decoded Filter ID will
* be stored in filter->id. If options are needed
* they will be allocated and the pointer will be
* stored in filter->options.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer
* \param[out] in_pos The next byte will be read from in[*in_pos].
* *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size].
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR
* - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR
* - LZMA_PROG_ERROR
*/
extern LZMA_API(lzma_ret) lzma_filter_flags_decode(
@ -474,8 +527,9 @@ extern LZMA_API(lzma_ret) lzma_filter_flags_decode(
*
* By default lzma_str_to_filters() can return an error if the filter chain
* as a whole isn't usable in the .xz format or in the raw encoder or decoder.
* With this flag the validation is skipped (this doesn't affect the handling
* of the individual filter options).
* With this flag, this validation is skipped. This flag doesn't affect the
* handling of the individual filter options. To allow non-.xz filters also
* LZMA_STR_ALL_FILTERS is needed.
*/
#define LZMA_STR_NO_VALIDATION UINT32_C(0x02)
@ -573,34 +627,6 @@ extern LZMA_API(lzma_ret) lzma_filter_flags_decode(
* lzma_str_list_filters(). See the xz man page for the description
* of filter names and options.
*
* \param str User-supplied string describing a preset or
* a filter chain. If a default value is needed and
* you don't know what would be good, use "6" since
* that is the default preset in xz too.
* \param error_pos If this isn't NULL, this value will be set on
* both success and on all errors. This tells the
* location of the error in the string. This is
* an int to make it straightforward to use this
* as printf() field width. The value is guaranteed
* to be in the range [0, INT_MAX] even if strlen(str)
* somehow was greater than INT_MAX.
* \param filters An array of lzma_filter structures. There must
* be LZMA_FILTERS_MAX + 1 (that is, five) elements
* in the array. The old contents are ignored so it
* doesn't need to be initialized. This array is
* modified only if this function returns LZMA_OK.
* Once the allocated filter options are no longer
* needed, lzma_filters_free() can be used to free the
* options (it doesn't free the filters array itself).
* \param flags Bitwise-or of zero or more of the flags
* LZMA_STR_ALL_FILTERS and LZMA_STR_NO_VALIDATION.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return On success, NULL is returned. On error, a statically-allocated
* error message is returned which together with the error_pos
* should give some idea what is wrong.
*
* For command line applications, below is an example how an error message
* can be displayed. Note the use of an empty string for the field width.
* If "^" was used there it would create an off-by-one error except at
@ -618,6 +644,34 @@ extern LZMA_API(lzma_ret) lzma_filter_flags_decode(
* printf("%s: %s\n", argv[0], msg);
* }
* \endcode
*
* \param str User-supplied string describing a preset or
* a filter chain. If a default value is needed and
* you don't know what would be good, use "6" since
* that is the default preset in xz too.
* \param[out] error_pos If this isn't NULL, this value will be set on
* both success and on all errors. This tells the
* location of the error in the string. This is
* an int to make it straightforward to use this
* as printf() field width. The value is guaranteed
* to be in the range [0, INT_MAX] even if strlen(str)
* somehow was greater than INT_MAX.
* \param[out] filters An array of lzma_filter structures. There must
* be LZMA_FILTERS_MAX + 1 (that is, five) elements
* in the array. The old contents are ignored so it
* doesn't need to be initialized. This array is
* modified only if this function returns NULL.
* Once the allocated filter options are no longer
* needed, lzma_filters_free() can be used to free the
* options (it doesn't free the filters array itself).
* \param flags Bitwise-or of zero or more of the flags
* LZMA_STR_ALL_FILTERS and LZMA_STR_NO_VALIDATION.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return On success, NULL is returned. On error, a statically-allocated
* error message is returned which together with the error_pos
* should give some idea what is wrong.
*/
extern LZMA_API(const char *) lzma_str_to_filters(
const char *str, int *error_pos, lzma_filter *filters,
@ -646,19 +700,20 @@ extern LZMA_API(const char *) lzma_str_to_filters(
* specify "6" to lzma_str_to_filters() then lzma_str_from_filters()
* will produce a string containing "lzma2".
*
* \param str On success *str will be set to point to an
* \param[out] str On success *str will be set to point to an
* allocated string describing the given filter
* chain. Old value is ignored. On error *str is
* always set to NULL.
* \param filters Array of 1-4 filters and a terminating element
* with .id = LZMA_VLI_UNKNOWN.
* \param filters Array of filters terminated with
* .id == LZMA_VLI_UNKNOWN.
* \param flags Bitwise-or of zero or more of the flags
* LZMA_STR_ENCODER, LZMA_STR_DECODER,
* LZMA_STR_GETOPT_LONG, and LZMA_STR_NO_SPACES.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR: Empty filter chain
* (filters[0].id == LZMA_VLI_UNKNOWN) or the filter chain
* includes a Filter ID that is not supported by this function.
@ -676,7 +731,7 @@ extern LZMA_API(lzma_ret) lzma_str_from_filters(
*
* If a filter_id is given then only one line is created which contains the
* filter name. If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then the
* options required for encoding or decoding are listed on the same line too.
* options read by the encoder or decoder are printed on the same line.
*
* If filter_id is LZMA_VLI_UNKNOWN then all supported .xz-compatible filters
* are listed:
@ -687,7 +742,7 @@ extern LZMA_API(lzma_ret) lzma_str_from_filters(
*
* - If LZMA_STR_ENCODER or LZMA_STR_DECODER is used then filters and
* the supported options are listed one filter per line. There won't
* be a '\n' after the last filter.
* be a newline after the last filter.
*
* - If LZMA_STR_ALL_FILTERS is used then the list will include also
* those filters that cannot be used in the .xz format (LZMA1).
@ -703,7 +758,8 @@ extern LZMA_API(lzma_ret) lzma_str_from_filters(
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR: Unsupported filter_id or flags
* - LZMA_MEM_ERROR
* - LZMA_PROG_ERROR

View File

@ -1,6 +1,7 @@
/**
* \file lzma/hardware.h
* \brief Hardware information
* \note Never include this file directly. Use <lzma.h> instead.
*
* Since liblzma can consume a lot of system resources, it also provides
* ways to limit the resource usage. Applications linking against liblzma
@ -25,8 +26,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL

View File

@ -1,6 +1,7 @@
/**
* \file lzma/index.h
* \brief Handling of .xz Index and related information
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -50,8 +49,13 @@ typedef struct {
*/
const lzma_stream_flags *flags;
/** \private Reserved member. */
const void *reserved_ptr1;
/** \private Reserved member. */
const void *reserved_ptr2;
/** \private Reserved member. */
const void *reserved_ptr3;
/**
@ -107,9 +111,17 @@ typedef struct {
*/
lzma_vli padding;
/** \private Reserved member. */
lzma_vli reserved_vli1;
/** \private Reserved member. */
lzma_vli reserved_vli2;
/** \private Reserved member. */
lzma_vli reserved_vli3;
/** \private Reserved member. */
lzma_vli reserved_vli4;
} stream;
@ -196,25 +208,46 @@ typedef struct {
*/
lzma_vli total_size;
/** \private Reserved member. */
lzma_vli reserved_vli1;
/** \private Reserved member. */
lzma_vli reserved_vli2;
/** \private Reserved member. */
lzma_vli reserved_vli3;
/** \private Reserved member. */
lzma_vli reserved_vli4;
/** \private Reserved member. */
const void *reserved_ptr1;
/** \private Reserved member. */
const void *reserved_ptr2;
/** \private Reserved member. */
const void *reserved_ptr3;
/** \private Reserved member. */
const void *reserved_ptr4;
} block;
/*
/**
* \private Internal struct.
*
* Internal data which is used to store the state of the iterator.
* The exact format may vary between liblzma versions, so don't
* touch these in any way.
*/
union {
/** \private Internal member. */
const void *p;
/** \private Internal member. */
size_t s;
/** \private Internal member. */
lzma_vli v;
} internal[6];
} lzma_index_iter;
@ -272,16 +305,21 @@ typedef enum {
* \brief Calculate memory usage of lzma_index
*
* On disk, the size of the Index field depends on both the number of Records
* stored and how big values the Records store (due to variable-length integer
* stored and the size of the Records (due to variable-length integer
* encoding). When the Index is kept in lzma_index structure, the memory usage
* depends only on the number of Records/Blocks stored in the Index(es), and
* in case of concatenated lzma_indexes, the number of Streams. The size in
* RAM is almost always significantly bigger than in the encoded form on disk.
*
* This function calculates an approximate amount of memory needed hold
* This function calculates an approximate amount of memory needed to hold
* the given number of Streams and Blocks in lzma_index structure. This
* value may vary between CPU architectures and also between liblzma versions
* if the internal implementation is modified.
*
* \param streams Number of Streams
* \param blocks Number of Blocks
*
* \return Approximate memory in bytes needed in a lzma_index structure.
*/
extern LZMA_API(uint64_t) lzma_index_memusage(
lzma_vli streams, lzma_vli blocks) lzma_nothrow;
@ -292,6 +330,10 @@ extern LZMA_API(uint64_t) lzma_index_memusage(
*
* This is a shorthand for lzma_index_memusage(lzma_index_stream_count(i),
* lzma_index_block_count(i)).
*
* \param i Pointer to lzma_index structure
*
* \return Approximate memory in bytes used by the lzma_index structure.
*/
extern LZMA_API(uint64_t) lzma_index_memused(const lzma_index *i)
lzma_nothrow;
@ -300,6 +342,9 @@ extern LZMA_API(uint64_t) lzma_index_memused(const lzma_index *i)
/**
* \brief Allocate and initialize a new lzma_index structure
*
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return On success, a pointer to an empty initialized lzma_index is
* returned. If allocation fails, NULL is returned.
*/
@ -311,6 +356,10 @@ extern LZMA_API(lzma_index *) lzma_index_init(const lzma_allocator *allocator)
* \brief Deallocate lzma_index
*
* If i is NULL, this does nothing.
*
* \param i Pointer to lzma_index structure to deallocate
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*/
extern LZMA_API(void) lzma_index_end(
lzma_index *i, const lzma_allocator *allocator) lzma_nothrow;
@ -320,8 +369,9 @@ extern LZMA_API(void) lzma_index_end(
* \brief Add a new Block to lzma_index
*
* \param i Pointer to a lzma_index structure
* \param allocator Pointer to lzma_allocator, or NULL to
* use malloc()
* \param allocator lzma_allocator for custom allocator
* functions. Set to NULL to use malloc()
* and free().
* \param unpadded_size Unpadded Size of a Block. This can be
* calculated with lzma_block_unpadded_size()
* after encoding or decoding the Block.
@ -334,7 +384,8 @@ extern LZMA_API(void) lzma_index_end(
* lzma_index_append() it is possible to read the next Block with
* an existing iterator.
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR: Compressed or uncompressed size of the
* Stream or size of the Index field would grow too big.
@ -354,11 +405,15 @@ extern LZMA_API(lzma_ret) lzma_index_append(
* lzma_index, because to decode Blocks, knowing the integrity check type
* is needed.
*
* The given Stream Flags are copied into internal preallocated structure
* in the lzma_index, thus the caller doesn't need to keep the *stream_flags
* available after calling this function.
* \param i Pointer to lzma_index structure
* \param stream_flags Pointer to lzma_stream_flags structure. This
* is copied into the internal preallocated
* structure, so the caller doesn't need to keep
* the flags' data available after calling this
* function.
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR: Unsupported stream_flags->version.
* - LZMA_PROG_ERROR
*/
@ -376,6 +431,10 @@ extern LZMA_API(lzma_ret) lzma_index_stream_flags(
* showing the Check types to the user.
*
* The bitmask is 1 << check_id, e.g. CRC32 is 1 << 1 and SHA-256 is 1 << 10.
*
* \param i Pointer to lzma_index structure
*
* \return Bitmask indicating which Check types are used in the lzma_index
*/
extern LZMA_API(uint32_t) lzma_index_checks(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -390,7 +449,8 @@ extern LZMA_API(uint32_t) lzma_index_checks(const lzma_index *i)
*
* By default, the amount of Stream Padding is assumed to be zero bytes.
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_DATA_ERROR: The file size would grow too big.
* - LZMA_PROG_ERROR
*/
@ -401,6 +461,10 @@ extern LZMA_API(lzma_ret) lzma_index_stream_padding(
/**
* \brief Get the number of Streams
*
* \param i Pointer to lzma_index structure
*
* \return Number of Streams in the lzma_index
*/
extern LZMA_API(lzma_vli) lzma_index_stream_count(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -411,6 +475,10 @@ extern LZMA_API(lzma_vli) lzma_index_stream_count(const lzma_index *i)
*
* This returns the total number of Blocks in lzma_index. To get number
* of Blocks in individual Streams, use lzma_index_iter.
*
* \param i Pointer to lzma_index structure
*
* \return Number of blocks in the lzma_index
*/
extern LZMA_API(lzma_vli) lzma_index_block_count(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -420,6 +488,10 @@ extern LZMA_API(lzma_vli) lzma_index_block_count(const lzma_index *i)
* \brief Get the size of the Index field as bytes
*
* This is needed to verify the Backward Size field in the Stream Footer.
*
* \param i Pointer to lzma_index structure
*
* \return Size in bytes of the Index
*/
extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -431,6 +503,11 @@ extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i)
* If multiple lzma_indexes have been combined, this works as if the Blocks
* were in a single Stream. This is useful if you are going to combine
* Blocks from multiple Streams into a single new Stream.
*
* \param i Pointer to lzma_index structure
*
* \return Size in bytes of the Stream (if all Blocks are combined
* into one Stream).
*/
extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -441,6 +518,10 @@ extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i)
*
* This doesn't include the Stream Header, Stream Footer, Stream Padding,
* or Index fields.
*
* \param i Pointer to lzma_index structure
*
* \return Size in bytes of all Blocks in the Stream(s)
*/
extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -453,6 +534,10 @@ extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i)
* no Stream Padding, this function is identical to lzma_index_stream_size().
* If multiple lzma_indexes have been combined, this includes also the headers
* of each separate Stream and the possible Stream Padding fields.
*
* \param i Pointer to lzma_index structure
*
* \return Total size of the .xz file in bytes
*/
extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -460,6 +545,10 @@ extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i)
/**
* \brief Get the uncompressed size of the file
*
* \param i Pointer to lzma_index structure
*
* \return Size in bytes of the uncompressed data in the file
*/
extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure;
@ -468,9 +557,6 @@ extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i)
/**
* \brief Initialize an iterator
*
* \param iter Pointer to a lzma_index_iter structure
* \param i lzma_index to which the iterator will be associated
*
* This function associates the iterator with the given lzma_index, and calls
* lzma_index_iter_rewind() on the iterator.
*
@ -483,6 +569,9 @@ extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i)
*
* It is safe to make copies of an initialized lzma_index_iter, for example,
* to easily restart reading at some particular position.
*
* \param iter Pointer to a lzma_index_iter structure
* \param i lzma_index to which the iterator will be associated
*/
extern LZMA_API(void) lzma_index_iter_init(
lzma_index_iter *iter, const lzma_index *i) lzma_nothrow;
@ -493,6 +582,8 @@ extern LZMA_API(void) lzma_index_iter_init(
*
* Rewind the iterator so that next call to lzma_index_iter_next() will
* return the first Block or Stream.
*
* \param iter Pointer to a lzma_index_iter structure
*/
extern LZMA_API(void) lzma_index_iter_rewind(lzma_index_iter *iter)
lzma_nothrow;
@ -505,11 +596,11 @@ extern LZMA_API(void) lzma_index_iter_rewind(lzma_index_iter *iter)
* \param mode Specify what kind of information the caller wants
* to get. See lzma_index_iter_mode for details.
*
* \return If next Block or Stream matching the mode was found, *iter
* is updated and this function returns false. If no Block or
* Stream matching the mode is found, *iter is not modified
* and this function returns true. If mode is set to an unknown
* value, *iter is not modified and this function returns true.
* \return lzma_bool:
* - true if no Block or Stream matching the mode is found.
* *iter is not updated (failure).
* - false if the next Block or Stream matching the mode was
* found. *iter is updated (success).
*/
extern LZMA_API(lzma_bool) lzma_index_iter_next(
lzma_index_iter *iter, lzma_index_iter_mode mode)
@ -523,21 +614,26 @@ extern LZMA_API(lzma_bool) lzma_index_iter_next(
* the Index field(s) and use lzma_index_iter_locate() to do random-access
* reading with granularity of Block size.
*
* \param iter Iterator that was earlier initialized with
* lzma_index_iter_init().
* \param target Uncompressed target offset which the caller would
* like to locate from the Stream
*
* If the target is smaller than the uncompressed size of the Stream (can be
* checked with lzma_index_uncompressed_size()):
* - Information about the Stream and Block containing the requested
* uncompressed offset is stored into *iter.
* - Internal state of the iterator is adjusted so that
* lzma_index_iter_next() can be used to read subsequent Blocks or Streams.
* - This function returns false.
*
* If target is greater than the uncompressed size of the Stream, *iter
* is not modified, and this function returns true.
* If the target is greater than the uncompressed size of the Stream, *iter
* is not modified.
*
* \param iter Iterator that was earlier initialized with
* lzma_index_iter_init().
* \param target Uncompressed target offset which the caller would
* like to locate from the Stream
*
* \return lzma_bool:
* - true if the target is greater than or equal to the
* uncompressed size of the Stream (failure)
* - false if the target is smaller than the uncompressed size
* of the Stream (success)
*/
extern LZMA_API(lzma_bool) lzma_index_iter_locate(
lzma_index_iter *iter, lzma_vli target) lzma_nothrow;
@ -550,15 +646,16 @@ extern LZMA_API(lzma_bool) lzma_index_iter_locate(
* multi-Stream .xz file, or when combining multiple Streams into single
* Stream.
*
* \param dest lzma_index after which src is appended
* \param[out] dest lzma_index after which src is appended
* \param src lzma_index to be appended after dest. If this
* 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 Custom memory allocator; can be NULL to use
* malloc() and free().
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return - LZMA_OK: lzma_indexes were concatenated successfully.
* \return Possible lzma_ret values:
* - LZMA_OK: lzma_indexes were concatenated successfully.
* src is now a dangling pointer.
* - LZMA_DATA_ERROR: *dest would grow too big.
* - LZMA_MEM_ERROR
@ -572,6 +669,10 @@ extern LZMA_API(lzma_ret) lzma_index_cat(lzma_index *dest, lzma_index *src,
/**
* \brief Duplicate lzma_index
*
* \param i Pointer to lzma_index structure to be duplicated
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return A copy of the lzma_index, or NULL if memory allocation failed.
*/
extern LZMA_API(lzma_index *) lzma_index_dup(
@ -588,7 +689,8 @@ extern LZMA_API(lzma_index *) lzma_index_dup(
* The valid `action' values for lzma_code() are LZMA_RUN and LZMA_FINISH.
* It is enough to use only one of them (you can choose freely).
*
* \return - LZMA_OK: Initialization succeeded, continue with lzma_code().
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization succeeded, continue with lzma_code().
* - LZMA_MEM_ERROR
* - LZMA_PROG_ERROR
*/
@ -601,7 +703,7 @@ extern LZMA_API(lzma_ret) lzma_index_encoder(
* \brief Initialize .xz Index decoder
*
* \param strm Pointer to properly prepared lzma_stream
* \param i The decoded Index will be made available via
* \param[out] i The decoded Index will be made available via
* this pointer. Initially this function will
* set *i to NULL (the old value is ignored). If
* decoding succeeds (lzma_code() returns
@ -617,11 +719,12 @@ extern LZMA_API(lzma_ret) lzma_index_encoder(
* There is no need to use LZMA_FINISH, but it's allowed because it may
* simplify certain types of applications.
*
* \return - LZMA_OK: Initialization succeeded, continue with lzma_code().
* \return Possible lzma_ret values:
* - LZMA_OK: Initialization succeeded, continue with lzma_code().
* - LZMA_MEM_ERROR
* - LZMA_PROG_ERROR
*
* liblzma 5.2.3 and older list also LZMA_MEMLIMIT_ERROR here
* \note liblzma 5.2.3 and older list also LZMA_MEMLIMIT_ERROR here
* but that error code has never been possible from this
* initialization function.
*/
@ -633,21 +736,23 @@ extern LZMA_API(lzma_ret) lzma_index_decoder(
/**
* \brief Single-call .xz Index encoder
*
* \note This function doesn't take allocator argument since all
* the internal data is allocated on stack.
*
* \param i lzma_index to be encoded
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_BUF_ERROR: Output buffer is too small. Use
* lzma_index_size() to find out how much output
* space is needed.
* - LZMA_PROG_ERROR
*
* \note This function doesn't take allocator argument since all
* the internal data is allocated on stack.
*/
extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i,
uint8_t *out, size_t *out_pos, size_t out_size) lzma_nothrow;
@ -656,24 +761,26 @@ extern LZMA_API(lzma_ret) lzma_index_buffer_encode(const lzma_index *i,
/**
* \brief Single-call .xz Index decoder
*
* \param i If decoding succeeds, *i will point to a new
* \param[out] i If decoding succeeds, *i will point to a new
* lzma_index, which the application has to
* later free with lzma_index_end(). If an error
* occurs, *i will be NULL. The old value of *i
* is always ignored and thus doesn't need to be
* initialized by the caller.
* \param memlimit Pointer to how much memory the resulting
* \param[out] memlimit Pointer to how much memory the resulting
* 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 Pointer to lzma_allocator, or NULL to use malloc()
* \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].
* *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size].
*
* \return - LZMA_OK: Decoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful.
* - LZMA_MEM_ERROR
* - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
* The minimum required memlimit value was stored to *memlimit.
@ -689,15 +796,6 @@ extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i,
/**
* \brief Initialize a .xz file information decoder
*
* \param strm Pointer to a properly prepared lzma_stream
* \param dest_index Pointer to a pointer where the decoder will put
* the decoded lzma_index. The old value
* of *dest_index is ignored (not freed).
* \param memlimit How much memory the resulting lzma_index is
* allowed to require. Use UINT64_MAX to
* effectively disable the limiter.
* \param file_size Size of the input .xz file
*
* This decoder decodes the Stream Header, Stream Footer, Index, and
* Stream Padding field(s) from the input .xz file and stores the resulting
* combined index in *dest_index. This information can be used to get the
@ -742,7 +840,17 @@ extern LZMA_API(lzma_ret) lzma_index_buffer_decode(lzma_index **i,
* - LZMA_MEMLIMIT_ERROR
* - LZMA_PROG_ERROR
*
* \return - LZMA_OK
* \param strm Pointer to a properly prepared lzma_stream
* \param[out] dest_index Pointer to a pointer where the decoder will put
* the decoded lzma_index. The old value
* of *dest_index is ignored (not freed).
* \param memlimit How much memory the resulting lzma_index is
* allowed to require. Use UINT64_MAX to
* effectively disable the limiter.
* \param file_size Size of the input .xz file
*
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR
* - LZMA_PROG_ERROR
*/

View File

@ -1,6 +1,7 @@
/**
* \file lzma/index_hash.h
* \brief Validate Index by using a hash function
* \note Never include this file directly. Use <lzma.h> instead.
*
* Hashing makes it possible to use constant amount of memory to validate
* Index of arbitrary size.
@ -11,8 +12,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -28,13 +27,21 @@ typedef struct lzma_index_hash_s lzma_index_hash;
/**
* \brief Allocate and initialize a new lzma_index_hash structure
*
* If index_hash is NULL, a new lzma_index_hash structure is allocated,
* initialized, and a pointer to it returned. If allocation fails, NULL
* is returned.
* If index_hash is NULL, this function allocates and initializes a new
* lzma_index_hash structure and returns a pointer to it. If allocation
* fails, NULL is returned.
*
* If index_hash is non-NULL, it is reinitialized and the same pointer
* returned. In this case, return value cannot be NULL or a different
* pointer than the index_hash that was given as an argument.
* If index_hash is non-NULL, this function reinitializes the lzma_index_hash
* structure and returns the same pointer. In this case, return value cannot
* be NULL or a different pointer than the index_hash that was given as
* an argument.
*
* \param index_hash Pointer to a lzma_index_hash structure or NULL.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*
* \return Initialized lzma_index_hash structure on success or
* NULL on failure.
*/
extern LZMA_API(lzma_index_hash *) lzma_index_hash_init(
lzma_index_hash *index_hash, const lzma_allocator *allocator)
@ -43,6 +50,10 @@ extern LZMA_API(lzma_index_hash *) lzma_index_hash_init(
/**
* \brief Deallocate lzma_index_hash structure
*
* \param index_hash Pointer to a lzma_index_hash structure to free.
* \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free().
*/
extern LZMA_API(void) lzma_index_hash_end(
lzma_index_hash *index_hash, const lzma_allocator *allocator)
@ -56,7 +67,8 @@ extern LZMA_API(void) lzma_index_hash_end(
* \param unpadded_size Unpadded Size of a Block
* \param uncompressed_size Uncompressed Size of a Block
*
* \return - LZMA_OK
* \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_DATA_ERROR: Compressed or uncompressed size of the
* Stream or size of the Index field would grow too big.
* - LZMA_PROG_ERROR: Invalid arguments or this function is being
@ -81,10 +93,11 @@ extern LZMA_API(lzma_ret) lzma_index_hash_append(lzma_index_hash *index_hash,
*
* \param index_hash Pointer to a lzma_index_hash structure
* \param in Pointer to the beginning of the input buffer
* \param in_pos in[*in_pos] is the next byte to process
* \param[out] in_pos in[*in_pos] is the next byte to process
* \param in_size in[in_size] is the first byte not to process
*
* \return - LZMA_OK: So far good, but more input is needed.
* \return Possible lzma_ret values:
* - LZMA_OK: So far good, but more input is needed.
* - LZMA_STREAM_END: Index decoded successfully and it matches
* the Records given with lzma_index_hash_append().
* - LZMA_DATA_ERROR: Index is corrupt or doesn't match the
@ -101,6 +114,10 @@ extern LZMA_API(lzma_ret) lzma_index_hash_decode(lzma_index_hash *index_hash,
* \brief Get the size of the Index field as bytes
*
* This is needed to verify the Backward Size field in the Stream Footer.
*
* \param index_hash Pointer to a lzma_index_hash structure
*
* \return Size of the Index field in bytes.
*/
extern LZMA_API(lzma_vli) lzma_index_hash_size(
const lzma_index_hash *index_hash)

View File

@ -1,6 +1,7 @@
/**
* \file lzma/lzma12.h
* \brief LZMA1 and LZMA2 filters
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -57,7 +56,7 @@
*
* Usually you want this instead of LZMA1. Compared to LZMA1, LZMA2 adds
* support for LZMA_SYNC_FLUSH, uncompressed chunks (smaller expansion
* when trying to compress uncompressible data), possibility to change
* when trying to compress incompressible data), possibility to change
* lc/lp/pb in the middle of encoding, and some other internal improvements.
*/
#define LZMA_FILTER_LZMA2 LZMA_VLI_C(0x21)
@ -137,16 +136,20 @@ typedef enum {
/**
* \brief Test if given match finder is supported
*
* Return true if the given match finder is supported by this liblzma build.
* Otherwise false is returned. It is safe to call this with a value that
* isn't listed in lzma_match_finder enumeration; the return value will be
* false.
* It is safe to call this with a value that isn't listed in
* lzma_match_finder enumeration; the return value will be false.
*
* There is no way to list which match finders are available in this
* particular liblzma version and build. It would be useless, because
* a new match finder, which the application developer wasn't aware,
* could require giving additional options to the encoder that the older
* match finders don't need.
*
* \param match_finder Match finder ID
*
* \return lzma_bool:
* - true if the match finder is supported by this liblzma build.
* - false otherwise.
*/
extern LZMA_API(lzma_bool) lzma_mf_is_supported(lzma_match_finder match_finder)
lzma_nothrow lzma_attr_const;
@ -181,14 +184,20 @@ typedef enum {
/**
* \brief Test if given compression mode is supported
*
* Return true if the given compression mode is supported by this liblzma
* build. Otherwise false is returned. It is safe to call this with a value
* that isn't listed in lzma_mode enumeration; the return value will be false.
* It is safe to call this with a value that isn't listed in lzma_mode
* enumeration; the return value will be false.
*
* There is no way to list which modes are available in this particular
* liblzma version and build. It would be useless, because a new compression
* mode, which the application developer wasn't aware, could require giving
* additional options to the encoder that the older modes don't need.
*
* \param mode Mode ID.
*
* \return lzma_bool:
* - true if the compression mode is supported by this liblzma
* build.
* - false otherwise.
*/
extern LZMA_API(lzma_bool) lzma_mode_is_supported(lzma_mode mode)
lzma_nothrow lzma_attr_const;
@ -408,7 +417,7 @@ typedef struct {
* like it is with LZMA_FILTER_LZMA1. Without this flag the
* end marker isn't written and the application has to store
* the uncompressed size somewhere outside the compressed stream.
* To decompress streams without the end marker, the appliation
* To decompress streams without the end marker, the application
* has to set the correct uncompressed size in ext_size_low and
* ext_size_high.
*
@ -480,16 +489,38 @@ typedef struct {
* with the currently supported options, so it is safe to leave these
* uninitialized.
*/
/** \private Reserved member. */
uint32_t reserved_int4;
/** \private Reserved member. */
uint32_t reserved_int5;
/** \private Reserved member. */
uint32_t reserved_int6;
/** \private Reserved member. */
uint32_t reserved_int7;
/** \private Reserved member. */
uint32_t reserved_int8;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum3;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum4;
/** \private Reserved member. */
void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2;
} lzma_options_lzma;
@ -517,13 +548,22 @@ do { \
* The flags are defined in container.h, because the flags are used also
* with lzma_easy_encoder().
*
* The preset values are subject to changes between liblzma versions.
* The preset levels are subject to changes between liblzma versions.
*
* This function is available only if LZMA1 or LZMA2 encoder has been enabled
* when building liblzma.
*
* \return On success, false is returned. If the preset is not
* supported, true is returned.
* If features (like certain match finders) have been disabled at build time,
* then the function may return success (false) even though the resulting
* LZMA1/LZMA2 options may not be usable for encoder initialization
* (LZMA_OPTIONS_ERROR).
*
* \param[out] options Pointer to LZMA1 or LZMA2 options to be filled
* \param preset Preset level bitwse-ORed with preset flags
*
* \return lzma_bool:
* - true if the preset is not supported (failure).
* - false otherwise (success).
*/
extern LZMA_API(lzma_bool) lzma_lzma_preset(
lzma_options_lzma *options, uint32_t preset) lzma_nothrow;

View File

@ -1,6 +1,7 @@
/**
* \file lzma/stream_flags.h
* \brief .xz Stream Header and Stream Footer encoder and decoder
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -36,7 +35,7 @@ typedef struct {
*
* To prevent API and ABI breakages if new features are needed in
* Stream Header or Stream Footer, a version number is used to
* indicate which fields in this structure are in use. For now,
* indicate which members in this structure are in use. For now,
* version must always be zero. With non-zero version, the
* lzma_stream_header_encode() and lzma_stream_footer_encode()
* will return LZMA_OPTIONS_ERROR.
@ -67,7 +66,15 @@ typedef struct {
* Footer have been decoded.
*/
lzma_vli backward_size;
/**
* \brief Minimum value for lzma_stream_flags.backward_size
*/
# define LZMA_BACKWARD_SIZE_MIN 4
/**
* \brief Maximum value for lzma_stream_flags.backward_size
*/
# define LZMA_BACKWARD_SIZE_MAX (LZMA_VLI_C(1) << 34)
/**
@ -87,19 +94,47 @@ typedef struct {
* is just two bytes plus Backward Size of four bytes. But it's
* nice to have the proper types when they are needed.)
*/
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum3;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum4;
/** \private Reserved member. */
lzma_bool reserved_bool1;
/** \private Reserved member. */
lzma_bool reserved_bool2;
/** \private Reserved member. */
lzma_bool reserved_bool3;
/** \private Reserved member. */
lzma_bool reserved_bool4;
/** \private Reserved member. */
lzma_bool reserved_bool5;
/** \private Reserved member. */
lzma_bool reserved_bool6;
/** \private Reserved member. */
lzma_bool reserved_bool7;
/** \private Reserved member. */
lzma_bool reserved_bool8;
/** \private Reserved member. */
uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2;
} lzma_stream_flags;
@ -111,10 +146,11 @@ typedef struct {
* \param options Stream Header options to be encoded.
* options->backward_size is ignored and doesn't
* need to be initialized.
* \param out Beginning of the output buffer of
* \param[out] out Beginning of the output buffer of
* LZMA_STREAM_HEADER_SIZE bytes.
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_OPTIONS_ERROR: options->version is not supported by
* this liblzma version.
* - LZMA_PROG_ERROR: Invalid options.
@ -128,10 +164,11 @@ extern LZMA_API(lzma_ret) lzma_stream_header_encode(
* \brief Encode Stream Footer
*
* \param options Stream Footer options to be encoded.
* \param out Beginning of the output buffer of
* \param[out] out Beginning of the output buffer of
* LZMA_STREAM_HEADER_SIZE bytes.
*
* \return - LZMA_OK: Encoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Encoding was successful.
* - LZMA_OPTIONS_ERROR: options->version is not supported by
* this liblzma version.
* - LZMA_PROG_ERROR: Invalid options.
@ -144,32 +181,33 @@ extern LZMA_API(lzma_ret) lzma_stream_footer_encode(
/**
* \brief Decode Stream Header
*
* \param options Target for the decoded Stream Header options.
* \param in Beginning of the input buffer of
* LZMA_STREAM_HEADER_SIZE bytes.
*
* options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to
* help comparing Stream Flags from Stream Header and Stream Footer with
* lzma_stream_flags_compare().
*
* \return - LZMA_OK: Decoding was successful.
* \note When decoding .xz files that contain multiple Streams, it may
* make sense to print "file format not recognized" only if
* decoding of the Stream Header of the \a first Stream gives
* LZMA_FORMAT_ERROR. If non-first Stream Header gives
* LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is
* probably more appropriate.
* For example, the Stream decoder in liblzma uses
* LZMA_DATA_ERROR if LZMA_FORMAT_ERROR is returned by
* lzma_stream_header_decode() when decoding non-first Stream.
*
* \param[out] options Target for the decoded Stream Header options.
* \param in Beginning of the input buffer of
* LZMA_STREAM_HEADER_SIZE bytes.
*
*
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful.
* - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given
* buffer cannot be Stream Header.
* - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header
* is corrupt.
* - LZMA_OPTIONS_ERROR: Unsupported options are present
* in the header.
*
* \note When decoding .xz files that contain multiple Streams, it may
* make sense to print "file format not recognized" only if
* decoding of the Stream Header of the _first_ Stream gives
* LZMA_FORMAT_ERROR. If non-first Stream Header gives
* LZMA_FORMAT_ERROR, the message used for LZMA_DATA_ERROR is
* probably more appropriate.
*
* For example, Stream decoder in liblzma uses LZMA_DATA_ERROR if
* LZMA_FORMAT_ERROR is returned by lzma_stream_header_decode()
* when decoding non-first Stream.
*/
extern LZMA_API(lzma_ret) lzma_stream_header_decode(
lzma_stream_flags *options, const uint8_t *in)
@ -179,24 +217,25 @@ extern LZMA_API(lzma_ret) lzma_stream_header_decode(
/**
* \brief Decode Stream Footer
*
* \param options Target for the decoded Stream Header options.
* \note If Stream Header was already decoded successfully, but
* decoding Stream Footer returns LZMA_FORMAT_ERROR, the
* application should probably report some other error message
* than "file format not recognized". The file likely
* is corrupt (possibly truncated). The Stream decoder in liblzma
* uses LZMA_DATA_ERROR in this situation.
*
* \param[out] options Target for the decoded Stream Footer options.
* \param in Beginning of the input buffer of
* LZMA_STREAM_HEADER_SIZE bytes.
*
* \return - LZMA_OK: Decoding was successful.
* \return Possible lzma_ret values:
* - LZMA_OK: Decoding was successful.
* - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given
* buffer cannot be Stream Footer.
* - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer
* is corrupt.
* - LZMA_OPTIONS_ERROR: Unsupported options are present
* in Stream Footer.
*
* \note If Stream Header was already decoded successfully, but
* decoding Stream Footer returns LZMA_FORMAT_ERROR, the
* application should probably report some other error message
* than "file format not recognized", since the file more likely
* is corrupt (possibly truncated). Stream decoder in liblzma
* uses LZMA_DATA_ERROR in this situation.
*/
extern LZMA_API(lzma_ret) lzma_stream_footer_decode(
lzma_stream_flags *options, const uint8_t *in)
@ -209,7 +248,11 @@ extern LZMA_API(lzma_ret) lzma_stream_footer_decode(
* backward_size values are compared only if both are not
* LZMA_VLI_UNKNOWN.
*
* \return - LZMA_OK: Both are equal. If either had backward_size set
* \param a Pointer to lzma_stream_flags structure
* \param b Pointer to lzma_stream_flags structure
*
* \return Possible lzma_ret values:
* - LZMA_OK: Both are equal. If either had backward_size set
* to LZMA_VLI_UNKNOWN, backward_size values were not
* compared or validated.
* - LZMA_DATA_ERROR: The structures differ.

View File

@ -1,6 +1,7 @@
/**
* \file lzma/version.h
* \brief Version number
* \note Never include this file directly. Use <lzma.h> instead.
*/
/*
@ -8,8 +9,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -17,14 +16,26 @@
#endif
/*
* Version number split into components
*/
/** \brief Major version number of the liblzma release. */
#define LZMA_VERSION_MAJOR 5
/** \brief Minor version number of the liblzma release. */
#define LZMA_VERSION_MINOR 4
#define LZMA_VERSION_PATCH 0
/** \brief Patch version number of the liblzma release. */
#define LZMA_VERSION_PATCH 6
/**
* \brief Version stability marker
*
* This will always be one of three values:
* - LZMA_VERSION_STABILITY_ALPHA
* - LZMA_VERSION_STABILITY_BETA
* - LZMA_VERSION_STABILITY_STABLE
*/
#define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_STABLE
/** \brief Commit version number of the liblzma release */
#ifndef LZMA_VERSION_COMMIT
# define LZMA_VERSION_COMMIT ""
#endif
@ -95,15 +106,16 @@
LZMA_VERSION_COMMIT)
/* #ifndef is needed for use with windres (MinGW or Cygwin). */
/* #ifndef is needed for use with windres (MinGW-w64 or Cygwin). */
#ifndef LZMA_H_INTERNAL_RC
/**
* \brief Run-time version number as an integer
*
* Return the value of LZMA_VERSION macro at the compile time of liblzma.
* This allows the application to compare if it was built against the same,
* This allows an application to compare if it was built against the same,
* older, or newer version of liblzma that is currently running.
*
* \return The value of LZMA_VERSION macro at the compile time of liblzma
*/
extern LZMA_API(uint32_t) lzma_version_number(void)
lzma_nothrow lzma_attr_const;
@ -112,8 +124,10 @@ extern LZMA_API(uint32_t) lzma_version_number(void)
/**
* \brief Run-time version as a string
*
* This function may be useful if you want to display which version of
* liblzma your application is currently using.
* This function may be useful to display which version of liblzma an
* application is currently using.
*
* \return Run-time version of liblzma
*/
extern LZMA_API(const char *) lzma_version_string(void)
lzma_nothrow lzma_attr_const;

View File

@ -1,6 +1,7 @@
/**
* \file lzma/vli.h
* \brief Variable-length integer handling
* \note Never include this file directly. Use <lzma.h> instead.
*
* In the .xz format, most integers are encoded in a variable-length
* representation, which is sometimes called little endian base-128 encoding.
@ -19,8 +20,6 @@
*
* This file has been put into the public domain.
* You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/
#ifndef LZMA_H_INTERNAL
@ -70,7 +69,8 @@ typedef uint64_t lzma_vli;
* 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.
* indicates unknown value. False if the integer cannot be
* represented as VLI.
*/
#define lzma_vli_is_valid(vli) \
((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN)
@ -86,12 +86,12 @@ typedef uint64_t lzma_vli;
* integer has been encoded.
*
* \param vli Integer to be encoded
* \param vli_pos How many VLI-encoded bytes have already been written
* \param[out] vli_pos How many VLI-encoded bytes have already been written
* out. When starting to encode a new integer in
* multi-call mode, *vli_pos must be set to zero.
* To use single-call encoding, set vli_pos to NULL.
* \param out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos].
* \param[out] out Beginning of the output buffer
* \param[out] out_pos The next byte will be written to out[*out_pos].
* \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size].
*
@ -121,15 +121,15 @@ extern LZMA_API(lzma_ret) lzma_vli_encode(lzma_vli vli, size_t *vli_pos,
*
* Like lzma_vli_encode(), this function has single-call and multi-call modes.
*
* \param vli Pointer to decoded integer. The decoder will
* \param[out] vli Pointer to decoded integer. The decoder will
* initialize it to zero when *vli_pos == 0, so
* application isn't required to initialize *vli.
* \param vli_pos How many bytes have already been decoded. When
* \param[out] vli_pos How many bytes have already been decoded. When
* starting to decode a new integer in multi-call
* mode, *vli_pos must be initialized to zero. To
* use single-call decoding, set vli_pos to NULL.
* \param in Beginning of the input buffer
* \param in_pos The next byte will be read from in[*in_pos].
* \param[out] in_pos The next byte will be read from in[*in_pos].
* \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size].
*

View File

@ -99,19 +99,22 @@ typedef struct {
/// lzma_crc32_table[0] is needed by LZ encoder so we need to keep
/// the array two-dimensional.
#ifdef HAVE_SMALL
lzma_attr_visibility_hidden
extern uint32_t lzma_crc32_table[1][256];
extern void lzma_crc32_init(void);
#else
lzma_attr_visibility_hidden
extern const uint32_t lzma_crc32_table[8][256];
lzma_attr_visibility_hidden
extern const uint64_t lzma_crc64_table[4][256];
#endif
/// \brief Initialize *check depending on type
///
/// \return LZMA_OK on success. LZMA_UNSUPPORTED_CHECK if the type is not
/// supported by the current version or build of liblzma.
/// LZMA_PROG_ERROR if type > LZMA_CHECK_ID_MAX.
extern void lzma_check_init(lzma_check_state *check, lzma_check type);
/// Update the check state

View File

@ -184,6 +184,20 @@ calc_hi(uint64_t poly, uint64_t a)
MASK_H(in, mask, high)
// MSVC (VS2015 - VS2022) produces bad 32-bit x86 code from the CLMUL CRC
// code when optimizations are enabled (release build). According to the bug
// report, the ebx register is corrupted and the calculated result is wrong.
// Trying to workaround the problem with "__asm mov ebx, ebx" didn't help.
// The following pragma works and performance is still good. x86-64 builds
// aren't affected by this problem.
//
// NOTE: Another pragma after the function restores the optimizations.
// If the #if condition here is updated, the other one must be updated too.
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__clang__) \
&& defined(_M_IX86)
# pragma optimize("g", off)
#endif
// EDG-based compilers (Intel's classic compiler and compiler for E2K) can
// define __GNUC__ but the attribute must not be used with them.
// The new Clang-based ICX needs the attribute.
@ -192,6 +206,14 @@ calc_hi(uint64_t poly, uint64_t a)
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
__attribute__((__target__("ssse3,sse4.1,pclmul")))
#endif
// The intrinsics use 16-byte-aligned reads from buf, thus they may read
// up to 15 bytes before or after the buffer (depending on the alignment
// of the buf argument). The values of the extra bytes are ignored.
// This unavoidably trips -fsanitize=address so address sanitizier has
// to be disabled for this function.
#if lzma_has_attribute(__no_sanitize_address__)
__attribute__((__no_sanitize_address__))
#endif
static uint64_t
crc64_clmul(const uint8_t *buf, size_t size, uint64_t crc)
{
@ -242,7 +264,7 @@ crc64_clmul(const uint8_t *buf, size_t size, uint64_t crc)
// C = buf + size == aligned_buf + size2
// D = buf + size + skip_end == aligned_buf + size2 + skip_end
const size_t skip_start = (size_t)((uintptr_t)buf & 15);
const size_t skip_end = (size_t)(-(uintptr_t)(buf + size) & 15);
const size_t skip_end = (size_t)((0U - (uintptr_t)(buf + size)) & 15);
const __m128i *aligned_buf = (const __m128i *)(
(uintptr_t)buf & ~(uintptr_t)15);
@ -371,6 +393,10 @@ crc64_clmul(const uint8_t *buf, size_t size, uint64_t crc)
# pragma GCC diagnostic pop
#endif
}
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__clang__) \
&& defined(_M_IX86)
# pragma optimize("", on)
#endif
#endif

View File

@ -18,10 +18,8 @@
#if (defined(__x86_64__) && defined(__SSSE3__) \
&& defined(__SSE4_1__) && defined(__PCLMUL__)) \
|| (defined(__e2k__) && __iset__ >= 6)
// No table needed but something has to be exported to keep some toolchains
// happy. Also use a declaration to silence compiler warnings.
extern const char lzma_crc64_dummy;
const char lzma_crc64_dummy;
// No table needed. Use a typedef to avoid an empty translation unit.
typedef void lzma_crc64_dummy;
#else
// Having the declaration here silences clang -Wmissing-variable-declarations.

View File

@ -8,7 +8,7 @@
/// conditionally to keep the code working on older boxes.
//
// This code is based on the code found from 7-Zip, which has a modified
// version of the SHA-256 found from Crypto++ <http://www.cryptopp.com/>.
// version of the SHA-256 found from Crypto++ <https://www.cryptopp.com/>.
// The code was modified a little to fit into liblzma.
//
// Authors: Kevin Springle

View File

@ -75,7 +75,6 @@ alone_encoder_end(void *coder_ptr, const lzma_allocator *allocator)
}
// At least for now, this is not used by any internal function.
static lzma_ret
alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
const lzma_options_lzma *options)
@ -141,16 +140,6 @@ alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
}
/*
extern lzma_ret
lzma_alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
const lzma_options_alone *options)
{
lzma_next_coder_init(&alone_encoder_init, next, allocator, options);
}
*/
extern LZMA_API(lzma_ret)
lzma_alone_encoder(lzma_stream *strm, const lzma_options_lzma *options)
{

View File

@ -277,7 +277,7 @@ block_buffer_encode(lzma_block *block, const lzma_allocator *allocator,
if (ret != LZMA_BUF_ERROR)
return ret;
// The data was uncompressible (at least with the options
// The data was incompressible (at least with the options
// given to us) or the output buffer was too small. Use the
// uncompressed chunks of LZMA2 to wrap the data into a valid
// Block. If we haven't been given enough output space, even

View File

@ -123,7 +123,10 @@ block_decode(void *coder_ptr, const lzma_allocator *allocator,
return LZMA_DATA_ERROR;
}
if (!coder->ignore_check)
// Don't waste time updating the integrity check if it will be
// ignored. Also skip it if no new output was produced. This
// avoids null pointer + 0 (undefined behavior) when out == 0.
if (!coder->ignore_check && out_used > 0)
lzma_check_update(&coder->check, coder->block->check,
out + out_start, out_used);

View File

@ -77,8 +77,11 @@ block_encode(void *coder_ptr, const lzma_allocator *allocator,
// checked it at the beginning of this function.
coder->uncompressed_size += in_used;
lzma_check_update(&coder->check, coder->block->check,
in + in_start, in_used);
// Call lzma_check_update() only if input was consumed. This
// avoids null pointer + 0 (undefined behavior) when in == 0.
if (in_used > 0)
lzma_check_update(&coder->check, coder->block->check,
in + in_start, in_used);
if (ret != LZMA_STREAM_END || action == LZMA_SYNC_FLUSH)
return ret;

View File

@ -35,7 +35,8 @@ lzma_version_string(void)
// Memory allocation //
///////////////////////
extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1)
lzma_attr_alloc_size(1)
extern void *
lzma_alloc(size_t size, const lzma_allocator *allocator)
{
// Some malloc() variants return NULL if called with size == 0.
@ -53,7 +54,8 @@ lzma_alloc(size_t size, const lzma_allocator *allocator)
}
extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1)
lzma_attr_alloc_size(1)
extern void *
lzma_alloc_zero(size_t size, const lzma_allocator *allocator)
{
// Some calloc() variants return NULL if called with size == 0.
@ -288,13 +290,21 @@ lzma_code(lzma_stream *strm, lzma_action action)
strm->next_in, &in_pos, strm->avail_in,
strm->next_out, &out_pos, strm->avail_out, action);
strm->next_in += in_pos;
strm->avail_in -= in_pos;
strm->total_in += in_pos;
// Updating next_in and next_out has to be skipped when they are NULL
// to avoid null pointer + 0 (undefined behavior). Do this by checking
// in_pos > 0 and out_pos > 0 because this way NULL + non-zero (a bug)
// will get caught one way or other.
if (in_pos > 0) {
strm->next_in += in_pos;
strm->avail_in -= in_pos;
strm->total_in += in_pos;
}
strm->next_out += out_pos;
strm->avail_out -= out_pos;
strm->total_out += out_pos;
if (out_pos > 0) {
strm->next_out += out_pos;
strm->avail_out -= out_pos;
strm->total_out += out_pos;
}
strm->internal->avail_in = strm->avail_in;

View File

@ -17,17 +17,28 @@
#include "mythread.h"
#include "tuklib_integer.h"
// LZMA_API_EXPORT is used to mark the exported API functions.
// It's used to define the LZMA_API macro.
//
// lzma_attr_visibility_hidden is used for marking *declarations* of extern
// variables that are internal to liblzma (-fvisibility=hidden alone is
// enough to hide the *definitions*). Such markings allow slightly more
// efficient code to accesses those variables in ELF shared libraries.
#if defined(_WIN32) || defined(__CYGWIN__)
# ifdef DLL_EXPORT
# define LZMA_API_EXPORT __declspec(dllexport)
# else
# define LZMA_API_EXPORT
# endif
# define lzma_attr_visibility_hidden
// Don't use ifdef or defined() below.
#elif HAVE_VISIBILITY
# define LZMA_API_EXPORT __attribute__((__visibility__("default")))
# define lzma_attr_visibility_hidden \
__attribute__((__visibility__("hidden")))
#else
# define LZMA_API_EXPORT
# define lzma_attr_visibility_hidden
#endif
#define LZMA_API(type) LZMA_API_EXPORT type LZMA_API_CALL
@ -47,7 +58,7 @@
// to 2 then symbol versioning is done only if also PIC is defined.
// By default Libtool defines PIC when building a shared library and
// doesn't define it when building a static library but it can be
// overriden with --with-pic and --without-pic. configure let's rely
// overridden with --with-pic and --without-pic. configure let's rely
// on PIC if neither --with-pic or --without-pic was used.
#if defined(HAVE_SYMBOL_VERSIONS_LINUX) \
&& (HAVE_SYMBOL_VERSIONS_LINUX == 2 && !defined(PIC))
@ -87,6 +98,23 @@
# endif
#endif
// MSVC has __forceinline which shouldn't be combined with the inline keyword
// (results in a warning).
//
// GCC 3.1 added always_inline attribute so we don't need to check
// for __GNUC__ version. Similarly, all relevant Clang versions
// support it (at least Clang 3.0.0 does already).
// Other compilers might support too which also support __has_attribute
// (Solaris Studio) so do that check too.
#if defined(_MSC_VER)
# define lzma_always_inline __forceinline
#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) \
|| lzma_has_attribute(__always_inline__)
# define lzma_always_inline inline __attribute__((__always_inline__))
#else
# define lzma_always_inline inline
#endif
// These allow helping the compiler in some often-executed branches, whose
// result is almost always the same.
#ifdef __GNUC__
@ -297,14 +325,14 @@ struct lzma_internal_s {
/// Allocates memory
extern void *lzma_alloc(size_t size, const lzma_allocator *allocator)
lzma_attribute((__malloc__)) lzma_attr_alloc_size(1);
lzma_attr_alloc_size(1)
extern void *lzma_alloc(size_t size, const lzma_allocator *allocator);
/// Allocates memory and zeroes it (like calloc()). This can be faster
/// than lzma_alloc() + memzero() while being backward compatible with
/// custom allocators.
extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1)
lzma_alloc_zero(size_t size, const lzma_allocator *allocator);
lzma_attr_alloc_size(1)
extern void *lzma_alloc_zero(size_t size, const lzma_allocator *allocator);
/// Frees memory
extern void lzma_free(void *ptr, const lzma_allocator *allocator);

View File

@ -350,7 +350,7 @@ file_info_decode(void *coder_ptr, const lzma_allocator *allocator,
// coder->temp[coder->temp_size - LZMA_STREAM_HEADER_SIZE].
//
// Otherwise we will need to seek. The seeking is done so
// that Stream Footer wil be at the end of coder->temp.
// that Stream Footer will be at the end of coder->temp.
// This way it's likely that we also get a complete Index
// field into coder->temp without needing a separate seek
// for that (unless the Index field is big).

View File

@ -37,9 +37,12 @@ typedef struct {
uint64_t (*block_size)(const void *options);
/// Tells the size of the Filter Properties field. If options are
/// invalid, UINT32_MAX is returned. If this is NULL, props_size_fixed
/// is used.
/// invalid, LZMA_OPTIONS_ERROR is returned and size is set to
/// UINT32_MAX.
lzma_ret (*props_size_get)(uint32_t *size, const void *options);
/// Some filters will always have the same size Filter Properties
/// field. If props_size_get is NULL, this value is used.
uint32_t props_size_fixed;
/// Encodes Filter Properties.
@ -216,17 +219,17 @@ lzma_filters_update(lzma_stream *strm, const lzma_filter *filters)
extern lzma_ret
lzma_raw_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
const lzma_filter *options)
const lzma_filter *filters)
{
return lzma_raw_coder_init(next, allocator,
options, (lzma_filter_find)(&encoder_find), true);
filters, (lzma_filter_find)(&encoder_find), true);
}
extern LZMA_API(lzma_ret)
lzma_raw_encoder(lzma_stream *strm, const lzma_filter *options)
lzma_raw_encoder(lzma_stream *strm, const lzma_filter *filters)
{
lzma_next_strm_init(lzma_raw_coder_init, strm, options,
lzma_next_strm_init(lzma_raw_coder_init, strm, filters,
(lzma_filter_find)(&encoder_find), true);
strm->internal->supported_actions[LZMA_RUN] = true;

View File

@ -10,6 +10,7 @@
//
///////////////////////////////////////////////////////////////////////////////
#include "common.h"
#include "index.h"
#include "stream_flags_common.h"
@ -660,6 +661,12 @@ lzma_index_append(lzma_index *i, const lzma_allocator *allocator,
if (uncompressed_base + uncompressed_size > LZMA_VLI_MAX)
return LZMA_DATA_ERROR;
// Check that the new unpadded sum will not overflow. This is
// checked again in index_file_size(), but the unpadded sum is
// passed to vli_ceil4() which expects a valid lzma_vli value.
if (compressed_base + unpadded_size > UNPADDED_SIZE_MAX)
return LZMA_DATA_ERROR;
// Check that the file size will stay within limits.
if (index_file_size(s->node.compressed_base,
compressed_base + unpadded_size, s->record_count + 1,

View File

@ -2,6 +2,13 @@
//
/// \file index.h
/// \brief Handling of Index
/// \note This header file does not include common.h or lzma.h because
/// this file is needed by both liblzma internally and by the
/// tests. Including common.h will include and define many things
/// the tests do not need and prevents issues with header file
/// include order. This way, if lzma.h or common.h are not
/// included before this file it will break on every OS instead
/// of causing more subtle errors.
//
// Author: Lasse Collin
//
@ -13,8 +20,6 @@
#ifndef LZMA_INDEX_H
#define LZMA_INDEX_H
#include "common.h"
/// Minimum Unpadded Size
#define UNPADDED_SIZE_MIN LZMA_VLI_C(5)
@ -22,6 +27,9 @@
/// Maximum Unpadded Size
#define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3))
/// Index Indicator based on xz specification
#define INDEX_INDICATOR 0
/// Get the size of the Index Padding field. This is needed by Index encoder
/// and decoder, but applications should have no use for this.
@ -38,7 +46,7 @@ extern void lzma_index_prealloc(lzma_index *i, lzma_vli records);
static inline lzma_vli
vli_ceil4(lzma_vli vli)
{
assert(vli <= LZMA_VLI_MAX);
assert(vli <= UNPADDED_SIZE_MAX);
return (vli + 3) & ~LZMA_VLI_C(3);
}

View File

@ -80,7 +80,7 @@ index_decode(void *coder_ptr, const lzma_allocator *allocator,
// format". One could argue that the application should
// verify the Index Indicator before trying to decode the
// Index, but well, I suppose it is simpler this way.
if (in[(*in_pos)++] != 0x00)
if (in[(*in_pos)++] != INDEX_INDICATOR)
return LZMA_DATA_ERROR;
coder->sequence = SEQ_COUNT;
@ -203,9 +203,16 @@ index_decode(void *coder_ptr, const lzma_allocator *allocator,
}
out:
// Update the CRC32,
coder->crc32 = lzma_crc32(in + in_start,
*in_pos - in_start, coder->crc32);
// Update the CRC32.
//
// Avoid null pointer + 0 (undefined behavior) in "in + in_start".
// In such a case we had no input and thus in_used == 0.
{
const size_t in_used = *in_pos - in_start;
if (in_used > 0)
coder->crc32 = lzma_crc32(in + in_start,
in_used, coder->crc32);
}
return ret;
}

View File

@ -13,6 +13,7 @@
#ifndef LZMA_INDEX_DECODER_H
#define LZMA_INDEX_DECODER_H
#include "common.h"
#include "index.h"

View File

@ -65,7 +65,7 @@ index_encode(void *coder_ptr,
while (*out_pos < out_size)
switch (coder->sequence) {
case SEQ_INDICATOR:
out[*out_pos] = 0x00;
out[*out_pos] = INDEX_INDICATOR;
++*out_pos;
coder->sequence = SEQ_COUNT;
break;
@ -153,8 +153,15 @@ index_encode(void *coder_ptr,
out:
// Update the CRC32.
coder->crc32 = lzma_crc32(out + out_start,
*out_pos - out_start, coder->crc32);
//
// Avoid null pointer + 0 (undefined behavior) in "out + out_start".
// In such a case we had no input and thus out_used == 0.
{
const size_t out_used = *out_pos - out_start;
if (out_used > 0)
coder->crc32 = lzma_crc32(out + out_start,
out_used, coder->crc32);
}
return ret;
}

View File

@ -145,7 +145,7 @@ lzma_index_hash_append(lzma_index_hash *index_hash, lzma_vli unpadded_size,
lzma_vli uncompressed_size)
{
// Validate the arguments.
if (index_hash->sequence != SEQ_BLOCK
if (index_hash == NULL || index_hash->sequence != SEQ_BLOCK
|| unpadded_size < UNPADDED_SIZE_MIN
|| unpadded_size > UNPADDED_SIZE_MAX
|| uncompressed_size > LZMA_VLI_MAX)
@ -190,7 +190,7 @@ lzma_index_hash_decode(lzma_index_hash *index_hash, const uint8_t *in,
switch (index_hash->sequence) {
case SEQ_BLOCK:
// Check the Index Indicator is present.
if (in[(*in_pos)++] != 0x00)
if (in[(*in_pos)++] != INDEX_INDICATOR)
return LZMA_DATA_ERROR;
index_hash->sequence = SEQ_COUNT;
@ -328,9 +328,16 @@ lzma_index_hash_decode(lzma_index_hash *index_hash, const uint8_t *in,
}
out:
// Update the CRC32,
index_hash->crc32 = lzma_crc32(in + in_start,
*in_pos - in_start, index_hash->crc32);
// Update the CRC32.
//
// Avoid null pointer + 0 (undefined behavior) in "in + in_start".
// In such a case we had no input and thus in_used == 0.
{
const size_t in_used = *in_pos - in_start;
if (in_used > 0)
index_hash->crc32 = lzma_crc32(in + in_start,
in_used, index_hash->crc32);
}
return ret;
}

View File

@ -186,7 +186,7 @@ lzip_decode(void *coder_ptr, const lzma_allocator *allocator,
// The five lowest bits are for the base-2 logarithm of
// the dictionary size and the highest three bits are
// the fractional part (0/16 to 7/16) that will be
// substracted to get the final value.
// subtracted to get the final value.
//
// For example, with 0xB5:
// b2log = 21
@ -262,7 +262,11 @@ lzip_decode(void *coder_ptr, const lzma_allocator *allocator,
coder->member_size += *in_pos - in_start;
coder->uncompressed_size += out_used;
if (!coder->ignore_check)
// Don't update the CRC32 if the integrity check will be
// ignored or if there was no new output. The latter is
// important in case out == NULL to avoid null pointer + 0
// which is undefined behavior.
if (!coder->ignore_check && out_used > 0)
coder->crc32 = lzma_crc32(out + out_start, out_used,
coder->crc32);

View File

@ -19,6 +19,16 @@
# include <immintrin.h>
#endif
// Only include <intrin.h> if it is needed. The header is only needed
// on Windows when using an MSVC compatible compiler. The Intel compiler
// can use the intrinsics without the header file.
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \
&& defined(_MSC_VER) \
&& defined(_M_X64) \
&& !defined(__INTEL_COMPILER)
# include <intrin.h>
#endif
/// Find out how many equal bytes the two buffers have.
///
@ -39,7 +49,7 @@
/// It's rounded up to 2^n. This extra amount needs to be
/// allocated in the buffers being used. It needs to be
/// initialized too to keep Valgrind quiet.
static inline uint32_t lzma_attribute((__always_inline__))
static lzma_always_inline uint32_t
lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
uint32_t len, uint32_t limit)
{
@ -59,11 +69,13 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
while (len < limit) {
const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len);
if (x != 0) {
# if defined(_M_X64) // MSVC or Intel C compiler on Windows
// MSVC or Intel C compiler on Windows
# if (defined(_MSC_VER) || defined(__INTEL_COMPILER)) && defined(_M_X64)
unsigned long tmp;
_BitScanForward64(&tmp, x);
len += (uint32_t)tmp >> 3;
# else // GCC, clang, or Intel C compiler
// GCC, Clang, or Intel C compiler
# else
len += (uint32_t)__builtin_ctzll(x) >> 3;
# endif
return my_min(len, limit);
@ -89,7 +101,8 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
// version isn't used on x86-64.
# define LZMA_MEMCMPLEN_EXTRA 16
while (len < limit) {
const uint32_t x = 0xFFFF ^ _mm_movemask_epi8(_mm_cmpeq_epi8(
const uint32_t x = 0xFFFF ^ (uint32_t)_mm_movemask_epi8(
_mm_cmpeq_epi8(
_mm_loadu_si128((const __m128i *)(buf1 + len)),
_mm_loadu_si128((const __m128i *)(buf2 + len))));

View File

@ -111,7 +111,8 @@ microlzma_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
// Encode the properties byte. Bitwise-negation of it will be the
// first output byte.
return_if_error(lzma_lzma_lclppb_encode(options, &coder->props));
if (lzma_lzma_lclppb_encode(options, &coder->props))
return LZMA_OPTIONS_ERROR;
// Initialize the LZMA encoder.
const lzma_filter_info filters[2] = {

View File

@ -10,6 +10,7 @@
//
///////////////////////////////////////////////////////////////////////////////
#include "common.h"
#include "index.h"

View File

@ -12,6 +12,7 @@
#include "stream_decoder.h"
#include "block_decoder.h"
#include "index.h"
typedef struct {
@ -164,7 +165,7 @@ stream_decode(void *coder_ptr, const lzma_allocator *allocator,
if (coder->pos == 0) {
// Detect if it's Index.
if (in[*in_pos] == 0x00) {
if (in[*in_pos] == INDEX_INDICATOR) {
coder->sequence = SEQ_INDEX;
break;
}

View File

@ -629,7 +629,7 @@ get_thread(struct lzma_stream_coder *coder, const lzma_allocator *allocator)
coder->thr = coder->threads_free;
coder->threads_free = coder->threads_free->next;
// The thread is no longer in the cache so substract
// The thread is no longer in the cache so subtract
// it from the cached memory usage. Don't add it
// to mem_in_use though; the caller will handle it
// since it knows how much memory it will actually
@ -887,7 +887,7 @@ decode_block_header(struct lzma_stream_coder *coder,
if (coder->pos == 0) {
// Detect if it's Index.
if (in[*in_pos] == 0x00)
if (in[*in_pos] == INDEX_INDICATOR)
return LZMA_INDEX_DETECTED;
// Calculate the size of the Block Header. Note that
@ -1358,9 +1358,11 @@ stream_decode_mt(void *coder_ptr, const lzma_allocator *allocator,
// values after we read these as those changes can only be
// towards more favorable conditions (less memory in use,
// more in cache).
uint64_t mem_in_use;
uint64_t mem_cached;
struct worker_thread *thr = NULL; // Init to silence warning.
//
// These are initialized to silence warnings.
uint64_t mem_in_use = 0;
uint64_t mem_cached = 0;
struct worker_thread *thr = NULL;
mythread_sync(coder->mutex) {
mem_in_use = coder->mem_in_use;
@ -1423,7 +1425,7 @@ stream_decode_mt(void *coder_ptr, const lzma_allocator *allocator,
}
// Update the memory usage counters. Note that coder->mem_*
// may have changed since we read them so we must substract
// may have changed since we read them so we must subtract
// or add the changes.
mythread_sync(coder->mutex) {
coder->mem_cached -= mem_freed;
@ -1436,7 +1438,7 @@ stream_decode_mt(void *coder_ptr, const lzma_allocator *allocator,
// coder->mem_cached might count the same thing twice.
// If so, this will get corrected in get_thread() when
// a worker_thread is picked from coder->free_threads
// and its memory usage is substracted from mem_cached.
// and its memory usage is subtracted from mem_cached.
coder->mem_in_use += coder->mem_next_in
+ coder->mem_next_filters;
}

View File

@ -645,7 +645,7 @@ stream_encode_in(lzma_stream_coder *coder, const lzma_allocator *allocator,
}
if (block_error) {
lzma_ret ret;
lzma_ret ret = LZMA_OK; // Init to silence a warning.
mythread_sync(coder->mutex) {
ret = coder->thread_error;
@ -743,7 +743,7 @@ stream_encode_mt(void *coder_ptr, const lzma_allocator *allocator,
// These are for wait_for_work().
bool has_blocked = false;
mythread_condtime wait_abs;
mythread_condtime wait_abs = { 0 };
while (true) {
mythread_sync(coder->mutex) {

View File

@ -18,7 +18,10 @@
/// Size of the Stream Flags field
#define LZMA_STREAM_FLAGS_SIZE 2
lzma_attr_visibility_hidden
extern const uint8_t lzma_header_magic[6];
lzma_attr_visibility_hidden
extern const uint8_t lzma_footer_magic[2];

View File

@ -197,7 +197,7 @@ typedef struct {
/// (default is uint32_t).
///
/// Stringifying a filter is done by processing a given number of options
/// in oder from the beginning of an option_map array. The integer is
/// in order from the beginning of an option_map array. The integer is
/// read from filter_options at .offset using the type from .type.
///
/// If the integer is zero and .flags has OPTMAP_NO_STRFY_ZERO then the
@ -316,7 +316,7 @@ parse_lzma12_preset(const char **const str, const char *str_end,
assert(*str < str_end);
*preset = (uint32_t)(**str - '0');
// NOTE: Remember to update LZMA_PRESET_STR if this is modified!
// NOTE: Remember to update LZMA12_PRESET_STR if this is modified!
while (++*str < str_end) {
switch (**str) {
case 'e':
@ -466,9 +466,9 @@ static const struct {
/// If the flag LZMA_STR_ENCODER is used then the first
/// strfy_encoder elements of optmap are stringified.
/// With LZMA_STR_DECODER strfy_decoder is used.
/// Currently encoders use all flags that decoders do but if
/// Currently encoders use all options that decoders do but if
/// that changes then this needs to be changed too, for example,
/// add a new OPTMAP flag to skip printing some decoder-only flags.
/// add a new OPTMAP flag to skip printing some decoder-only options.
const option_map *optmap;
uint8_t strfy_encoder;
uint8_t strfy_decoder;
@ -538,7 +538,7 @@ static const struct {
///
/// The input string starts at *str and the address in str_end is the first
/// char that is not part of the string anymore. So no '\0' terminator is
/// used. *str is advanced everytime something has been decoded successfully.
/// used. *str is advanced every time something has been decoded successfully.
static const char *
parse_options(const char **const str, const char *str_end,
void *filter_options,
@ -667,7 +667,7 @@ parse_options(const char **const str, const char *str_end,
&& *p >= '0' && *p <= '9');
if (p < name_eq_value_end) {
// Remember this position so that it an be
// Remember this position so that it can be
// used for error messages that are
// specifically about the suffix. (Out of
// range values are about the whole value
@ -844,7 +844,7 @@ parse_filter(const char **const str, const char *str_end, lzma_filter *filter,
/// Converts the string to a filter chain (array of lzma_filter structures).
///
/// *str is advanced everytime something has been decoded successfully.
/// *str is advanced every time something has been decoded successfully.
/// This way the caller knows where in the string a possible error occurred.
static const char *
str_to_filters(const char **const str, lzma_filter *filters, uint32_t flags,
@ -1131,6 +1131,13 @@ lzma_str_from_filters(char **output_str, const lzma_filter *filters,
const char *opt_delim = (flags & LZMA_STR_GETOPT_LONG) ? "=" : ":";
for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) {
// If we reach LZMA_FILTERS_MAX, then the filters array
// is too large since the ID cannot be LZMA_VLI_UNKNOWN here.
if (i == LZMA_FILTERS_MAX) {
str_free(&dest, allocator);
return LZMA_OPTIONS_ERROR;
}
// Don't add a space between filters if the caller
// doesn't want them.
if (i > 0 && !(flags & LZMA_STR_NO_SPACES))

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