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 .deps
.libs .libs
*.a
*.gcda *.gcda
*.gcno *.gcno
*.la *.la
@ -36,6 +37,9 @@ build-aux/test-driver
coverage coverage
/doc/internal
/doc/api
/src/liblzma/liblzma.pc /src/liblzma/liblzma.pc
/src/lzmainfo/lzmainfo /src/lzmainfo/lzmainfo
/src/xz/xz /src/xz/xz
@ -57,8 +61,11 @@ coverage
/tests/test_block_header /tests/test_block_header
/tests/test_check /tests/test_check
/tests/test_filter_flags /tests/test_filter_flags
/tests/test_filter_str
/tests/test_hardware /tests/test_hardware
/tests/test_index /tests/test_index
/tests/test_index_hash
/tests/test_lzip_decoder
/tests/test_memlimit /tests/test_memlimit
/tests/test_stream_flags /tests/test_stream_flags
/tests/test_vli /tests/test_vli
@ -77,3 +84,29 @@ coverage
/src/liblzma/api/Makefile /src/liblzma/api/Makefile
/src/lzmainfo/Makefile /src/lzmainfo/Makefile
/src/xzdec/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 XZ Utils specific documentation files in other directories
are in the public domain. 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. - Translated messages are in the public domain.
- The build system contains public domain files, and files that - 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 naturally it is not legally required. Here is an example of a good
notice to put into "about box" or into documentation: 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: The following license texts are included in the following files:
- COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1 - COPYING.LGPLv2.1: GNU Lesser General Public License version 2.1

View File

@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007 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 Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. 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. GNU General Public License for more details.
You should have received a copy of the GNU General Public License 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. 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, 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. 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 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 The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with 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 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 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: 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. 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 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. xzgrep and other scripts
3.1. Dependencies 3.1. Dependencies
3.2. PATH 3.2. PATH
4. Troubleshooting 4. Tests
4.1. "No C99 compiler was found." 4.1 Testing in parallel
4.2. "No POSIX conforming shell (sh) was found." 4.2 Cross compiling
4.3. configure works but build fails at crc32_x86.S 5. Troubleshooting
4.4. Lots of warnings about symbol visibility 5.1. "No C99 compiler was found."
4.5. "make check" fails 5.2. "No POSIX conforming shell (sh) was found."
4.6. liblzma.so (or similar) not found when running xz 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 0. Preface
@ -100,7 +103,7 @@ XZ Utils Installation
XZ Utils doesn't have code to detect the amount of physical RAM and XZ Utils doesn't have code to detect the amount of physical RAM and
number of CPU cores on MINIX 3. 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). 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 missing from PATH (/usr/xpg4/bin or /usr/xpg6/bin). Nowadays
/usr/xpg4/bin is added to the script PATH by default on Solaris /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 (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. information.
1.2.6. Tru64 1.2.6. Tru64
If you try to use the native C compiler on Tru64 (passing CC=cc to 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). 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 win95 Use Windows 95 compatible threads. This
is compatible with Windows XP and later is compatible with Windows XP and later
too. This is the default for 32-bit x86 too. This is the default for 32-bit x86
Windows builds. The `win95' threading is Windows builds. Unless the compiler
incompatible with --enable-small. supports __attribute__((__constructor__)),
the `win95' threading is incompatible with
--enable-small.
vista Use Windows Vista compatible threads. The vista Use Windows Vista compatible threads. The
resulting binaries won't run on Windows XP 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 a fallback xzdiff will use mkdir to securely create a temporary
directory. Having mktemp available is still recommended since the directory. Having mktemp available is still recommended since the
mkdir fallback method isn't as robust as mktemp is. The original 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 use the mktemp program from GNU coreutils instead of the original
implementation. Both mktemp versions are fine. implementation. Both mktemp versions are fine.
@ -624,10 +629,54 @@ XZ Utils Installation
src/scripts/xz*.in 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 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 cannot find a C99 compiler and you think you have such a compiler
@ -642,7 +691,7 @@ XZ Utils Installation
support enough C99. 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 xzgrep and other scripts need a shell that (roughly) conforms
to POSIX. The configure script tries to find such a shell. If 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. 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. The easy fix is to pass --disable-assembler to the configure script.
@ -669,7 +718,7 @@ XZ Utils Installation
(see INSTALL.generic). (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 On some systems where symbol visibility isn't supported, GCC may
still accept the visibility options and attributes, which will make still accept the visibility options and attributes, which will make
@ -681,7 +730,7 @@ XZ Utils Installation
using --enable-werror. 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 If the other tests pass but test_scripts.sh fails, then the problem
is in the scripts in src/scripts. Comparing the contents of is in the scripts in src/scripts. Comparing the contents of
@ -707,7 +756,7 @@ XZ Utils Installation
information. 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 If you installed the package with "make install" and get an error
about liblzma.so (or a similarly named file) being missing, try about liblzma.so (or a similarly named file) being missing, try

View File

@ -44,18 +44,30 @@ examplesolddir = $(docdir)/examples_old
dist_examplesold_DATA = \ dist_examplesold_DATA = \
doc/examples_old/xz_pipe_comp.c \ doc/examples_old/xz_pipe_comp.c \
doc/examples_old/xz_pipe_decomp.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 endif
EXTRA_DIST = \ EXTRA_DIST = \
po4a \ po4a \
extra \ extra \
dos \ dos \
doxygen \
windows \ windows \
macosx \ macosx \
cmake \ cmake \
CMakeLists.txt \ CMakeLists.txt \
autogen.sh \ autogen.sh \
Doxyfile.in \
COPYING.GPLv2 \ COPYING.GPLv2 \
COPYING.GPLv3 \ COPYING.GPLv3 \
COPYING.LGPLv2.1 \ COPYING.LGPLv2.1 \
@ -100,6 +112,11 @@ dist-hook:
> "$$dest/txt/$$BASE.txt"; \ > "$$dest/txt/$$BASE.txt"; \
done; \ done; \
fi 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 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 # This also ensures that the man page translations are up to date (dist-hook
@ -107,6 +124,7 @@ dist-hook:
mydist: mydist:
sh "$(srcdir)/src/liblzma/validate_map.sh" sh "$(srcdir)/src/liblzma/validate_map.sh"
cd "$(srcdir)/po4a" && sh update-po cd "$(srcdir)/po4a" && sh update-po
cd "$(srcdir)/doxygen" && sh update-doxygen
VERSION=$(VERSION); \ VERSION=$(VERSION); \
if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \ if test -d "$(srcdir)/.git" && type git > /dev/null 2>&1; then \
SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \ SNAPSHOT=`cd "$(srcdir)" && git describe --abbrev=4 | cut -b2-`; \

269
NEWS
View File

@ -2,6 +2,273 @@
XZ Utils Release Notes 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) 5.4.0 (2022-12-13)
This bumps the minor version of liblzma because new features were 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. of the deprecated egrep and fgrep commands.
- Fixed parsing of the options -E, -F, -G, -P, and -X. The - 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, a single argument, for example,
echo foo | xzgrep -Fe foo echo foo | xzgrep -Fe foo

View File

@ -44,6 +44,8 @@ Information to packagers of XZ Utils
lzmadec binary for compatibility with LZMA Utils lzmadec binary for compatibility with LZMA Utils
liblzma liblzma.so.* liblzma liblzma.so.*
liblzma-devel liblzma.so, liblzma.a, API headers liblzma-devel liblzma.so, liblzma.a, API headers
liblzma-doc Doxygen-generated liblzma API docs (HTML),
example programs
2. Package description 2. Package description
@ -109,6 +111,13 @@ Information to packagers of XZ Utils
This package includes the API headers, static library, and This package includes the API headers, static library, and
other development files related to liblzma. 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 3. License
---------- ----------
@ -160,12 +169,13 @@ Information to packagers of XZ Utils
can be replaced with a symlink if your distro ships with shared can be replaced with a symlink if your distro ships with shared
copies of the common license texts. copies of the common license texts.
liblzma API is currently only documented using Doxygen tags in the The Doxygen-generated documentation (HTML) for the liblzma API
API headers. It hasn't been tested much how good results Doxygen headers is included in the source release and will be installed by
is able to make from the tags (e.g. Doxyfile might need tweaking, "make install" to $docdir/api. All JavaScript is removed to
the tagging may need to be improved etc.), so it might be simpler simplify license compliance and to reduce the install size. If the
to just let people read docs directly from the .h files for now, liblzma API documentation is not desired, either run configure with
and also save quite a bit in package size at the same time. --disable-doc or remove the doc/api directory before running
"make install".
6. Extra files 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 Since the liblzma API has similarities to the zlib API, some people
may find it useful to read the zlib docs and tutorial too: may find it useful to read the zlib docs and tutorial too:
http://zlib.net/manual.html https://zlib.net/manual.html
http://zlib.net/zlib_how.html https://zlib.net/zlib_how.html
2. Version numbering 2. Version numbering
@ -281,13 +281,17 @@ XZ Utils
7-Zip and the p7zip port of 7-Zip support the .xz format starting 7-Zip and the p7zip port of 7-Zip support the .xz format starting
from the version 9.00alpha. from the version 9.00alpha.
http://7-zip.org/ https://7-zip.org/
http://p7zip.sourceforge.net/ https://p7zip.sourceforge.net/
XZ Embedded is a limited implementation written for use in the Linux XZ Embedded is a limited implementation written for use in the Linux
kernel, but it is also suitable for other embedded use. 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 6. Contact information

15
THANKS
View File

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

View File

@ -19,15 +19,38 @@ ${AUTOCONF:-autoconf}
${AUTOHEADER:-autoheader} ${AUTOHEADER:-autoheader}
${AUTOMAKE:-automake} -acf --foreign ${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. # This is *NOT* done by "autoreconf -fi" or when "make" is run.
# # Pass --no-po4a or --no-doxygen to this script to skip these steps.
# Pass --no-po4a to this script to skip this step. It can be useful when # It can be useful when you know that po4a or doxygen aren't available and
# you know that po4a isn't available and don't want autogen.sh to exit # don't want autogen.sh to exit with non-zero exit status.
# with non-zero exit status. generate_po4a="y"
if test "x$1" != "x--no-po4a"; then 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 cd po4a
sh update-po sh update-po
cd ..
fi
if test "$generate_doxygen" != "n"; then
cd doxygen
sh update-doxygen
cd ..
fi fi
exit 0 exit 0

View File

@ -38,10 +38,10 @@ s/^\\.PD\$/.PD $PD/"
case $FORMAT in case $FORMAT in
ascii) ascii)
groff -t -mandoc -Tascii | col -bx groff -t -mandoc -Tascii -P-c | col -bx
;; ;;
utf8) utf8)
groff -t -mandoc -Tutf8 | col -bx groff -t -mandoc -Tutf8 -P-c | col -bx
;; ;;
ps) ps)
sed "$SED_PD" | groff -dpaper=$PAPER -t -mandoc \ 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()
endif() endif()
# 16-bit and 32-bit unaligned access is fast on x86(-64), # Unaligned access is fast on x86(-64), big endian PowerPC, and usually on
# big endian PowerPC, and usually on 32/64-bit ARM too. # 32/64-bit ARM too. There are others too and ARM could be a false match.
# There are others too and ARM could be a false match.
# #
# Guess the default value for the option. # Guess the default value for the option.
# CMake's ability to give info about the target arch seems bad. # CMake's ability to give info about the target arch seems bad.
@ -81,7 +80,7 @@ function(tuklib_integer TARGET_OR_ALL)
endif() endif()
option(TUKLIB_FAST_UNALIGNED_ACCESS option(TUKLIB_FAST_UNALIGNED_ACCESS
"Enable if the system supports *fast* unaligned memory 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}") "${FAST_UNALIGNED_GUESS}")
tuklib_add_definition_if("${TARGET_OR_ALL}" TUKLIB_FAST_UNALIGNED_ACCESS) 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) function(tuklib_progname TARGET_OR_ALL)
# NOTE: This glibc extension requires _GNU_SOURCE. # NOTE: This glibc extension requires _GNU_SOURCE.
check_symbol_exists(program_invocation_name errno.h check_symbol_exists(program_invocation_name errno.h
HAVE_DECL_PROGRAM_INVOCATION_NAME) HAVE_PROGRAM_INVOCATION_NAME)
tuklib_add_definition_if("${TARGET_OR_ALL}" tuklib_add_definition_if("${TARGET_OR_ALL}" HAVE_PROGRAM_INVOCATION_NAME)
HAVE_DECL_PROGRAM_INVOCATION_NAME)
endfunction() endfunction()

View File

@ -18,7 +18,7 @@
AC_PREREQ([2.69]) AC_PREREQ([2.69])
AC_INIT([XZ Utils], m4_esyscmd([/bin/sh build-aux/version.sh]), 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_SRCDIR([src/liblzma/common/common.h])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
@ -437,14 +437,6 @@ case $enable_threads in
;; ;;
esac 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. # 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 # 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: # 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 # The -Wno-unsupported is used to silence warnings about missing
# "subdir-objects". # "subdir-objects".
AM_INIT_AUTOMAKE([1.12 foreign tar-v7 filename-length-max=99 -Wno-unsupported]) AM_INIT_AUTOMAKE([1.12 foreign tar-v7 filename-length-max=99 -Wno-unsupported])
AC_PROG_LN_S 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 AC_PROG_CC_C99
if test x$ac_cv_prog_cc_c99 = xno ; then if test x$ac_cv_prog_cc_c99 = xno ; then
AC_MSG_ERROR([No C99 compiler was found.]) AC_MSG_ERROR([No C99 compiler was found.])
@ -611,8 +606,8 @@ AM_PROG_CC_C_O
AM_PROG_AS AM_PROG_AS
AC_USE_SYSTEM_EXTENSIONS AC_USE_SYSTEM_EXTENSIONS
case $enable_threads in AS_CASE([$enable_threads],
posix) [posix], [
echo echo
echo "POSIX threading support:" echo "POSIX threading support:"
AX_PTHREAD([:]) dnl We don't need the HAVE_PTHREAD macro. AX_PTHREAD([:]) dnl We don't need the HAVE_PTHREAD macro.
@ -638,21 +633,24 @@ case $enable_threads in
CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
AC_SEARCH_LIBS([clock_gettime], [rt]) AC_SEARCH_LIBS([clock_gettime], [rt])
AC_CHECK_FUNCS([clock_gettime pthread_condattr_setclock]) 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 CFLAGS=$OLD_CFLAGS
;; ],
win95) [win95], [
AC_DEFINE([MYTHREAD_WIN95], [1], [Define to 1 when using AC_DEFINE([MYTHREAD_WIN95], [1], [Define to 1 when using
Windows 95 (and thus XP) compatible threads. Windows 95 (and thus XP) compatible threads.
This avoids use of features that were added in This avoids use of features that were added in
Windows Vista.]) Windows Vista.])
;; ],
vista) [vista], [
AC_DEFINE([MYTHREAD_VISTA], [1], [Define to 1 when using AC_DEFINE([MYTHREAD_VISTA], [1], [Define to 1 when using
Windows Vista compatible threads. This uses Windows Vista compatible threads. This uses
features that are not available on Windows XP.]) features that are not available on Windows XP.])
;; ]
esac )
AM_CONDITIONAL([COND_THREADS], [test "x$enable_threads" != xno]) AM_CONDITIONAL([COND_THREADS], [test "x$enable_threads" != xno])
echo echo
@ -705,7 +703,7 @@ fi
# used when creating a static library. # used when creating a static library.
# #
# Libtool always uses -DPIC when building shared libraries by default and # 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 # --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 # --without-pic is used then we can use #ifdef PIC to detect if the file is
# being built for a shared library. # being built for a shared library.
@ -716,8 +714,16 @@ elif test "x$enable_shared" = xno ; then
enable_symbol_versions=no enable_symbol_versions=no
AC_MSG_RESULT([no (not building a shared library)]) AC_MSG_RESULT([no (not building a shared library)])
else else
case $host_os in case "$host_cpu-$host_os" in
linux*) 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 case "$pic_mode-$enable_static" in
default-*) default-*)
# Use symvers if PIC is defined. # Use symvers if PIC is defined.
@ -826,17 +832,22 @@ AC_C_BIGENDIAN
# __attribute__((__constructor__)) can be used for one-time initializations. # __attribute__((__constructor__)) can be used for one-time initializations.
# Use -Werror because some compilers accept unknown attributes and just # Use -Werror because some compilers accept unknown attributes and just
# give a warning. If it works this should give no warnings, even # give a warning.
# clang -Weverything should be fine. #
# dnl This doesn't need AC_LANG_SOURCE, minimal code is enough. # 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]) AC_MSG_CHECKING([if __attribute__((__constructor__)) can be used])
have_func_attribute_constructor=no have_func_attribute_constructor=no
OLD_CFLAGS="$CFLAGS" OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror" CFLAGS="$CFLAGS -Werror"
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
__attribute__((__constructor__)) __attribute__((__constructor__))
static void my_constructor_func(void) { return; } static void my_constructor_func(void) { return; }
], [ ]])], [
AC_DEFINE([HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR], [1], AC_DEFINE([HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR], [1],
[Define to 1 if __attribute__((__constructor__)) [Define to 1 if __attribute__((__constructor__))
is supported for functions.]) is supported for functions.])
@ -848,6 +859,20 @@ AC_COMPILE_IFELSE([
CFLAGS="$OLD_CFLAGS" 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. # Checks for library functions.
############################################################################### ###############################################################################
@ -884,7 +909,7 @@ TUKLIB_MBSTR
sha256_header_found=no sha256_header_found=no
sha256_type_found=no sha256_type_found=no
sha256_func_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 # 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 # too and we don't want to use that, because on older versions it
# uses OpenSSL functions, whose SHA256_Init is not guaranteed to # 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]) [sha256_func_found=yes ; break])
fi fi
fi fi
fi ])
AM_CONDITIONAL([COND_INTERNAL_SHA256], [test "x$sha256_func_found" = xno]) AM_CONDITIONAL([COND_INTERNAL_SHA256], [test "x$sha256_func_found" = xno])
if test "x$enable_external_sha256$sha256_func_found" = xyesno; then 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]) 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): # 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 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 # - Check that __attribute__((__target__("ssse3,sse4.1,pclmul"))) works
# together with _mm_clmulepi64_si128 from <immintrin.h>. The attribute # 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 # If everything above is supported, runtime detection will be used to keep the
# binaries working on systems that don't support the required extensions. # binaries working on systems that don't support the required extensions.
AC_MSG_CHECKING([if _mm_clmulepi64_si128 is usable]) 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]) AC_MSG_RESULT([no, --disable-clmul-crc was used])
else ], [
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <immintrin.h> #include <immintrin.h>
@ -962,31 +989,33 @@ else
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__) #if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
__attribute__((__target__("ssse3,sse4.1,pclmul"))) __attribute__((__target__("ssse3,sse4.1,pclmul")))
#endif #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); return _mm_clmulepi64_si128(a, b, 0);
} }
]])], [ ]])], [
AC_DEFINE([HAVE_USABLE_CLMUL], [1], 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.]) See configure.ac for details.])
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
], [ ], [
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
]) ])
fi ])
# Check for sandbox support. If one is found, set enable_sandbox=found. # Check for sandbox support. If one is found, set enable_sandbox=found.
case $enable_sandbox in AS_CASE([$enable_sandbox],
auto | capsicum) [auto | capsicum], [
AX_CHECK_CAPSICUM([enable_sandbox=found], [:]) AX_CHECK_CAPSICUM([enable_sandbox=found], [:])
;; ]
esac )
case $enable_sandbox in AS_CASE([$enable_sandbox],
auto | pledge) [auto | pledge], [
AC_CHECK_FUNCS([pledge], [enable_sandbox=found ; break]) AC_CHECK_FUNCS([pledge], [enable_sandbox=found ; break])
;; ]
esac )
# If a specific sandboxing method was explicitly requested and it wasn't # If a specific sandboxing method was explicitly requested and it wasn't
# found, give an error. # found, give an error.
@ -1015,47 +1044,72 @@ if test -n "$CFLAG_VISIBILITY" && test "$is_w32" = no; then
AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY"
fi fi
if test "$GCC" = yes ; then AS_IF([test "$GCC" = yes], [
# Enable as much warnings as possible. These commented warnings won't # Enable as much warnings as possible. These commented warnings won't
# work for this package though: # work for this package though:
# * -Wunreachable-code breaks several assert(0) cases, which are # * -Wunreachable-code breaks several assert(0) cases, which are
# backed up with "return LZMA_PROG_ERROR". # backed up with "return LZMA_PROG_ERROR".
# * -Wcast-qual would break various things where we need a non-const # * -Wcast-qual would break various things where we need a non-const
# pointer although we don't modify anything through it. # 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 # * -Winline, -Wdisabled-optimization, -Wunsafe-loop-optimizations
# don't seem so useful here; at least the last one gives some # don't seem so useful here; at least the last one gives some
# warnings which are not bugs. # 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 \ for NEW_FLAG in \
-Wall \ -Wall \
-Wextra \ -Wextra \
-Wvla \ -Wvla \
-Wc99-c11-compat \
-Wformat=2 \ -Wformat=2 \
-Winit-self \ -Winit-self \
-Wmissing-include-dirs \ -Wmissing-include-dirs \
-Wstrict-aliasing \ -Wshift-overflow=2 \
-Wstrict-overflow=3 \
-Walloc-zero \
-Wduplicated-cond \
-Wfloat-equal \ -Wfloat-equal \
-Wundef \ -Wundef \
-Wshadow \ -Wshadow \
-Wpointer-arith \ -Wpointer-arith \
-Wbad-function-cast \ -Wbad-function-cast \
-Wwrite-strings \ -Wwrite-strings \
-Wdate-time \
-Wsign-conversion \
-Wfloat-conversion \
-Wlogical-op \ -Wlogical-op \
-Waggregate-return \ -Waggregate-return \
-Wstrict-prototypes \ -Wstrict-prototypes \
-Wold-style-definition \ -Wold-style-definition \
-Wmissing-prototypes \ -Wmissing-prototypes \
-Wmissing-declarations \ -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 do
AC_MSG_CHECKING([if $CC accepts $NEW_FLAG]) AC_MSG_CHECKING([if $CC accepts $NEW_FLAG])
OLD_CFLAGS="$CFLAGS" OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $NEW_FLAG -Werror" CFLAGS="$CFLAGS $NEW_FLAG -Werror"
AC_COMPILE_IFELSE([AC_LANG_SOURCE( AC_COMPILE_IFELSE([AC_LANG_SOURCE(
[void foo(void); void foo(void) { }])], [ [[void foo(void); void foo(void) { }]])], [
AM_CFLAGS="$AM_CFLAGS $NEW_FLAG" AM_CFLAGS="$AM_CFLAGS $NEW_FLAG"
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
], [ ], [
@ -1071,7 +1125,7 @@ if test "$GCC" = yes ; then
if test "x$enable_werror" = "xyes"; then if test "x$enable_werror" = "xyes"; then
AM_CFLAGS="$AM_CFLAGS -Werror" AM_CFLAGS="$AM_CFLAGS -Werror"
fi fi
fi ])
############################################################################### ###############################################################################
@ -1092,7 +1146,6 @@ xz=`echo xz | sed "$program_transform_name"`
AC_SUBST([xz]) AC_SUBST([xz])
AC_CONFIG_FILES([ AC_CONFIG_FILES([
Doxyfile
Makefile Makefile
po/Makefile.in po/Makefile.in
lib/Makefile 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 If the result is still too big, take a look at XZ Embedded. It is
a separate project, which provides a limited but significantly a separate project, which provides a limited but significantly
smaller XZ decoder implementation than XZ Utils. You can find it 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 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) Compared to the previous version (2022-07-13 21:00+0300)
the section 1.1.3 was modified to allow End of Payload Marker the section 2 was modified to change links from http to
with a known Uncompressed Size. https and to update XZ links.
1. File Format 1. File Format
@ -157,17 +157,17 @@ The .lzma File Format
2. References 2. References
LZMA SDK - The original LZMA implementation LZMA SDK - The original LZMA implementation
http://7-zip.org/sdk.html https://7-zip.org/sdk.html
7-Zip 7-Zip
http://7-zip.org/ https://7-zip.org/
LZMA Utils - LZMA adapted to POSIX-like systems LZMA Utils - LZMA adapted to POSIX-like systems
http://tukaani.org/lzma/ https://tukaani.org/lzma/
XZ Utils - The next generation of LZMA Utils 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 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 The .xz File Format
=================== ===================
Version 1.1.0 (2022-12-11) Version 1.2.0 (2024-01-19)
0. Preface 0. Preface
@ -81,18 +81,22 @@ Version 1.1.0 (2022-12-11)
0.2. Getting the Latest Version 0.2. Getting the Latest Version
The latest official version of this document can be downloaded 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 Specific versions of this document have a filename
xz-file-format-X.Y.Z.txt where X.Y.Z is the version number. 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 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 0.3. Version History
Version Date Description 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 1.1.0 2022-12-11 Added ARM64 filter and clarified 32-bit
ARM endianness in Section 5.3.2, ARM endianness in Section 5.3.2,
language improvements in Section 5.4 language improvements in Section 5.4
@ -923,6 +927,7 @@ Version 1.1.0 (2022-12-11)
0x08 2 bytes ARM Thumb filter [1] 0x08 2 bytes ARM Thumb filter [1]
0x09 4 bytes SPARC filter 0x09 4 bytes SPARC filter
0x0A 4 bytes ARM64 filter [2] 0x0A 4 bytes ARM64 filter [2]
0x0B 2 bytes RISC-V filter
[1] These are for little endian instruction encoding. [1] These are for little endian instruction encoding.
This must not be confused with data endianness. This must not be confused with data endianness.
@ -1136,30 +1141,30 @@ Version 1.1.0 (2022-12-11)
7. References 7. References
LZMA SDK - The original LZMA implementation 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 LZMA Utils - LZMA adapted to POSIX-like systems
http://tukaani.org/lzma/ https://tukaani.org/lzma/
XZ Utils - The next generation of LZMA Utils XZ Utils - The next generation of LZMA Utils
http://tukaani.org/xz/ https://xz.tukaani.org/xz-utils/
[RFC-1952] [RFC-1952]
GZIP file format specification version 4.3 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" - Notation of byte boxes in section "2.1. Overall conventions"
[RFC-2119] [RFC-2119]
Key words for use in RFCs to Indicate Requirement Levels 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]
GNU tar 1.21 manual GNU tar 1.35 manual
http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html https://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html
- Node 9.4.2 "Blocking Factor", paragraph that begins - Node 9.4.2 "Blocking Factor", paragraph that begins
"gzip will complain about trailing garbage" "gzip will complain about trailing garbage"
- Note that this URL points to the latest version of the - Note that this URL points to the latest version of the
manual, and may some day not contain the note which is in manual, and may some day not contain the note which is in
1.21. For the exact version of the manual, download GNU 1.35. For the exact version of the manual, download GNU
tar 1.21: ftp://ftp.gnu.org/pub/gnu/tar/tar-1.21.tar.gz 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 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 deciding what to download. If you are only interested in building
XZ Utils, the zip-picker may list files that you don't strictly 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 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). from readme.1st too).
For a more manual method, first select a mirror from 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: subdirectory named "current". You need the following files:
unzip32.exe (if you don't already have a LFN-capable unzipper) unzip32.exe (if you don't already have a LFN-capable unzipper)

View File

@ -143,7 +143,7 @@
#define PACKAGE_NAME "XZ Utils" #define PACKAGE_NAME "XZ Utils"
/* Define to the home page for this package. */ /* 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. */ /* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 4 #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: # Checks for tuklib_integer.h:
# - Endianness # - Endianness
# - Does the compiler or the operating system provide byte swapping macros # - Does the compiler or the operating system provide byte swapping macros
# - Does the hardware support fast unaligned access to 16-bit # - Does the hardware support fast unaligned access to 16-bit, 32-bit,
# and 32-bit integers # and 64-bit integers
# #
# COPYING # COPYING
# #

View File

@ -21,5 +21,8 @@
AC_DEFUN_ONCE([TUKLIB_PROGNAME], [ AC_DEFUN_ONCE([TUKLIB_PROGNAME], [
AC_REQUIRE([TUKLIB_COMMON]) 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 ])dnl

View File

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

218
po/de.po
View File

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

638
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. # 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 "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n" "Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" "Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n" "POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2022-11-10 09:14-0600\n" "PO-Revision-Date: 2023-07-19 11:31-0600\n"
"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n" "Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
"Language-Team: Spanish <es@tp.org.es>\n" "Language-Team: Spanish <es@tp.org.es>\n"
"Language: es\n" "Language: es\n"
@ -17,51 +17,66 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\n" "X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/xz/args.c:64 #: src/xz/args.c:77
#, c-format #, c-format
msgid "%s: Invalid argument to --block-list" msgid "%s: Invalid argument to --block-list"
msgstr "%s: Argumento inválido para --block-list" msgstr "%s: Argumento inválido para --block-list"
#: src/xz/args.c:74 #: src/xz/args.c:87
#, c-format #, c-format
msgid "%s: Too many arguments to --block-list" msgid "%s: Too many arguments to --block-list"
msgstr "%s: Demasiados argumentos para --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" 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" 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 #, c-format
msgid "%s: Unknown file format type" msgid "%s: Unknown file format type"
msgstr "%s: Tipo de formato de fichero desconocido" 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 #, c-format
msgid "%s: Unsupported integrity check type" msgid "%s: Unsupported integrity check type"
msgstr "%s: No se admite el tipo de verificación de integridad" 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'." msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Solo se puede especificar un fichero con `--files' o `--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 #, c-format
msgid "The environment variable %s contains too many arguments" msgid "The environment variable %s contains too many arguments"
msgstr "La variable de ambiente %s contiene demasiados argumentos" 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" msgid "Compression support was disabled at build time"
msgstr "Se desactivó el soporte para compresión en el momento de compilación" 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" msgid "Decompression support was disabled at build time"
msgstr "Se desactivó el soporte para descompresión en el momento de compilación" 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" msgid "Compression of lzip files (.lz) is not supported"
msgstr "No se admite la compresión de ficheros lzip (.lz)" 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 #: src/xz/coder.c:115
msgid "Maximum number of filters is four" msgid "Maximum number of filters is four"
msgstr "El número máximo de filtros es cuatro" 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" msgid "Error creating a pipe: %s"
msgstr "Error al crear una tubería: %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" msgid "Failed to enable the sandbox"
msgstr "Falló al activar el arenero" msgstr "Falló al activar el arenero"
#: src/xz/file_io.c:277 #: src/xz/file_io.c:294
#, c-format #, c-format
msgid "%s: poll() failed: %s" msgid "%s: poll() failed: %s"
msgstr "%s: falló poll(): %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 #. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously #. of the original file, and in that case it obviously
#. shouldn't be removed. #. shouldn't be removed.
#: src/xz/file_io.c:344 #: src/xz/file_io.c:361
#, c-format #, c-format
msgid "%s: File seems to have been moved, not removing" msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Al parecer se movió el fichero, no se borra" 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 #, c-format
msgid "%s: Cannot remove: %s" msgid "%s: Cannot remove: %s"
msgstr "%s: No se puede borrar: %s" msgstr "%s: No se puede borrar: %s"
#: src/xz/file_io.c:377 #: src/xz/file_io.c:394
#, c-format #, c-format
msgid "%s: Cannot set the file owner: %s" msgid "%s: Cannot set the file owner: %s"
msgstr "%s: No se puede establecer el propietario del fichero: %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 #, c-format
msgid "%s: Cannot set the file group: %s" msgid "%s: Cannot set the file group: %s"
msgstr "%s: No se puede establecer el grupo del fichero: %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 #, c-format
msgid "%s: Cannot set the file permissions: %s" msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: No se pueden establecer los permisos del fichero: %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 #, c-format
msgid "Error getting the file status flags from standard input: %s" 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" 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 #, c-format
msgid "%s: Is a symbolic link, skipping" msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Es un enlace simbólico, se salta" msgstr "%s: Es un enlace simbólico, se salta"
#: src/xz/file_io.c:684 #: src/xz/file_io.c:701
#, c-format #, c-format
msgid "%s: Is a directory, skipping" msgid "%s: Is a directory, skipping"
msgstr "%s: Es un directorio, se salta" msgstr "%s: Es un directorio, se salta"
#: src/xz/file_io.c:690 #: src/xz/file_io.c:707
#, c-format #, c-format
msgid "%s: Not a regular file, skipping" msgid "%s: Not a regular file, skipping"
msgstr "%s: No es un fichero regular, se salta" msgstr "%s: No es un fichero regular, se salta"
#: src/xz/file_io.c:707 #: src/xz/file_io.c:724
#, c-format #, c-format
msgid "%s: File has setuid or setgid bit set, skipping" msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: El fichero tiene el bit setuid o setgid activo, se salta" 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 #, c-format
msgid "%s: File has sticky bit set, skipping" msgid "%s: File has sticky bit set, skipping"
msgstr "%s: El fichero tiene el bit sticky activo, se salta" 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 #, c-format
msgid "%s: Input file has more than one hard link, skipping" 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" 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" msgid "Empty filename, skipping"
msgstr "Nombre de fichero vacío, se salta" msgstr "Nombre de fichero vacío, se salta"
#: src/xz/file_io.c:817 #: src/xz/file_io.c:834
#, c-format #, c-format
msgid "Error restoring the status flags to standard input: %s" msgid "Error restoring the status flags to standard input: %s"
msgstr "Error al restaurar las opciones de estado en la entrada estándar: %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 #, c-format
msgid "Error getting the file status flags from standard output: %s" 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" 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 #, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s" 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" 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 #, c-format
msgid "%s: Closing the file failed: %s" msgid "%s: Closing the file failed: %s"
msgstr "%s: Falló al cerrar el fichero: %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 #, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s" 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" 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 #, c-format
msgid "%s: Read error: %s" msgid "%s: Read error: %s"
msgstr "%s: Error de lectura: %s" msgstr "%s: Error de lectura: %s"
#: src/xz/file_io.c:1222 #: src/xz/file_io.c:1239
#, c-format #, c-format
msgid "%s: Error seeking the file: %s" msgid "%s: Error seeking the file: %s"
msgstr "%s: Error al buscar en el fichero: %s" msgstr "%s: Error al buscar en el fichero: %s"
#: src/xz/file_io.c:1246 #: src/xz/file_io.c:1263
#, c-format #, c-format
msgid "%s: Unexpected end of file" msgid "%s: Unexpected end of file"
msgstr "%s: Fin de fichero inesperado" msgstr "%s: Fin de fichero inesperado"
#: src/xz/file_io.c:1305 #: src/xz/file_io.c:1322
#, c-format #, c-format
msgid "%s: Write error: %s" msgid "%s: Write error: %s"
msgstr "%s: Error de escritura: %s" msgstr "%s: Error de escritura: %s"
#: src/xz/hardware.c:225 #: src/xz/hardware.c:238
msgid "Disabled" msgid "Disabled"
msgstr "Desactivado" msgstr "Desactivado"
#: src/xz/hardware.c:256 #: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):" msgid "Amount of physical memory (RAM):"
msgstr "Cantidad total de memoria física (RAM):" msgstr "Cantidad total de memoria física (RAM):"
#: src/xz/hardware.c:257 #: src/xz/hardware.c:270
msgid "Number of processor threads:" msgid "Number of processor threads:"
msgstr "Número de hilos de procesador:" msgstr "Número de hilos de procesador:"
#: src/xz/hardware.c:258 #: src/xz/hardware.c:271
msgid "Compression:" msgid "Compression:"
msgstr "Compresión" msgstr "Compresión"
#: src/xz/hardware.c:259 #: src/xz/hardware.c:272
msgid "Decompression:" msgid "Decompression:"
msgstr "Descompresión:" msgstr "Descompresión:"
#: src/xz/hardware.c:260 #: src/xz/hardware.c:273
msgid "Multi-threaded decompression:" msgid "Multi-threaded decompression:"
msgstr "Descompresión multihilos:" msgstr "Descompresión multihilos:"
#: src/xz/hardware.c:261 #: src/xz/hardware.c:274
msgid "Default for -T0:" msgid "Default for -T0:"
msgstr "Por omisión para -T0:" msgstr "Por omisión para -T0:"
#: src/xz/hardware.c:279 #: src/xz/hardware.c:292
msgid "Hardware information:" msgid "Hardware information:"
msgstr "Información de hardware:" msgstr "Información de hardware:"
#: src/xz/hardware.c:286 #: src/xz/hardware.c:299
msgid "Memory usage limits:" msgid "Memory usage limits:"
msgstr "Límites de uso de memoria:" msgstr "Límites de uso de memoria:"
#: src/xz/list.c:65 #: src/xz/list.c:68
msgid "Streams:" msgid "Streams:"
msgstr "Flujos:" msgstr "Flujos:"
#: src/xz/list.c:66 #: src/xz/list.c:69
msgid "Blocks:" msgid "Blocks:"
msgstr "Bloques:" msgstr "Bloques:"
#: src/xz/list.c:67 #: src/xz/list.c:70
msgid "Compressed size:" msgid "Compressed size:"
msgstr "Tamaño comprimido:" msgstr "Tamaño comprimido:"
#: src/xz/list.c:68 #: src/xz/list.c:71
msgid "Uncompressed size:" msgid "Uncompressed size:"
msgstr "Tamaño sin comprimir:" msgstr "Tamaño sin comprimir:"
#: src/xz/list.c:69 #: src/xz/list.c:72
msgid "Ratio:" msgid "Ratio:"
msgstr "Tasa:" msgstr "Tasa:"
#: src/xz/list.c:70 #: src/xz/list.c:73
msgid "Check:" msgid "Check:"
msgstr "Verificación:" msgstr "Verificación:"
#: src/xz/list.c:71 #: src/xz/list.c:74
msgid "Stream Padding:" msgid "Stream Padding:"
msgstr "Relleno de flujo:" msgstr "Relleno de flujo:"
#: src/xz/list.c:72 #: src/xz/list.c:75
msgid "Memory needed:" msgid "Memory needed:"
msgstr "Memoria requerida:" msgstr "Memoria requerida:"
#: src/xz/list.c:73 #: src/xz/list.c:76
msgid "Sizes in headers:" msgid "Sizes in headers:"
msgstr "Tamaños en cabeceras:" msgstr "Tamaños en cabeceras:"
#: src/xz/list.c:76 #: src/xz/list.c:79
msgid "Number of files:" msgid "Number of files:"
msgstr "Número de ficheros:" msgstr "Número de ficheros:"
#: src/xz/list.c:119 #: src/xz/list.c:122
msgid "Stream" msgid "Stream"
msgstr "Flujo" msgstr "Flujo"
#: src/xz/list.c:120 #: src/xz/list.c:123
msgid "Block" msgid "Block"
msgstr "Bloque" msgstr "Bloque"
#: src/xz/list.c:121 #: src/xz/list.c:124
msgid "Blocks" msgid "Blocks"
msgstr "Bloques" msgstr "Bloques"
#: src/xz/list.c:122 #: src/xz/list.c:125
msgid "CompOffset" msgid "CompOffset"
msgstr "DesplComp" msgstr "DesplComp"
#: src/xz/list.c:123 #: src/xz/list.c:126
msgid "UncompOffset" msgid "UncompOffset"
msgstr "DesplDescomp" msgstr "DesplDescomp"
#: src/xz/list.c:124 #: src/xz/list.c:127
msgid "CompSize" msgid "CompSize"
msgstr "TamComp" msgstr "TamComp"
#: src/xz/list.c:125 #: src/xz/list.c:128
msgid "UncompSize" msgid "UncompSize"
msgstr "TamDescomp" msgstr "TamDescomp"
#: src/xz/list.c:126 #: src/xz/list.c:129
msgid "TotalSize" msgid "TotalSize"
msgstr "TamTotal" msgstr "TamTotal"
#: src/xz/list.c:127 #: src/xz/list.c:130
msgid "Ratio" msgid "Ratio"
msgstr "Tasa" msgstr "Tasa"
#: src/xz/list.c:128 #: src/xz/list.c:131
msgid "Check" msgid "Check"
msgstr "Verif" msgstr "Verif"
#: src/xz/list.c:129 #: src/xz/list.c:132
msgid "CheckVal" msgid "CheckVal"
msgstr "ValVerif" msgstr "ValVerif"
#: src/xz/list.c:130 #: src/xz/list.c:133
msgid "Padding" msgid "Padding"
msgstr "Relleno" msgstr "Relleno"
#: src/xz/list.c:131 #: src/xz/list.c:134
msgid "Header" msgid "Header"
msgstr "Cabecera" msgstr "Cabecera"
#: src/xz/list.c:132 #: src/xz/list.c:135
msgid "Flags" msgid "Flags"
msgstr "Opciones" msgstr "Opciones"
#: src/xz/list.c:133 #: src/xz/list.c:136
msgid "MemUsage" msgid "MemUsage"
msgstr "UsoMem" msgstr "UsoMem"
#: src/xz/list.c:134 #: src/xz/list.c:137
msgid "Filters" msgid "Filters"
msgstr "Filtros" msgstr "Filtros"
@ -405,7 +420,7 @@ msgstr "Filtros"
#. This string is used in tables. In older xz version this #. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but #. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore. #. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166 #: src/xz/list.c:169
msgid "None" msgid "None"
msgstr "Ninguno" msgstr "Ninguno"
@ -413,60 +428,60 @@ msgstr "Ninguno"
#. but the Check ID is known (here 2). In older xz version these #. 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 #. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore. #. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172 #: src/xz/list.c:175
msgid "Unknown-2" msgid "Unknown-2"
msgstr "Descon-2" msgstr "Descon-2"
#: src/xz/list.c:173 #: src/xz/list.c:176
msgid "Unknown-3" msgid "Unknown-3"
msgstr "Descon-3" msgstr "Descon-3"
#: src/xz/list.c:175 #: src/xz/list.c:178
msgid "Unknown-5" msgid "Unknown-5"
msgstr "Descon-5" msgstr "Descon-5"
#: src/xz/list.c:176 #: src/xz/list.c:179
msgid "Unknown-6" msgid "Unknown-6"
msgstr "Descon-6" msgstr "Descon-6"
#: src/xz/list.c:177 #: src/xz/list.c:180
msgid "Unknown-7" msgid "Unknown-7"
msgstr "Descon-7" msgstr "Descon-7"
#: src/xz/list.c:178 #: src/xz/list.c:181
msgid "Unknown-8" msgid "Unknown-8"
msgstr "Descon-8" msgstr "Descon-8"
#: src/xz/list.c:179 #: src/xz/list.c:182
msgid "Unknown-9" msgid "Unknown-9"
msgstr "Descon-9" msgstr "Descon-9"
#: src/xz/list.c:181 #: src/xz/list.c:184
msgid "Unknown-11" msgid "Unknown-11"
msgstr "Descon-11" msgstr "Descon-11"
#: src/xz/list.c:182 #: src/xz/list.c:185
msgid "Unknown-12" msgid "Unknown-12"
msgstr "Descon-12" msgstr "Descon-12"
#: src/xz/list.c:183 #: src/xz/list.c:186
msgid "Unknown-13" msgid "Unknown-13"
msgstr "Descon-13" msgstr "Descon-13"
#: src/xz/list.c:184 #: src/xz/list.c:187
msgid "Unknown-14" msgid "Unknown-14"
msgstr "Descon-14" msgstr "Descon-14"
#: src/xz/list.c:185 #: src/xz/list.c:188
msgid "Unknown-15" msgid "Unknown-15"
msgstr "Descon-15" msgstr "Descon-15"
#: src/xz/list.c:348 #: src/xz/list.c:351
#, c-format #, c-format
msgid "%s: File is empty" msgid "%s: File is empty"
msgstr "%s: El fichero está vacío" msgstr "%s: El fichero está vacío"
#: src/xz/list.c:353 #: src/xz/list.c:356
#, c-format #, c-format
msgid "%s: Too small to be a valid .xz file" msgid "%s: Too small to be a valid .xz file"
msgstr "%s: Demasiado pequeño para ser un fichero .xz válido" 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 #. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to #. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz". #. 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" msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Flujos Bloques Comprimido Sin-Comprimir Relac Verif Nombre-Fichero" 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" msgid "Yes"
msgstr "Sí" msgstr "Sí"
#: src/xz/list.c:1016 src/xz/list.c:1193 #: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No" msgid "No"
msgstr "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 #, c-format
msgid " Minimum XZ Utils version: %s\n" msgid " Minimum XZ Utils version: %s\n"
msgstr " Versión de herramientas XZ mínima: %s\n" msgstr " Versión de herramientas XZ mínima: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this #. 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". #. 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 #, c-format
msgid "%s file\n" msgid "%s file\n"
msgid_plural "%s files\n" msgid_plural "%s files\n"
msgstr[0] "%s fichero\n" msgstr[0] "%s fichero\n"
msgstr[1] "%s ficheros\n" msgstr[1] "%s ficheros\n"
#: src/xz/list.c:1181 #: src/xz/list.c:1192
msgid "Totals:" msgid "Totals:"
msgstr "Totales:" msgstr "Totales:"
#: src/xz/list.c:1259 #: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)" msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list solo funciona con ficheros .xz (--format=xz o --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" msgid "--list does not support reading from standard input"
msgstr "--list no admite leer de la entrada estándar" 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: ". #. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs #. This is a translatable string because French needs
#. a space before a colon. #. a space before a colon.
#: src/xz/message.c:725 #: src/xz/message.c:670 src/xz/message.c:725
#, c-format #, c-format
msgid "%s: " msgid "%s: "
msgstr "%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)" msgid "Internal error (bug)"
msgstr "Error interno (bug)" msgstr "Error interno (bug)"
#: src/xz/message.c:795 #: src/xz/message.c:804
msgid "Cannot establish signal handlers" msgid "Cannot establish signal handlers"
msgstr "No se pueden establecer los manejadores de señales" 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" msgid "No integrity check; not verifying file integrity"
msgstr "No hay revisión de integridad; no se verifica la integridad del fichero" 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" 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" 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" msgid "Memory usage limit reached"
msgstr "Se alcanzó el límite de uso de memoria" 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" msgid "File format not recognized"
msgstr "No se reconoce el formato del fichero" msgstr "No se reconoce el formato del fichero"
#: src/xz/message.c:820 #: src/xz/message.c:829
msgid "Unsupported options" msgid "Unsupported options"
msgstr "Opciones sin soporte" msgstr "Opciones sin soporte"
#: src/xz/message.c:823 #: src/xz/message.c:832
msgid "Compressed data is corrupt" msgid "Compressed data is corrupt"
msgstr "Los datos comprimidos están corruptos" msgstr "Los datos comprimidos están corruptos"
#: src/xz/message.c:826 #: src/xz/message.c:835
msgid "Unexpected end of input" msgid "Unexpected end of input"
msgstr "Fin de entrada inesperado" msgstr "Fin de entrada inesperado"
#: src/xz/message.c:868 #: src/xz/message.c:877
#, c-format #, c-format
msgid "%s MiB of memory is required. The limiter is disabled." msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Se requieren %s MiB de memoria. Se desactiva el limitador." msgstr "Se requieren %s MiB de memoria. Se desactiva el limitador."
#: src/xz/message.c:896 #: src/xz/message.c:905
#, c-format #, c-format
msgid "%s MiB of memory is required. The limit is %s." msgid "%s MiB of memory is required. The limit is %s."
msgstr "Se requieren %s MiB de memoria. El límite es %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 #, c-format
msgid "%s: Filter chain: %s\n" msgid "%s: Filter chain: %s\n"
msgstr "%s: Cadena de filtro: %s\n" msgstr "%s: Cadena de filtro: %s\n"
#: src/xz/message.c:1080 #: src/xz/message.c:935
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Intente `%s --help' para obtener más información." msgstr "Intente `%s --help' para obtener más información."
#: src/xz/message.c:1106 #: src/xz/message.c:961
#, c-format #, c-format
msgid "" msgid ""
"Usage: %s [OPTION]... [FILE]...\n" "Usage: %s [OPTION]... [FILE]...\n"
@ -612,17 +627,17 @@ msgstr ""
"Comprime o descomprime FICHEROs en el formato .xz.\n" "Comprime o descomprime FICHEROs en el formato .xz.\n"
"\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" msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "" msgstr ""
"Los argumentos obligatorios para las opciones largas también son\n" "Los argumentos obligatorios para las opciones largas también son\n"
"obligatorios para las opciones cortas.\n" "obligatorios para las opciones cortas.\n"
#: src/xz/message.c:1117 #: src/xz/message.c:972
msgid " Operation mode:\n" msgid " Operation mode:\n"
msgstr " Modo de operación:\n" msgstr " Modo de operación:\n"
#: src/xz/message.c:1120 #: src/xz/message.c:975
msgid "" msgid ""
" -z, --compress force compression\n" " -z, --compress force compression\n"
" -d, --decompress force decompression\n" " -d, --decompress force decompression\n"
@ -634,7 +649,7 @@ msgstr ""
" -t, --test prueba la integridad del fichero comprimido\n" " -t, --test prueba la integridad del fichero comprimido\n"
" -l, --list lista la información sobre los ficheros .xz" " -l, --list lista la información sobre los ficheros .xz"
#: src/xz/message.c:1126 #: src/xz/message.c:981
msgid "" msgid ""
"\n" "\n"
" Operation modifiers:\n" " Operation modifiers:\n"
@ -642,7 +657,7 @@ msgstr ""
"\n" "\n"
" Modificadores de operación:\n" " Modificadores de operación:\n"
#: src/xz/message.c:1129 #: src/xz/message.c:984
msgid "" msgid ""
" -k, --keep keep (don't delete) input files\n" " -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\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" " -c, --stdout escribe a la entrada estándar y no borra los ficheros\n"
" de entrada" " de entrada"
#: src/xz/message.c:1138 #: src/xz/message.c:993
msgid "" msgid ""
" --single-stream decompress only the first stream, and silently\n" " --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data" " ignore possible remaining input data"
@ -662,7 +677,7 @@ msgstr ""
" --single-stream solo descomprime el primer flujo, y descarta\n" " --single-stream solo descomprime el primer flujo, y descarta\n"
" silenciosamente los posibles datos de entrada restantes" " silenciosamente los posibles datos de entrada restantes"
#: src/xz/message.c:1141 #: src/xz/message.c:996
msgid "" msgid ""
" --no-sparse do not create sparse files when decompressing\n" " --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\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" " terminar con el carácter de línea nueva\n"
" --files0[=FICH] como --files pero usa el carácter nulo como terminador" " --files0[=FICH] como --files pero usa el carácter nulo como terminador"
#: src/xz/message.c:1150 #: src/xz/message.c:1005
msgid "" msgid ""
"\n" "\n"
" Basic file format and compression options:\n" " Basic file format and compression options:\n"
@ -687,7 +702,7 @@ msgstr ""
"\n" "\n"
" Opciones básicas de compresión y formato de fichero:\n" " Opciones básicas de compresión y formato de fichero:\n"
#: src/xz/message.c:1152 #: src/xz/message.c:1007
msgid "" msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n" " -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -701,11 +716,11 @@ msgstr ""
" `none' (usar con precaución),\n" " `none' (usar con precaución),\n"
" `crc32', `crc64' (por defecto), o `sha256'" " `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" msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check no hace la verificación de integridad al descomprimir" msgstr " --ignore-check no hace la verificación de integridad al descomprimir"
#: src/xz/message.c:1161 #: src/xz/message.c:1016
msgid "" msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n" " -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!" " decompressor memory usage into account before using 7-9!"
@ -714,7 +729,7 @@ msgstr ""
" ¡Considere el uso de memoria del compresor *y*\n" " ¡Considere el uso de memoria del compresor *y*\n"
" del descompresor antes de usar 7-9!" " del descompresor antes de usar 7-9!"
#: src/xz/message.c:1165 #: src/xz/message.c:1020
msgid "" msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n" " -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements" " does not affect decompressor memory requirements"
@ -723,7 +738,7 @@ msgstr ""
" tiempo de procesamiento; no afecta los requisitos\n" " tiempo de procesamiento; no afecta los requisitos\n"
" de memoria del descompresor" " de memoria del descompresor"
#: src/xz/message.c:1169 #: src/xz/message.c:1024
msgid "" msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " -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" " 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" " establezca a 0 para usar tantos hilos como hayan\n"
" núcleos de procesador" " núcleos de procesador"
#: src/xz/message.c:1174 #: src/xz/message.c:1029
msgid "" msgid ""
" --block-size=SIZE\n" " --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\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 entrada; use esta opción para establecer el tamaño\n"
" de bloque para la compresión con hilos" " de bloque para la compresión con hilos"
#: src/xz/message.c:1178 #: src/xz/message.c:1033
msgid "" msgid ""
" --block-list=SIZES\n" " --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\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" " inicia un nuevo bloque .xz después de cada intervalo\n"
" dado, separado por comas, de datos sin comprimir" " dado, separado por comas, de datos sin comprimir"
#: src/xz/message.c:1182 #: src/xz/message.c:1037
msgid "" msgid ""
" --flush-timeout=TIMEOUT\n" " --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\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" " produciría un bloqueo, todos los datos pendientes son\n"
" descartados" " descartados"
#: src/xz/message.c:1188 #: src/xz/message.c:1043
#, no-c-format #, no-c-format
msgid "" msgid ""
" --memlimit-compress=LIMIT\n" " --memlimit-compress=LIMIT\n"
@ -786,7 +801,7 @@ msgstr ""
" anteriores; el LÍMITE está en bytes, % de RAM,\n" " anteriores; el LÍMITE está en bytes, % de RAM,\n"
" o 0 para valores por defecto" " o 0 para valores por defecto"
#: src/xz/message.c:1197 #: src/xz/message.c:1052
msgid "" msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n" " --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards" " 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" " uso de memoria, muestra un error en lugar de ajustar\n"
" los valores hacia abajo" " los valores hacia abajo"
#: src/xz/message.c:1203 #: src/xz/message.c:1058
msgid "" msgid ""
"\n" "\n"
" Custom filter chain for compression (alternative for using presets):" " Custom filter chain for compression (alternative for using presets):"
@ -803,7 +818,7 @@ msgstr ""
"\n" "\n"
" Cadena de filtros para compresión (alternativa a valores predefinidos):" " Cadena de filtros para compresión (alternativa a valores predefinidos):"
#: src/xz/message.c:1212 #: src/xz/message.c:1067
msgid "" msgid ""
"\n" "\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\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" " depth=NÚM profundidad máxima de búsqueda;\n"
" 0=automática (por defecto)" " 0=automática (por defecto)"
#: src/xz/message.c:1227 #: src/xz/message.c:1082
msgid "" msgid ""
"\n" "\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\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" " start=NÚM inicio de desplazamiento para\n"
" conversiones (por defecto=0)" " conversiones (por defecto=0)"
#: src/xz/message.c:1240 #: src/xz/message.c:1095
msgid "" msgid ""
"\n" "\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\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" " dist=NÚM distancia entre bytes que se restan\n"
" uno del otro (1-256; 1)" " uno del otro (1-256; 1)"
#: src/xz/message.c:1248 #: src/xz/message.c:1103
msgid "" msgid ""
"\n" "\n"
" Other options:\n" " Other options:\n"
@ -879,7 +894,7 @@ msgstr ""
"\n" "\n"
" Otras opciones:\n" " Otras opciones:\n"
#: src/xz/message.c:1251 #: src/xz/message.c:1106
msgid "" msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose" " -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" " -q, --quiet suprime avisos; use dos veces para suprimir errores\n"
" -v, --verbose detallado; use dos veces para obtener aún más detalle" " -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" msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn los avisos no afectan el estado de la salida" 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)" msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot usa mensajes analizables por máquina (útil para scripts)" msgstr " --robot usa mensajes analizables por máquina (útil para scripts)"
#: src/xz/message.c:1261 #: src/xz/message.c:1116
msgid "" msgid ""
" --info-memory display the total amount of RAM and the currently active\n" " --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit" " 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" " --info-memory muestra la cantidad total de RAM y los límites de uso\n"
" de memoria activos, y termina" " de memoria activos, y termina"
#: src/xz/message.c:1264 #: src/xz/message.c:1119
msgid "" msgid ""
" -h, --help display the short help (lists only the basic options)\n" " -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit" " -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, --help muestra la ayuda corta (solo muestra las opciones básicas)\n"
" -H, --long-help muestra esta ayuda detallada y termina" " -H, --long-help muestra esta ayuda detallada y termina"
#: src/xz/message.c:1268 #: src/xz/message.c:1123
msgid "" msgid ""
" -h, --help display this short help and exit\n" " -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)" " -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, --help muestra esta ayuda corta y termina\n"
" -H, --long-help muestra la ayuda larga (además muestra opciones avanzadas)" " -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" msgid " -V, --version display the version number and exit"
msgstr " -V, --version muestra el número de versión y termina" msgstr " -V, --version muestra el número de versión y termina"
#: src/xz/message.c:1275 #: src/xz/message.c:1130
msgid "" msgid ""
"\n" "\n"
"With no FILE, or when FILE is -, read standard input.\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 #. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW #. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks. #. address for translation bugs. Thanks.
#: src/xz/message.c:1281 #: src/xz/message.c:1136
#, c-format #, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n" msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "" msgstr ""
"Reporte errores a <%s> (en inglés o finlandés).\n" "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" "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 #, c-format
msgid "%s home page: <%s>\n" msgid "%s home page: <%s>\n"
msgstr "Sitio web de %s: <%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." 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." 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" msgid "%s: Invalid option value"
msgstr "%s: Valor de opción inválido" msgstr "%s: Valor de opción inválido"
#: src/xz/options.c:286 #: src/xz/options.c:247
#, c-format #, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s" msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "No se admite el valor predefinido LZMA1/LZMA2: %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" msgid "The sum of lc and lp must not exceed 4"
msgstr "La suma de lc y lp no debe exceder 4" msgstr "La suma de lc y lp no debe exceder 4"
#: src/xz/options.c:398 #: src/xz/suffix.c:160
#, 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
#, c-format #, c-format
msgid "%s: Filename has an unknown suffix, skipping" msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: El nombre de fichero tiene un sufijo desconocido, se salta" msgstr "%s: El nombre de fichero tiene un sufijo desconocido, se salta"
#: src/xz/suffix.c:186 #: src/xz/suffix.c:181
#, c-format #, c-format
msgid "%s: File already has `%s' suffix, skipping" msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: El fichero ya tiene un sufijo `%s', se salta" msgstr "%s: El fichero ya tiene un sufijo `%s', se salta"
#: src/xz/suffix.c:402 #: src/xz/suffix.c:388
#, c-format #, c-format
msgid "%s: Invalid filename suffix" msgid "%s: Invalid filename suffix"
msgstr "%s: Sufijo de nombre de fichero inválido" 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" msgid "Unknown error"
msgstr "Error desconocido" 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: " #~ msgid "Memory usage limit for compression: "
#~ msgstr "Límite de uso de memoria para compresión: " #~ 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. # Croatian translation of xz.
# This file is put in the public domain. # 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 "" msgid ""
msgstr "" 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" "Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-12-03 00:34+0800\n" "POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2022-12-02 19:30-0800\n" "PO-Revision-Date: 2023-07-20 09:23+0200\n"
"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n" "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n" "Language-Team: Croatian <lokalizacija@linux.hr>\n"
"Language: hr\n" "Language: hr\n"
@ -16,53 +16,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "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" "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-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 #, c-format
msgid "%s: Invalid argument to --block-list" msgid "%s: Invalid argument to --block-list"
msgstr "%s: nevaljani argument za --block-list" msgstr "%s: nevaljani argument za --block-list"
#: src/xz/args.c:74 #: src/xz/args.c:87
#, c-format #, c-format
msgid "%s: Too many arguments to --block-list" msgid "%s: Too many arguments to --block-list"
msgstr "%s: Previše argumenata za --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" 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" 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 #, c-format
msgid "%s: Unknown file format type" msgid "%s: Unknown file format type"
msgstr "%s: Nepoznati tip formata datoteke" 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 #, c-format
msgid "%s: Unsupported integrity check type" msgid "%s: Unsupported integrity check type"
msgstr "%s: Nepodržani tip provjere integriteta" 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'." msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Samo jednu datoteku smijete navesti uz opcije „--files” ili „--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 #, c-format
msgid "The environment variable %s contains too many arguments" msgid "The environment variable %s contains too many arguments"
msgstr "Varijabla okoline %s sadrži previše argumenata" 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" msgid "Compression support was disabled at build time"
msgstr "Tijekom izrade programa onemogućena je podrška za kompresiju" 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" msgid "Decompression support was disabled at build time"
msgstr "Tijekom izrade programa onemogućena je podrška za dekompresiju" 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" msgid "Compression of lzip files (.lz) is not supported"
msgstr "Kompresija lzip datoteka (.lz) nije podržana" 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 #: src/xz/coder.c:115
msgid "Maximum number of filters is four" msgid "Maximum number of filters is four"
msgstr "Moguće je najviše do četiri filtara" 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" msgid "Error creating a pipe: %s"
msgstr "Greška pri stvaranju cijevi: %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" msgid "Failed to enable the sandbox"
msgstr "Nije uspjelo omogućiti sandbox" msgstr "Nije uspjelo omogućiti sandbox"
#: src/xz/file_io.c:277 #: src/xz/file_io.c:294
#, c-format #, c-format
msgid "%s: poll() failed: %s" msgid "%s: poll() failed: %s"
msgstr "%s: poll() nije uspjela: %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 #. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously #. of the original file, and in that case it obviously
#. shouldn't be removed. #. shouldn't be removed.
#: src/xz/file_io.c:344 #: src/xz/file_io.c:361
#, c-format #, c-format
msgid "%s: File seems to have been moved, not removing" msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Izgleda da je datoteka pomaknuta -- ne briše se" 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 #, c-format
msgid "%s: Cannot remove: %s" msgid "%s: Cannot remove: %s"
msgstr "%s: Brisanje nije moguće: %s" msgstr "%s: Brisanje nije moguće: %s"
#: src/xz/file_io.c:377 #: src/xz/file_io.c:394
#, c-format #, c-format
msgid "%s: Cannot set the file owner: %s" msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Promijeniti vlasnika datoteke nije moguće: %s" msgstr "%s: Promijeniti vlasnika datoteke nije moguće: %s"
#: src/xz/file_io.c:390 #: src/xz/file_io.c:407
#, c-format #, c-format
msgid "%s: Cannot set the file group: %s" msgid "%s: Cannot set the file group: %s"
msgstr "%s: Promijeniti grupu datoteke nije moguće: %s" msgstr "%s: Promijeniti grupu datoteke nije moguće: %s"
#: src/xz/file_io.c:409 #: src/xz/file_io.c:426
#, c-format #, c-format
msgid "%s: Cannot set the file permissions: %s" msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Nije moguće postaviti prava dostupa: %s" msgstr "%s: Nije moguće postaviti prava dostupa: %s"
#: src/xz/file_io.c:535 #: src/xz/file_io.c:552
#, c-format #, c-format
msgid "Error getting the file status flags from standard input: %s" msgid "Error getting the file status flags from standard input: %s"
msgstr "Greška pri dobavljanju statusnih flagova datoteke iz standardnog ulaza: %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 #, c-format
msgid "%s: Is a symbolic link, skipping" msgid "%s: Is a symbolic link, skipping"
msgstr "%s: To je simbolička poveznica, preskačemo" msgstr "%s: To je simbolička poveznica, preskačemo"
#: src/xz/file_io.c:684 #: src/xz/file_io.c:701
#, c-format #, c-format
msgid "%s: Is a directory, skipping" msgid "%s: Is a directory, skipping"
msgstr "%s: To je direktorij, preskačemo" msgstr "%s: To je direktorij, preskačemo"
#: src/xz/file_io.c:690 #: src/xz/file_io.c:707
#, c-format #, c-format
msgid "%s: Not a regular file, skipping" msgid "%s: Not a regular file, skipping"
msgstr "%s: To nije regularna datoteka, preskačemo" msgstr "%s: To nije regularna datoteka, preskačemo"
#: src/xz/file_io.c:707 #: src/xz/file_io.c:724
#, c-format #, c-format
msgid "%s: File has setuid or setgid bit set, skipping" msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Datoteka ima postavljen setuid ili setgid bit, preskačemo" 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 #, c-format
msgid "%s: File has sticky bit set, skipping" msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Datoteka ima postavljen sticky bit, preskačemo" msgstr "%s: Datoteka ima postavljen sticky bit, preskačemo"
#: src/xz/file_io.c:721 #: src/xz/file_io.c:738
#, c-format #, c-format
msgid "%s: Input file has more than one hard link, skipping" msgid "%s: Input file has more than one hard link, skipping"
msgstr "%s: Ulazna datoteka ima više od jedne tvrde poveznice, preskačemo" 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" msgid "Empty filename, skipping"
msgstr "Prazna datoteka, preskačemo" msgstr "Prazna datoteka, preskačemo"
#: src/xz/file_io.c:817 #: src/xz/file_io.c:834
#, c-format #, c-format
msgid "Error restoring the status flags to standard input: %s" msgid "Error restoring the status flags to standard input: %s"
msgstr "Greška pri vraćanju statusnih flagova na standardni ulaz: %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 #, c-format
msgid "Error getting the file status flags from standard output: %s" msgid "Error getting the file status flags from standard output: %s"
msgstr "Greška pri dobavljanju statusnih flagova datoteke iz standardnog izlazu: %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 #, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s" msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Greška pri vraćanju O_APPEND flagova na standardni izlaz: %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 #, c-format
msgid "%s: Closing the file failed: %s" msgid "%s: Closing the file failed: %s"
msgstr "%s: Nije uspjelo zatvoriti datoteku: %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 #, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s" 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" 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 #, c-format
msgid "%s: Read error: %s" msgid "%s: Read error: %s"
msgstr "%s: Greška pri čitanju: %s" msgstr "%s: Greška pri čitanju: %s"
#: src/xz/file_io.c:1222 #: src/xz/file_io.c:1239
#, c-format #, c-format
msgid "%s: Error seeking the file: %s" msgid "%s: Error seeking the file: %s"
msgstr "%s: Greška pozicioniranja u datoteci: %s" msgstr "%s: Greška pozicioniranja u datoteci: %s"
#: src/xz/file_io.c:1246 #: src/xz/file_io.c:1263
#, c-format #, c-format
msgid "%s: Unexpected end of file" msgid "%s: Unexpected end of file"
msgstr "%s: Neočekivani kraj datoteke" msgstr "%s: Neočekivani kraj datoteke"
#: src/xz/file_io.c:1305 #: src/xz/file_io.c:1322
#, c-format #, c-format
msgid "%s: Write error: %s" msgid "%s: Write error: %s"
msgstr "%s: Greška pri pisanju: %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 #. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to #. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz". #. 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" msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr " Tok Blok Komprimirano Dekomprimir Omjer Kontr Datoteka" 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" msgid "Yes"
msgstr "Da" msgstr "Da"
#: src/xz/list.c:1025 src/xz/list.c:1203 #: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No" msgid "No"
msgstr "Ne" msgstr "Ne"
#: src/xz/list.c:1027 src/xz/list.c:1205 #: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format #, c-format
msgid " Minimum XZ Utils version: %s\n" msgid " Minimum XZ Utils version: %s\n"
msgstr " Potrebna je inačica XY Utils: %s ili viša\n" msgstr " Potrebna je inačica XY Utils: %s ili viša\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this #. 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". #. 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 #, c-format
msgid "%s file\n" msgid "%s file\n"
msgid_plural "%s files\n" msgid_plural "%s files\n"
@ -503,15 +518,15 @@ msgstr[0] "%s datoteka\n"
msgstr[1] "%s datoteke\n" msgstr[1] "%s datoteke\n"
msgstr[2] "%s datoteka\n" msgstr[2] "%s datoteka\n"
#: src/xz/list.c:1191 #: src/xz/list.c:1192
msgid "Totals:" msgid "Totals:"
msgstr "Ukupno:" msgstr "Ukupno:"
#: src/xz/list.c:1269 #: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)" msgid "--list works only on .xz files (--format=xz or --format=auto)"
msgstr "--list radi samo sa .xz datoteke (--format=xz ili --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" msgid "--list does not support reading from standard input"
msgstr "--list ne podržava čitanje iz standardnog izlaza" 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: ". #. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs #. This is a translatable string because French needs
#. a space before a colon. #. a space before a colon.
#: src/xz/message.c:725 #: src/xz/message.c:670 src/xz/message.c:725
#, c-format #, c-format
msgid "%s: " msgid "%s: "
msgstr "%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)" msgid "Internal error (bug)"
msgstr "Interna greška (bug)" msgstr "Interna greška (bug)"
#: src/xz/message.c:795 #: src/xz/message.c:804
msgid "Cannot establish signal handlers" msgid "Cannot establish signal handlers"
msgstr "Nije moguće uspostaviti rukovatelje signala" 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" msgid "No integrity check; not verifying file integrity"
msgstr "Nema provjere integriteta -- ne provjeravamo integritet datoteke" 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" msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Nepodržani tip provjere integriteta -- ne provjeravamo integritet datoteke" 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" msgid "Memory usage limit reached"
msgstr "Dostignuto je ograničenje za korištenje memorije" msgstr "Dostignuto je ograničenje za korištenje memorije"
#: src/xz/message.c:817 #: src/xz/message.c:826
msgid "File format not recognized" msgid "File format not recognized"
msgstr "Format datoteke nije prepoznat" msgstr "Format datoteke nije prepoznat"
#: src/xz/message.c:820 #: src/xz/message.c:829
msgid "Unsupported options" msgid "Unsupported options"
msgstr "Nepodržane opcije" msgstr "Nepodržane opcije"
#: src/xz/message.c:823 #: src/xz/message.c:832
msgid "Compressed data is corrupt" msgid "Compressed data is corrupt"
msgstr "Komprimirani podaci su oštećeni" msgstr "Komprimirani podaci su oštećeni"
#: src/xz/message.c:826 #: src/xz/message.c:835
msgid "Unexpected end of input" msgid "Unexpected end of input"
msgstr "Neočekivani kraj ulaznih podataka" msgstr "Neočekivani kraj ulaznih podataka"
#: src/xz/message.c:868 #: src/xz/message.c:877
#, c-format #, c-format
msgid "%s MiB of memory is required. The limiter is disabled." msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "%s MiB memorije je potrebno. Ograničenje je onemogućeno." msgstr "%s MiB memorije je potrebno. Ograničenje je onemogućeno."
#: src/xz/message.c:896 #: src/xz/message.c:905
#, c-format #, c-format
msgid "%s MiB of memory is required. The limit is %s." msgid "%s MiB of memory is required. The limit is %s."
msgstr "%s MiB memorije je potrebno. Ograničenje je %s." msgstr "%s MiB memorije je potrebno. Ograničenje je %s."
#: src/xz/message.c:915 #: src/xz/message.c:924
#, c-format #, c-format
msgid "%s: Filter chain: %s\n" msgid "%s: Filter chain: %s\n"
msgstr "%s: Lanac filtara: %s\n" msgstr "%s: Lanac filtara: %s\n"
#: src/xz/message.c:926 #: src/xz/message.c:935
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Pokušajte s „`%s --help“ za pomoć i više informacija." msgstr "Pokušajte s „`%s --help“ za pomoć i više informacija."
#: src/xz/message.c:952 #: src/xz/message.c:961
#, c-format #, c-format
msgid "" msgid ""
"Usage: %s [OPTION]... [FILE]...\n" "Usage: %s [OPTION]... [FILE]...\n"
@ -614,15 +629,15 @@ msgstr ""
"Komprimira ili dekomprimira DATOTEKE u .xz formatu.\n" "Komprimira ili dekomprimira DATOTEKE u .xz formatu.\n"
"\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" 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" msgid " Operation mode:\n"
msgstr " Način rada:\n" msgstr " Način rada:\n"
#: src/xz/message.c:966 #: src/xz/message.c:975
msgid "" msgid ""
" -z, --compress force compression\n" " -z, --compress force compression\n"
" -d, --decompress force decompression\n" " -d, --decompress force decompression\n"
@ -634,7 +649,7 @@ msgstr ""
" -t, --test testira integritet komprimirane datoteke\n" " -t, --test testira integritet komprimirane datoteke\n"
" -l, --list ispiše podatke o .xz datotekama" " -l, --list ispiše podatke o .xz datotekama"
#: src/xz/message.c:972 #: src/xz/message.c:981
msgid "" msgid ""
"\n" "\n"
" Operation modifiers:\n" " Operation modifiers:\n"
@ -642,7 +657,7 @@ msgstr ""
"\n" "\n"
" Modifikatori načina rada:\n" " Modifikatori načina rada:\n"
#: src/xz/message.c:975 #: src/xz/message.c:984
msgid "" msgid ""
" -k, --keep keep (don't delete) input files\n" " -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\n" " -f, --force force overwrite of output file and (de)compress links\n"
@ -650,11 +665,11 @@ msgid ""
msgstr "" msgstr ""
" -k, --keep zadrži (ne briše) navedene ulazne datoteke\n" " -k, --keep zadrži (ne briše) navedene ulazne datoteke\n"
" -f, --force piše preko izlaznih datoteka i\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" " -c, --stdout piše na standardni izlaz i ne briše\n"
" ulazne datoteke" " ulazne datoteke"
#: src/xz/message.c:984 #: src/xz/message.c:993
msgid "" msgid ""
" --single-stream decompress only the first stream, and silently\n" " --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data" " ignore possible remaining input data"
@ -662,7 +677,7 @@ msgstr ""
" --single-stream dekomprimira samo prvi tok i nijemo\n" " --single-stream dekomprimira samo prvi tok i nijemo\n"
" zanemari moguće preostale ulazne podatke" " zanemari moguće preostale ulazne podatke"
#: src/xz/message.c:987 #: src/xz/message.c:996
msgid "" msgid ""
" --no-sparse do not create sparse files when decompressing\n" " --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n" " -S, --suffix=.SUF use the suffix `.SUF' on compressed files\n"
@ -679,7 +694,7 @@ msgstr ""
" sa znakom novog reda\n" " sa znakom novog reda\n"
" --files0[=DATOTEKA] kao --files, ali popis datoteka završi s NULL znakom" " --files0[=DATOTEKA] kao --files, ali popis datoteka završi s NULL znakom"
#: src/xz/message.c:996 #: src/xz/message.c:1005
msgid "" msgid ""
"\n" "\n"
" Basic file format and compression options:\n" " Basic file format and compression options:\n"
@ -687,7 +702,7 @@ msgstr ""
"\n" "\n"
" Osnovne opcije za format datoteka i kompresiju:\n" " Osnovne opcije za format datoteka i kompresiju:\n"
#: src/xz/message.c:998 #: src/xz/message.c:1007
msgid "" msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n" " -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\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" " -C, --check=KONTROLA tip provjere integriteta: „none” (koristite s oprezom),\n"
" „crc32”, „crc64” (zadano), ili „sha256”" " „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" msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check ne verificira provjeru integriteta pri dekompresiji" msgstr " --ignore-check ne verificira provjeru integriteta pri dekompresiji"
#: src/xz/message.c:1007 #: src/xz/message.c:1016
msgid "" msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n" " -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!" " 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" " -0 ... -9 pretpostavke za kompresiju; zadano je 6; uzmite u obzir\n"
" upotrebu memorije za (de)kompresor prije upotrebe 7-9!" " upotrebu memorije za (de)kompresor prije upotrebe 7-9!"
#: src/xz/message.c:1011 #: src/xz/message.c:1020
msgid "" msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n" " -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements" " 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" " -e, --extreme pokuša poboljšati omjer kompresije koristeći više CPU\n"
" vremena; ne utječe na potrebnu memoriju za dekompresiju" " vremena; ne utječe na potrebnu memoriju za dekompresiju"
#: src/xz/message.c:1015 #: src/xz/message.c:1024
msgid "" msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " -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" " 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" " -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" " za BROJ koristi se toliko dretvi koliko CPU ima jezgri"
#: src/xz/message.c:1020 #: src/xz/message.c:1029
msgid "" msgid ""
" --block-size=SIZE\n" " --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\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" " ulaznih podataka; ovo rabite za postavljanje\n"
" veličine bloka za kompresiju s dretvama" " veličine bloka za kompresiju s dretvama"
#: src/xz/message.c:1024 #: src/xz/message.c:1033
msgid "" msgid ""
" --block-list=SIZES\n" " --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\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 nekomprimiranih ulaznih podataka;\n"
" VELIČINE su zarezom odvojene" " VELIČINE su zarezom odvojene"
#: src/xz/message.c:1028 #: src/xz/message.c:1037
msgid "" msgid ""
" --flush-timeout=TIMEOUT\n" " --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\n" " when compressing, if more than TIMEOUT milliseconds has\n"
@ -759,7 +774,7 @@ msgstr ""
" čitanje bi blokiralo ulaz, svi podaci na\n" " čitanje bi blokiralo ulaz, svi podaci na\n"
" čekanju se isprazne iz kodera na izlaz" " čekanju se isprazne iz kodera na izlaz"
#: src/xz/message.c:1034 #: src/xz/message.c:1043
#, no-c-format #, no-c-format
msgid "" msgid ""
" --memlimit-compress=LIMIT\n" " --memlimit-compress=LIMIT\n"
@ -777,7 +792,7 @@ msgstr ""
" dekompresiju, dretvama dekompresiju, ili sve ovo;\n" " dekompresiju, dretvama dekompresiju, ili sve ovo;\n"
" GRANICA je u bajtima, % RAM, ili 0 za zadano" " GRANICA je u bajtima, % RAM, ili 0 za zadano"
#: src/xz/message.c:1043 #: src/xz/message.c:1052
msgid "" msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n" " --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards" " give an error instead of adjusting the settings downwards"
@ -786,7 +801,7 @@ msgstr ""
" upotrebe memorije, završi s greškom umjesto da\n" " upotrebe memorije, završi s greškom umjesto da\n"
" prilagodi postavke shodno ograničenju memorije" " prilagodi postavke shodno ograničenju memorije"
#: src/xz/message.c:1049 #: src/xz/message.c:1058
msgid "" msgid ""
"\n" "\n"
" Custom filter chain for compression (alternative for using presets):" " Custom filter chain for compression (alternative for using presets):"
@ -794,7 +809,7 @@ msgstr ""
"\n" "\n"
" Prilagođeni lanac filtara za kompresiju (alternativa korištenju pretpostavki):" " Prilagođeni lanac filtara za kompresiju (alternativa korištenju pretpostavki):"
#: src/xz/message.c:1058 #: src/xz/message.c:1067
msgid "" msgid ""
"\n" "\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\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" " mf=IME podudarač (hc3, hc4, bt2, bt3, bt4; bt4)\n"
" depth=BROJ max. dubina traženja; 0=automatski (default)" " depth=BROJ max. dubina traženja; 0=automatski (default)"
#: src/xz/message.c:1073 #: src/xz/message.c:1082
msgid "" msgid ""
"\n" "\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n" " --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\n"
@ -847,7 +862,7 @@ msgstr ""
" Valjane OPCIJE za BCJ filtre:\n" " Valjane OPCIJE za BCJ filtre:\n"
" start=BROJ početni offset za konverzije (zadano=0)" " start=BROJ početni offset za konverzije (zadano=0)"
#: src/xz/message.c:1086 #: src/xz/message.c:1095
msgid "" msgid ""
"\n" "\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\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" " dist=BROJ razmak između bajtova koji se oduzimaju\n"
" jedan od drugog (1-256; 1)" " jedan od drugog (1-256; 1)"
#: src/xz/message.c:1094 #: src/xz/message.c:1103
msgid "" msgid ""
"\n" "\n"
" Other options:\n" " Other options:\n"
@ -868,7 +883,7 @@ msgstr ""
"\n" "\n"
" Ostale opcije:\n" " Ostale opcije:\n"
#: src/xz/message.c:1097 #: src/xz/message.c:1106
msgid "" msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose" " -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" " -q, --quiet izostavi upozorenja; „-qq” izostavi i greške\n"
" -v, --verbose opširnije informira; „=vv” još više informira" " -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" msgid " -Q, --no-warn make warnings not affect the exit status"
msgstr " -Q, --no-warn upozorenja nemaju utjecaja na status završetka (izlaza)" 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)" msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot poruke u strojnom formatu (korisno za skripte)" msgstr " --robot poruke u strojnom formatu (korisno za skripte)"
#: src/xz/message.c:1107 #: src/xz/message.c:1116
msgid "" msgid ""
" --info-memory display the total amount of RAM and the currently active\n" " --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit" " memory usage limits, and exit"
@ -892,7 +907,7 @@ msgstr ""
" --info-memory pokaže ukupnu količinu RAM-a i trenutno\n" " --info-memory pokaže ukupnu količinu RAM-a i trenutno\n"
" aktivna ograničenja korištenja memorije, pa iziđe" " aktivna ograničenja korištenja memorije, pa iziđe"
#: src/xz/message.c:1110 #: src/xz/message.c:1119
msgid "" msgid ""
" -h, --help display the short help (lists only the basic options)\n" " -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit" " -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, --help prikaže kratku pomoć (izlista samo osnovne opcije)\n"
" -H, --long-help prikaže ovu dugačku pomoć i iziđe" " -H, --long-help prikaže ovu dugačku pomoć i iziđe"
#: src/xz/message.c:1114 #: src/xz/message.c:1123
msgid "" msgid ""
" -h, --help display this short help and exit\n" " -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)" " -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, --help prikaže ovu kratku pomoć i iziđe\n"
" -H, --long-help prikaže dugačku pomoć (izlista i napredne opcije)" " -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" msgid " -V, --version display the version number and exit"
msgstr " -V, --version prikaže informacije o inačici i iziđe" msgstr " -V, --version prikaže informacije o inačici i iziđe"
#: src/xz/message.c:1121 #: src/xz/message.c:1130
msgid "" msgid ""
"\n" "\n"
"With no FILE, or when FILE is -, read standard input.\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 #. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW #. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks. #. address for translation bugs. Thanks.
#: src/xz/message.c:1127 #: src/xz/message.c:1136
#, c-format #, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n" msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "Greške prijavite na <%s> (na engleskom ili finskom).\n" msgstr "Greške prijavite na <%s> (na engleskom ili finskom).\n"
#: src/xz/message.c:1129 #: src/xz/message.c:1138
#, c-format #, c-format
msgid "%s home page: <%s>\n" msgid "%s home page: <%s>\n"
msgstr "" msgstr ""
"%s matična mrežna stranica: <%s>\n" "%s matična mrežna stranica: <%s>\n"
"Pogreške u prijevodu i vaše prijedloge javite na <lokalizacija@linux.hr>.\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." msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "OVO JE RAZVOJNA INAČICA I NIJE NAMIJENJENA ZA PROIZVODNJU." 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" msgid "The sum of lc and lp must not exceed 4"
msgstr "Zbroj lc i lp ne smije biti veći od 4" msgstr "Zbroj lc i lp ne smije biti veći od 4"
#: src/xz/suffix.c:134 src/xz/suffix.c:265 #: src/xz/suffix.c:160
#, 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
#, c-format #, c-format
msgid "%s: Filename has an unknown suffix, skipping" msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Ime datoteke nema poznati sufiks, preskačemo" msgstr "%s: Ime datoteke nema poznati sufiks, preskačemo"
#: src/xz/suffix.c:186 #: src/xz/suffix.c:181
#, c-format #, c-format
msgid "%s: File already has `%s' suffix, skipping" msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Datoteka već ima „%s” sufiks, preskačemo" msgstr "%s: Datoteka već ima „%s” sufiks, preskačemo"
#: src/xz/suffix.c:402 #: src/xz/suffix.c:388
#, c-format #, c-format
msgid "%s: Invalid filename suffix" msgid "%s: Invalid filename suffix"
msgstr "%s: Nevaljani sufiks imena datoteke" msgstr "%s: Nevaljani sufiks imena datoteke"

332
po/ko.po
View File

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

327
po/pl.po
View File

@ -1,13 +1,13 @@
# Polish translation for xz. # Polish translation for xz.
# This file is put in the public domain. # 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 "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: xz 5.4.0-pre1\n" "Project-Id-Version: xz 5.4.4-pre1\n"
"Report-Msgid-Bugs-To: lasse.collin@tukaani.org\n" "Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-11-09 19:59+0200\n" "POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2022-11-10 18:02+0100\n" "PO-Revision-Date: 2023-07-19 21:30+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n" "Language: pl\n"
@ -17,51 +17,66 @@ msgstr ""
"X-Bugs: Report translation errors to the Language-Team address.\n" "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" "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 #, c-format
msgid "%s: Invalid argument to --block-list" msgid "%s: Invalid argument to --block-list"
msgstr "%s: Błędny argument dla --block-list" msgstr "%s: Błędny argument dla --block-list"
#: src/xz/args.c:74 #: src/xz/args.c:87
#, c-format #, c-format
msgid "%s: Too many arguments to --block-list" msgid "%s: Too many arguments to --block-list"
msgstr "%s: Zbyt dużo argumentów dla --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" 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" 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 #, c-format
msgid "%s: Unknown file format type" msgid "%s: Unknown file format type"
msgstr "%s: Nieznany typ formatu pliku" 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 #, c-format
msgid "%s: Unsupported integrity check type" msgid "%s: Unsupported integrity check type"
msgstr "%s: Nieobsługiwany typ kontroli spójności" 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'." msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Wraz z opcją `--files' lub `--files0' można podać tylko jeden plik." 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 #, c-format
msgid "The environment variable %s contains too many arguments" msgid "The environment variable %s contains too many arguments"
msgstr "Zmienna środowiskowa %s zawiera zbyt dużo argumentów" 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" msgid "Compression support was disabled at build time"
msgstr "Obsługa kompresji została wyłączona na etapie budowania" 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" msgid "Decompression support was disabled at build time"
msgstr "Obsługa dekompresji została wyłączona na etapie budowania" 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" msgid "Compression of lzip files (.lz) is not supported"
msgstr "Kompresja plików lzip (.lz) nie jest osbługiwana" 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 #: src/xz/coder.c:115
msgid "Maximum number of filters is four" msgid "Maximum number of filters is four"
msgstr "Maksymalna liczba filtrów to cztery" 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" msgid "Error creating a pipe: %s"
msgstr "Błąd tworzenia potoku: %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" msgid "Failed to enable the sandbox"
msgstr "Nie udało się włączyć piaskownicy" msgstr "Nie udało się włączyć piaskownicy"
#: src/xz/file_io.c:277 #: src/xz/file_io.c:294
#, c-format #, c-format
msgid "%s: poll() failed: %s" msgid "%s: poll() failed: %s"
msgstr "%s: poll() nie powiodło się: %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 #. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously #. of the original file, and in that case it obviously
#. shouldn't be removed. #. shouldn't be removed.
#: src/xz/file_io.c:344 #: src/xz/file_io.c:361
#, c-format #, c-format
msgid "%s: File seems to have been moved, not removing" msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Plik wygląda na przeniesiony, nie zostanie usunięty" 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 #, c-format
msgid "%s: Cannot remove: %s" msgid "%s: Cannot remove: %s"
msgstr "%s: Nie można usunąć: %s" msgstr "%s: Nie można usunąć: %s"
#: src/xz/file_io.c:377 #: src/xz/file_io.c:394
#, c-format #, c-format
msgid "%s: Cannot set the file owner: %s" msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Nie można ustawić właściciela pliku: %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 #, c-format
msgid "%s: Cannot set the file group: %s" msgid "%s: Cannot set the file group: %s"
msgstr "%s: Nie można ustawić grupy pliku: %s" msgstr "%s: Nie można ustawić grupy pliku: %s"
#: src/xz/file_io.c:409 #: src/xz/file_io.c:426
#, c-format #, c-format
msgid "%s: Cannot set the file permissions: %s" msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Nie można ustawić uprawnień pliku: %s" msgstr "%s: Nie można ustawić uprawnień pliku: %s"
#: src/xz/file_io.c:535 #: src/xz/file_io.c:552
#, c-format #, c-format
msgid "Error getting the file status flags from standard input: %s" msgid "Error getting the file status flags from standard input: %s"
msgstr "Błąd podczas pobierania flag stanu pliku ze standardowego wejścia: %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 #, c-format
msgid "%s: Is a symbolic link, skipping" msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Jest dowiązaniem symbolicznym, pominięto" msgstr "%s: Jest dowiązaniem symbolicznym, pominięto"
#: src/xz/file_io.c:684 #: src/xz/file_io.c:701
#, c-format #, c-format
msgid "%s: Is a directory, skipping" msgid "%s: Is a directory, skipping"
msgstr "%s: Jest katalogiem, pominięto" msgstr "%s: Jest katalogiem, pominięto"
#: src/xz/file_io.c:690 #: src/xz/file_io.c:707
#, c-format #, c-format
msgid "%s: Not a regular file, skipping" msgid "%s: Not a regular file, skipping"
msgstr "%s: Nie jest zwykłym plikiem, pominięto" msgstr "%s: Nie jest zwykłym plikiem, pominięto"
#: src/xz/file_io.c:707 #: src/xz/file_io.c:724
#, c-format #, c-format
msgid "%s: File has setuid or setgid bit set, skipping" msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Plik ma ustawiony bit setuid lub setgid, pominięto" 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 #, c-format
msgid "%s: File has sticky bit set, skipping" msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Plik ma ustawiony bit sticky, pominięto" msgstr "%s: Plik ma ustawiony bit sticky, pominięto"
#: src/xz/file_io.c:721 #: src/xz/file_io.c:738
#, c-format #, c-format
msgid "%s: Input file has more than one hard link, skipping" 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" 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" msgid "Empty filename, skipping"
msgstr "Pusta nazwa pliku, pominięto" msgstr "Pusta nazwa pliku, pominięto"
#: src/xz/file_io.c:817 #: src/xz/file_io.c:834
#, c-format #, c-format
msgid "Error restoring the status flags to standard input: %s" msgid "Error restoring the status flags to standard input: %s"
msgstr "Błąd podczas odtwarzania flag stanu dla standardowego wejścia: %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 #, c-format
msgid "Error getting the file status flags from standard output: %s" msgid "Error getting the file status flags from standard output: %s"
msgstr "Błąd podczas pobierania flag stanu pliku ze standardowego wyjścia: %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 #, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s" msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Błąd podczas odtwarzania flagi O_APPEND dla standardowego wyjścia: %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 #, c-format
msgid "%s: Closing the file failed: %s" msgid "%s: Closing the file failed: %s"
msgstr "%s: Zamknięcie pliku nie powiodło się: %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 #, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s" 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" 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 #, c-format
msgid "%s: Read error: %s" msgid "%s: Read error: %s"
msgstr "%s: Błąd odczytu: %s" msgstr "%s: Błąd odczytu: %s"
#: src/xz/file_io.c:1222 #: src/xz/file_io.c:1239
#, c-format #, c-format
msgid "%s: Error seeking the file: %s" msgid "%s: Error seeking the file: %s"
msgstr "%s: Błąd podczas zmiany pozycji w pliku: %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 #, c-format
msgid "%s: Unexpected end of file" msgid "%s: Unexpected end of file"
msgstr "%s: Nieoczekiwany koniec pliku" msgstr "%s: Nieoczekiwany koniec pliku"
#: src/xz/file_io.c:1305 #: src/xz/file_io.c:1322
#, c-format #, c-format
msgid "%s: Write error: %s" msgid "%s: Write error: %s"
msgstr "%s: Błąd zapisu: %s" msgstr "%s: Błąd zapisu: %s"
#: src/xz/hardware.c:225 #: src/xz/hardware.c:238
msgid "Disabled" msgid "Disabled"
msgstr "Wyłączony" msgstr "Wyłączony"
#: src/xz/hardware.c:256 #: src/xz/hardware.c:269
msgid "Amount of physical memory (RAM):" msgid "Amount of physical memory (RAM):"
msgstr "Rozmiar pamięci fizycznej (RAM):" msgstr "Rozmiar pamięci fizycznej (RAM):"
#: src/xz/hardware.c:257 #: src/xz/hardware.c:270
msgid "Number of processor threads:" msgid "Number of processor threads:"
msgstr "Liczba wątków procesora:" msgstr "Liczba wątków procesora:"
#: src/xz/hardware.c:258 #: src/xz/hardware.c:271
msgid "Compression:" msgid "Compression:"
msgstr "Kompresja:" msgstr "Kompresja:"
#: src/xz/hardware.c:259 #: src/xz/hardware.c:272
msgid "Decompression:" msgid "Decompression:"
msgstr "Dekompresja:" msgstr "Dekompresja:"
#: src/xz/hardware.c:260 #: src/xz/hardware.c:273
msgid "Multi-threaded decompression:" msgid "Multi-threaded decompression:"
msgstr "Dekompresja wielowątkowa:" msgstr "Dekompresja wielowątkowa:"
#: src/xz/hardware.c:261 #: src/xz/hardware.c:274
msgid "Default for -T0:" msgid "Default for -T0:"
msgstr "Domyślnie dla -T0:" msgstr "Domyślnie dla -T0:"
#: src/xz/hardware.c:279 #: src/xz/hardware.c:292
msgid "Hardware information:" msgid "Hardware information:"
msgstr "Informacje o sprzęcie:" msgstr "Informacje o sprzęcie:"
#: src/xz/hardware.c:286 #: src/xz/hardware.c:299
msgid "Memory usage limits:" msgid "Memory usage limits:"
msgstr "Limity użycia pamięci" msgstr "Limity użycia pamięci"
#: src/xz/list.c:65 #: src/xz/list.c:68
msgid "Streams:" msgid "Streams:"
msgstr "Strumienie:" msgstr "Strumienie:"
#: src/xz/list.c:66 #: src/xz/list.c:69
msgid "Blocks:" msgid "Blocks:"
msgstr "Bloki:" msgstr "Bloki:"
#: src/xz/list.c:67 #: src/xz/list.c:70
msgid "Compressed size:" msgid "Compressed size:"
msgstr "Rozmiar spakowany:" msgstr "Rozmiar spakowany:"
#: src/xz/list.c:68 #: src/xz/list.c:71
msgid "Uncompressed size:" msgid "Uncompressed size:"
msgstr "Rozmiar rozpakowany:" msgstr "Rozmiar rozpakowany:"
#: src/xz/list.c:69 #: src/xz/list.c:72
msgid "Ratio:" msgid "Ratio:"
msgstr "Współczynnik:" msgstr "Współczynnik:"
#: src/xz/list.c:70 #: src/xz/list.c:73
msgid "Check:" msgid "Check:"
msgstr "Kontrola spójności:" msgstr "Kontrola spójności:"
#: src/xz/list.c:71 #: src/xz/list.c:74
msgid "Stream Padding:" msgid "Stream Padding:"
msgstr "Wyrównanie strumienia:" msgstr "Wyrównanie strumienia:"
#: src/xz/list.c:72 #: src/xz/list.c:75
msgid "Memory needed:" msgid "Memory needed:"
msgstr "Wymagana pamięć:" msgstr "Wymagana pamięć:"
#: src/xz/list.c:73 #: src/xz/list.c:76
msgid "Sizes in headers:" msgid "Sizes in headers:"
msgstr "Rozmiar w nagłówkach:" msgstr "Rozmiar w nagłówkach:"
#: src/xz/list.c:76 #: src/xz/list.c:79
msgid "Number of files:" msgid "Number of files:"
msgstr "Liczba plików:" msgstr "Liczba plików:"
#: src/xz/list.c:119 #: src/xz/list.c:122
msgid "Stream" msgid "Stream"
msgstr "Strumień" msgstr "Strumień"
#: src/xz/list.c:120 #: src/xz/list.c:123
msgid "Block" msgid "Block"
msgstr "Blok" msgstr "Blok"
#: src/xz/list.c:121 #: src/xz/list.c:124
msgid "Blocks" msgid "Blocks"
msgstr "Bloki" msgstr "Bloki"
#: src/xz/list.c:122 #: src/xz/list.c:125
msgid "CompOffset" msgid "CompOffset"
msgstr "Offset spak." msgstr "Offset spak."
#: src/xz/list.c:123 #: src/xz/list.c:126
msgid "UncompOffset" msgid "UncompOffset"
msgstr "Offset rozp." msgstr "Offset rozp."
#: src/xz/list.c:124 #: src/xz/list.c:127
msgid "CompSize" msgid "CompSize"
msgstr "Rozm.spak." msgstr "Rozm.spak."
#: src/xz/list.c:125 #: src/xz/list.c:128
msgid "UncompSize" msgid "UncompSize"
msgstr "Rozm.rozp." msgstr "Rozm.rozp."
#: src/xz/list.c:126 #: src/xz/list.c:129
msgid "TotalSize" msgid "TotalSize"
msgstr "Rozm.całk." msgstr "Rozm.całk."
#: src/xz/list.c:127 #: src/xz/list.c:130
msgid "Ratio" msgid "Ratio"
msgstr "Wsp." msgstr "Wsp."
#: src/xz/list.c:128 #: src/xz/list.c:131
msgid "Check" msgid "Check"
msgstr "Kontrola" msgstr "Kontrola"
#: src/xz/list.c:129 #: src/xz/list.c:132
msgid "CheckVal" msgid "CheckVal"
msgstr "S.kontr." msgstr "S.kontr."
#: src/xz/list.c:130 #: src/xz/list.c:133
msgid "Padding" msgid "Padding"
msgstr "Wyrównanie" msgstr "Wyrównanie"
#: src/xz/list.c:131 #: src/xz/list.c:134
msgid "Header" msgid "Header"
msgstr "Nagłówek" msgstr "Nagłówek"
#: src/xz/list.c:132 #: src/xz/list.c:135
msgid "Flags" msgid "Flags"
msgstr "Flagi" msgstr "Flagi"
#: src/xz/list.c:133 #: src/xz/list.c:136
msgid "MemUsage" msgid "MemUsage"
msgstr "Uż.pamięci" msgstr "Uż.pamięci"
#: src/xz/list.c:134 #: src/xz/list.c:137
msgid "Filters" msgid "Filters"
msgstr "Filtry" msgstr "Filtry"
@ -405,7 +420,7 @@ msgstr "Filtry"
#. This string is used in tables. In older xz version this #. This string is used in tables. In older xz version this
#. string was limited to ten columns in a fixed-width font, but #. string was limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore. #. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:166 #: src/xz/list.c:169
msgid "None" msgid "None"
msgstr "Brak" msgstr "Brak"
@ -413,60 +428,60 @@ msgstr "Brak"
#. but the Check ID is known (here 2). In older xz version these #. 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 #. strings were limited to ten columns in a fixed-width font, but
#. nowadays there is no strict length restriction anymore. #. nowadays there is no strict length restriction anymore.
#: src/xz/list.c:172 #: src/xz/list.c:175
msgid "Unknown-2" msgid "Unknown-2"
msgstr "Nieznany-2" msgstr "Nieznany-2"
#: src/xz/list.c:173 #: src/xz/list.c:176
msgid "Unknown-3" msgid "Unknown-3"
msgstr "Nieznany-3" msgstr "Nieznany-3"
#: src/xz/list.c:175 #: src/xz/list.c:178
msgid "Unknown-5" msgid "Unknown-5"
msgstr "Nieznany-5" msgstr "Nieznany-5"
#: src/xz/list.c:176 #: src/xz/list.c:179
msgid "Unknown-6" msgid "Unknown-6"
msgstr "Nieznany-6" msgstr "Nieznany-6"
#: src/xz/list.c:177 #: src/xz/list.c:180
msgid "Unknown-7" msgid "Unknown-7"
msgstr "Nieznany-7" msgstr "Nieznany-7"
#: src/xz/list.c:178 #: src/xz/list.c:181
msgid "Unknown-8" msgid "Unknown-8"
msgstr "Nieznany-8" msgstr "Nieznany-8"
#: src/xz/list.c:179 #: src/xz/list.c:182
msgid "Unknown-9" msgid "Unknown-9"
msgstr "Nieznany-9" msgstr "Nieznany-9"
#: src/xz/list.c:181 #: src/xz/list.c:184
msgid "Unknown-11" msgid "Unknown-11"
msgstr "Nieznany11" msgstr "Nieznany11"
#: src/xz/list.c:182 #: src/xz/list.c:185
msgid "Unknown-12" msgid "Unknown-12"
msgstr "Nieznany12" msgstr "Nieznany12"
#: src/xz/list.c:183 #: src/xz/list.c:186
msgid "Unknown-13" msgid "Unknown-13"
msgstr "Nieznany13" msgstr "Nieznany13"
#: src/xz/list.c:184 #: src/xz/list.c:187
msgid "Unknown-14" msgid "Unknown-14"
msgstr "Nieznany14" msgstr "Nieznany14"
#: src/xz/list.c:185 #: src/xz/list.c:188
msgid "Unknown-15" msgid "Unknown-15"
msgstr "Nieznany15" msgstr "Nieznany15"
#: src/xz/list.c:348 #: src/xz/list.c:351
#, c-format #, c-format
msgid "%s: File is empty" msgid "%s: File is empty"
msgstr "%s: Plik jest pusty" msgstr "%s: Plik jest pusty"
#: src/xz/list.c:353 #: src/xz/list.c:356
#, c-format #, c-format
msgid "%s: Too small to be a valid .xz file" msgid "%s: Too small to be a valid .xz file"
msgstr "%s: Za mały na poprawny plik .xz" 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 #. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to #. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz". #. 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" msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Strum. Bloki Spakowany Rozpakowany Wsp. Kontrola Nazwa pliku" 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" msgid "Yes"
msgstr "Tak" msgstr "Tak"
#: src/xz/list.c:1016 src/xz/list.c:1193 #: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No" msgid "No"
msgstr "Nie" msgstr "Nie"
#: src/xz/list.c:1018 src/xz/list.c:1195 #: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format #, c-format
msgid " Minimum XZ Utils version: %s\n" msgid " Minimum XZ Utils version: %s\n"
msgstr " Minimalna wersja XZ Utils: %s\n" msgstr " Minimalna wersja XZ Utils: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this #. 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". #. 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 #, c-format
msgid "%s file\n" msgid "%s file\n"
msgid_plural "%s files\n" msgid_plural "%s files\n"
@ -502,15 +517,15 @@ msgstr[0] "%s plik\n"
msgstr[1] "%s pliki\n" msgstr[1] "%s pliki\n"
msgstr[2] "%s plików\n" msgstr[2] "%s plików\n"
#: src/xz/list.c:1181 #: src/xz/list.c:1192
msgid "Totals:" msgid "Totals:"
msgstr "Sumarycznie:" msgstr "Sumarycznie:"
#: src/xz/list.c:1259 #: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)" 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)" 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" msgid "--list does not support reading from standard input"
msgstr "--list nie obsługuje odczytu ze standardowego wejścia" 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: ". #. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs #. This is a translatable string because French needs
#. a space before a colon. #. a space before a colon.
#: src/xz/message.c:725 #: src/xz/message.c:670 src/xz/message.c:725
#, c-format #, c-format
msgid "%s: " msgid "%s: "
msgstr "%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)" msgid "Internal error (bug)"
msgstr "Błąd wewnętrzny" msgstr "Błąd wewnętrzny"
#: src/xz/message.c:795 #: src/xz/message.c:804
msgid "Cannot establish signal handlers" msgid "Cannot establish signal handlers"
msgstr "Nie można ustawić obsługi sygnałów" 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" msgid "No integrity check; not verifying file integrity"
msgstr "Brak kontroli spójności; poprawność plików nie będzie weryfikowana" 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" 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" 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" msgid "Memory usage limit reached"
msgstr "Osiągnięto limit użycia pamięci" msgstr "Osiągnięto limit użycia pamięci"
#: src/xz/message.c:817 #: src/xz/message.c:826
msgid "File format not recognized" msgid "File format not recognized"
msgstr "Nie rozpoznany format pliku" msgstr "Nie rozpoznany format pliku"
#: src/xz/message.c:820 #: src/xz/message.c:829
msgid "Unsupported options" msgid "Unsupported options"
msgstr "Nieobsługiwane opcje" msgstr "Nieobsługiwane opcje"
#: src/xz/message.c:823 #: src/xz/message.c:832
msgid "Compressed data is corrupt" msgid "Compressed data is corrupt"
msgstr "Dane skompresowane są uszkodzone" msgstr "Dane skompresowane są uszkodzone"
#: src/xz/message.c:826 #: src/xz/message.c:835
msgid "Unexpected end of input" msgid "Unexpected end of input"
msgstr "Nieoczekiwany koniec wejścia" msgstr "Nieoczekiwany koniec wejścia"
#: src/xz/message.c:868 #: src/xz/message.c:877
#, c-format #, c-format
msgid "%s MiB of memory is required. The limiter is disabled." msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Wymagane jest %s MiB pamięci. Limit jest wyłączony." msgstr "Wymagane jest %s MiB pamięci. Limit jest wyłączony."
#: src/xz/message.c:896 #: src/xz/message.c:905
#, c-format #, c-format
msgid "%s MiB of memory is required. The limit is %s." msgid "%s MiB of memory is required. The limit is %s."
msgstr "Wymagane jest %s MiB pamięci. Limit to %s." msgstr "Wymagane jest %s MiB pamięci. Limit to %s."
#: src/xz/message.c:1070 #: src/xz/message.c:924
#, c-format #, c-format
msgid "%s: Filter chain: %s\n" msgid "%s: Filter chain: %s\n"
msgstr "%s: Łańcuch filtrów: %s\n" msgstr "%s: Łańcuch filtrów: %s\n"
#: src/xz/message.c:1080 #: src/xz/message.c:935
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Polecenie `%s --help' pokaże więcej informacji." msgstr "Polecenie `%s --help' pokaże więcej informacji."
#: src/xz/message.c:1106 #: src/xz/message.c:961
#, c-format #, c-format
msgid "" msgid ""
"Usage: %s [OPTION]... [FILE]...\n" "Usage: %s [OPTION]... [FILE]...\n"
@ -613,17 +628,17 @@ msgstr ""
"Kompresja lub dekompresja PLIKÓW w formacie .xz.\n" "Kompresja lub dekompresja PLIKÓW w formacie .xz.\n"
"\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" msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "" msgstr ""
"Argumenty obowiązkowe dla opcji długich są obowiązkowe również dla opcji\n" "Argumenty obowiązkowe dla opcji długich są obowiązkowe również dla opcji\n"
"krótkich.\n" "krótkich.\n"
#: src/xz/message.c:1117 #: src/xz/message.c:972
msgid " Operation mode:\n" msgid " Operation mode:\n"
msgstr " Tryb pracy:\n" msgstr " Tryb pracy:\n"
#: src/xz/message.c:1120 #: src/xz/message.c:975
msgid "" msgid ""
" -z, --compress force compression\n" " -z, --compress force compression\n"
" -d, --decompress force decompression\n" " -d, --decompress force decompression\n"
@ -635,7 +650,7 @@ msgstr ""
" -t, --test sprawdzenie spójności plików skompresowanych\n" " -t, --test sprawdzenie spójności plików skompresowanych\n"
" -l, --list wypisanie informacji o plikach .xz" " -l, --list wypisanie informacji o plikach .xz"
#: src/xz/message.c:1126 #: src/xz/message.c:981
msgid "" msgid ""
"\n" "\n"
" Operation modifiers:\n" " Operation modifiers:\n"
@ -643,7 +658,7 @@ msgstr ""
"\n" "\n"
" Modyfikatory operacji:\n" " Modyfikatory operacji:\n"
#: src/xz/message.c:1129 #: src/xz/message.c:984
msgid "" msgid ""
" -k, --keep keep (don't delete) input files\n" " -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\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" " -f, --force nadpisywanie plików wyjściowych i (de)kompresja dowiązań\n"
" -c, --stdout zapis na standardowe wyjście, nieusuwanie plików wej." " -c, --stdout zapis na standardowe wyjście, nieusuwanie plików wej."
#: src/xz/message.c:1138 #: src/xz/message.c:993
msgid "" msgid ""
" --single-stream decompress only the first stream, and silently\n" " --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data" " ignore possible remaining input data"
@ -661,7 +676,7 @@ msgstr ""
" --single-stream dekompresja tylko pierwszego strumienia, ciche\n" " --single-stream dekompresja tylko pierwszego strumienia, ciche\n"
" zignorowanie pozostałych danych wejściowych" " zignorowanie pozostałych danych wejściowych"
#: src/xz/message.c:1141 #: src/xz/message.c:996
msgid "" msgid ""
" --no-sparse do not create sparse files when decompressing\n" " --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\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" " wejścia; muszą być zakończone znakiem nowej linii\n"
" --files0[=PLIK] podobnie do --files, ale znakiem kończącym musi być NUL" " --files0[=PLIK] podobnie do --files, ale znakiem kończącym musi być NUL"
#: src/xz/message.c:1150 #: src/xz/message.c:1005
msgid "" msgid ""
"\n" "\n"
" Basic file format and compression options:\n" " Basic file format and compression options:\n"
@ -685,7 +700,7 @@ msgstr ""
"\n" "\n"
" Podstawowe opcje formatu pliku i kompresji:\n" " Podstawowe opcje formatu pliku i kompresji:\n"
#: src/xz/message.c:1152 #: src/xz/message.c:1007
msgid "" msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n" " -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\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" " -C, --check=TEST typ kontroli spójności: `none' (ostrożnie!),\n"
" `crc32', `crc64' (domyślny) lub `sha256'" " `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" msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check bez kontroli sprawdzania integralności przy dekompresji" msgstr " --ignore-check bez kontroli sprawdzania integralności przy dekompresji"
#: src/xz/message.c:1161 #: src/xz/message.c:1016
msgid "" msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n" " -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!" " 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" " użyciem wartości 7-9 należy wziąć pod uwagę wykorzystanie\n"
" pamięci przy kompresji *oraz* dekompresji!" " pamięci przy kompresji *oraz* dekompresji!"
#: src/xz/message.c:1165 #: src/xz/message.c:1020
msgid "" msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n" " -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements" " does not affect decompressor memory requirements"
@ -719,7 +734,7 @@ msgstr ""
" ilości czasu procesora; nie wpływa na wymagania\n" " ilości czasu procesora; nie wpływa na wymagania\n"
" pamięciowe dekompresora" " pamięciowe dekompresora"
#: src/xz/message.c:1169 #: src/xz/message.c:1024
msgid "" msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " -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" " 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" " -T, --threads=ILE użycie maksymalnie ILU wątków; domyślnie 1; 0 oznacza\n"
" tyle, ile jest rdzeni procesorów" " tyle, ile jest rdzeni procesorów"
#: src/xz/message.c:1174 #: src/xz/message.c:1029
msgid "" msgid ""
" --block-size=SIZE\n" " --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\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" " opcja służy do ustawienia rozmiaru bloku dla kompresji\n"
" wielowątkowej" " wielowątkowej"
#: src/xz/message.c:1178 #: src/xz/message.c:1033
msgid "" msgid ""
" --block-list=SIZES\n" " --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\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" " rozpoczęcie nowego bloku .xz po rozdzielonych przecinkiem\n"
" przedziałach danych nieskompresowanych" " przedziałach danych nieskompresowanych"
#: src/xz/message.c:1182 #: src/xz/message.c:1037
msgid "" msgid ""
" --flush-timeout=TIMEOUT\n" " --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\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" " ostatniegu zapisu bloku, a odczyt kolejnych danych byłby\n"
" blokujący, wszystkie gotowe dane są zapisywane" " blokujący, wszystkie gotowe dane są zapisywane"
#: src/xz/message.c:1188 #: src/xz/message.c:1043
#, no-c-format #, no-c-format
msgid "" msgid ""
" --memlimit-compress=LIMIT\n" " --memlimit-compress=LIMIT\n"
@ -779,7 +794,7 @@ msgstr ""
" dekompresji, dekompresji wielowątkowej lub wszystkich;\n" " dekompresji, dekompresji wielowątkowej lub wszystkich;\n"
" LIMIT jest w bajtach, % RAM lub 0 dla limitów domyślnych" " LIMIT jest w bajtach, % RAM lub 0 dla limitów domyślnych"
#: src/xz/message.c:1197 #: src/xz/message.c:1052
msgid "" msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n" " --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards" " give an error instead of adjusting the settings downwards"
@ -788,7 +803,7 @@ msgstr ""
" pamięci, zostanie zgłoszony błąd zamiast zmniejszania\n" " pamięci, zostanie zgłoszony błąd zamiast zmniejszania\n"
" ustawień" " ustawień"
#: src/xz/message.c:1203 #: src/xz/message.c:1058
msgid "" msgid ""
"\n" "\n"
" Custom filter chain for compression (alternative for using presets):" " Custom filter chain for compression (alternative for using presets):"
@ -796,7 +811,7 @@ msgstr ""
"\n" "\n"
" Łańcuch własnych filtrów do kompresji (alternatywa do używania -0 .. -9):" " Ł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 "" msgid ""
"\n" "\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\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" " mf=NAZWA dopasowywacz (hc3, hc4, bt2, bt3, bt4; bt4)\n"
" depth=ILE maks. głębokość szukania; 0=auto (domyślne)" " depth=ILE maks. głębokość szukania; 0=auto (domyślne)"
#: src/xz/message.c:1227 #: src/xz/message.c:1082
msgid "" msgid ""
"\n" "\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\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" " Poprawne OPCJE dla wszystkich filtrów BCJ:\n"
" start=ILE offset początku konwersji (domyślnie=0)" " start=ILE offset początku konwersji (domyślnie=0)"
#: src/xz/message.c:1240 #: src/xz/message.c:1095
msgid "" msgid ""
"\n" "\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\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" " dist=ILE odległość między bajtami odejmowanymi od\n"
" siebie (1-256; 1)" " siebie (1-256; 1)"
#: src/xz/message.c:1248 #: src/xz/message.c:1103
msgid "" msgid ""
"\n" "\n"
" Other options:\n" " Other options:\n"
@ -869,7 +884,7 @@ msgstr ""
"\n" "\n"
" Inne opcje:\n" " Inne opcje:\n"
#: src/xz/message.c:1251 #: src/xz/message.c:1106
msgid "" msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose" " -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" " -q, --quiet pominięcie ostrzeżeń; dwukrotne podanie pomija też błędy\n"
" -v, --verbose więcej informacji; dwukrotne podanie to jeszcze więcej" " -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" 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" 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)" msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr " --robot komunikaty w formacie dla maszyny (do skryptów)" msgstr " --robot komunikaty w formacie dla maszyny (do skryptów)"
#: src/xz/message.c:1261 #: src/xz/message.c:1116
msgid "" msgid ""
" --info-memory display the total amount of RAM and the currently active\n" " --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit" " memory usage limits, and exit"
@ -893,7 +908,7 @@ msgstr ""
" --info-memory wyświetlenie całkowitej ilości pamięci RAM oraz aktualnie\n" " --info-memory wyświetlenie całkowitej ilości pamięci RAM oraz aktualnie\n"
" aktywnych limitów pamięci i zakończenie pracy" " aktywnych limitów pamięci i zakończenie pracy"
#: src/xz/message.c:1264 #: src/xz/message.c:1119
msgid "" msgid ""
" -h, --help display the short help (lists only the basic options)\n" " -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit" " -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, --help wyświetlenie krótkiego opisu (tylko podstawowe opcje)\n"
" -H, --long-help wyświetlenie tego długiego opisu i zakończenie" " -H, --long-help wyświetlenie tego długiego opisu i zakończenie"
#: src/xz/message.c:1268 #: src/xz/message.c:1123
msgid "" msgid ""
" -h, --help display this short help and exit\n" " -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)" " -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, --help wyświetlenie tego krótkiego opisu i zakończenie\n"
" -H, --long-help wyświetlenie długiego opisu (także opcje zaawansowane)" " -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" msgid " -V, --version display the version number and exit"
msgstr " -V, --version wyświetlenie informacji o wersji i zakończenie" msgstr " -V, --version wyświetlenie informacji o wersji i zakończenie"
#: src/xz/message.c:1275 #: src/xz/message.c:1130
msgid "" msgid ""
"\n" "\n"
"With no FILE, or when FILE is -, read standard input.\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 #. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW #. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks. #. address for translation bugs. Thanks.
#: src/xz/message.c:1281 #: src/xz/message.c:1136
#, c-format #, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n" msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "" msgstr ""
@ -934,12 +949,12 @@ msgstr ""
"Błędy w tłumaczeniu prosimy zgłaszać na adres\n" "Błędy w tłumaczeniu prosimy zgłaszać na adres\n"
"<translation-team-pl@lists.sourceforge.net>.\n" "<translation-team-pl@lists.sourceforge.net>.\n"
#: src/xz/message.c:1283 #: src/xz/message.c:1138
#, c-format #, c-format
msgid "%s home page: <%s>\n" msgid "%s home page: <%s>\n"
msgstr "Strona domowa %s: <%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." msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "TA WERSJA JEST ROZWOJOWA, NIE PRZEZNACZONA DO UŻYTKU PRODUKCYJNEGO." 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" msgid "%s: Invalid option value"
msgstr "%s: Błędna wartość opcji" msgstr "%s: Błędna wartość opcji"
#: src/xz/options.c:286 #: src/xz/options.c:247
#, c-format #, c-format
msgid "Unsupported LZMA1/LZMA2 preset: %s" msgid "Unsupported LZMA1/LZMA2 preset: %s"
msgstr "Nieobsługiwane ustawienie predefiniowane LZMA1/LZMA2: %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" msgid "The sum of lc and lp must not exceed 4"
msgstr "Suma lc i lp nie może przekroczyć 4" msgstr "Suma lc i lp nie może przekroczyć 4"
#: src/xz/options.c:398 #: src/xz/suffix.c:160
#, 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
#, c-format #, c-format
msgid "%s: Filename has an unknown suffix, skipping" msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Nazwa pliku ma nieznane rozszerzenie, pominięto" msgstr "%s: Nazwa pliku ma nieznane rozszerzenie, pominięto"
#: src/xz/suffix.c:186 #: src/xz/suffix.c:181
#, c-format #, c-format
msgid "%s: File already has `%s' suffix, skipping" msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Plik już ma rozszerzenie `%s', pominięto" msgstr "%s: Plik już ma rozszerzenie `%s', pominięto"
#: src/xz/suffix.c:402 #: src/xz/suffix.c:388
#, c-format #, c-format
msgid "%s: Invalid filename suffix" msgid "%s: Invalid filename suffix"
msgstr "%s: Błędne rozszerzenie nazwy pliku" 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. # Mesajele în limba română pentru pachetul xz.
# This file is put in the public domain. # 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”: # Cronologia traducerii fișierului „xz”:
# Traducerea inițială, făcută de R-GC, pentru versiunea xz 5.2.5. # 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 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 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-pre1, făcută de R-GC, noi-2022.
# Actualizare a traducerii pentru versiunea 5.4.0-pre2, făcută de R-GC, 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 "" msgid ""
msgstr "" 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" "Report-Msgid-Bugs-To: xz@tukaani.org\n"
"POT-Creation-Date: 2022-12-03 00:34+0800\n" "POT-Creation-Date: 2023-07-18 23:34+0800\n"
"PO-Revision-Date: 2022-12-05 16:11+0100\n" "PO-Revision-Date: 2023-07-19 19:34+0200\n"
"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n" "Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
"Language: ro\n" "Language: ro\n"
@ -25,53 +28,68 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "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" "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-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 #, c-format
msgid "%s: Invalid argument to --block-list" msgid "%s: Invalid argument to --block-list"
msgstr "%s: Argument nevalid pentru opțiunea „--block-list”" msgstr "%s: Argument nevalid pentru opțiunea „--block-list”"
#: src/xz/args.c:74 #: src/xz/args.c:87
#, c-format #, c-format
msgid "%s: Too many arguments to --block-list" msgid "%s: Too many arguments to --block-list"
msgstr "%s: Prea multe argumente pentru opțiunea „--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" 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”" 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 #, c-format
msgid "%s: Unknown file format type" msgid "%s: Unknown file format type"
msgstr "%s: Tip de format de fișier necunoscut" 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 #, c-format
msgid "%s: Unsupported integrity check type" msgid "%s: Unsupported integrity check type"
msgstr "%s: Tip de verificare a integrității neacceptat" 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'." msgid "Only one file can be specified with `--files' or `--files0'."
msgstr "Numai un fișier poate fi specificat cu „--files” sau „--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 #, c-format
msgid "The environment variable %s contains too many arguments" msgid "The environment variable %s contains too many arguments"
msgstr "Variabila de mediu „%s” conține prea multe argumente" 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" msgid "Compression support was disabled at build time"
msgstr "Suportul de comprimare a fost dezactivat în timpul construirii" 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" msgid "Decompression support was disabled at build time"
msgstr "Suportul de decomprimare a fost dezactivat în timpul construirii" 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" msgid "Compression of lzip files (.lz) is not supported"
msgstr "Comprimarea fișierelor lzip (.lz) nu este acceptată" 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 #: src/xz/coder.c:115
msgid "Maximum number of filters is four" msgid "Maximum number of filters is four"
msgstr "Numărul maxim de filtre este patru" 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 #: src/xz/file_io.c:110 src/xz/file_io.c:118
#, c-format #, c-format
msgid "Error creating a pipe: %s" 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" msgid "Failed to enable the sandbox"
msgstr "Nu s-a reușit activarea cutiei de probă(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 #, c-format
msgid "%s: poll() failed: %s" msgid "%s: poll() failed: %s"
msgstr "%s: poll() a eșuat: %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 #. it is possible that the user has put a new file in place
#. of the original file, and in that case it obviously #. of the original file, and in that case it obviously
#. shouldn't be removed. #. shouldn't be removed.
#: src/xz/file_io.c:344 #: src/xz/file_io.c:361
#, c-format #, c-format
msgid "%s: File seems to have been moved, not removing" msgid "%s: File seems to have been moved, not removing"
msgstr "%s: Fișierul pare să fi fost mutat, nu eliminat" 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 #, c-format
msgid "%s: Cannot remove: %s" msgid "%s: Cannot remove: %s"
msgstr "%s: Nu se poate elimina: %s" msgstr "%s: Nu se poate elimina: %s"
#: src/xz/file_io.c:377 #: src/xz/file_io.c:394
#, c-format #, c-format
msgid "%s: Cannot set the file owner: %s" msgid "%s: Cannot set the file owner: %s"
msgstr "%s: Nu se poate configura proprietarul fișierului: %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 #, c-format
msgid "%s: Cannot set the file group: %s" msgid "%s: Cannot set the file group: %s"
msgstr "%s: Nu se poate configura grupul proprietar al fișierului: %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 #, c-format
msgid "%s: Cannot set the file permissions: %s" msgid "%s: Cannot set the file permissions: %s"
msgstr "%s: Nu se pot configura permisiunile fișierului: %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 #, c-format
msgid "Error getting the file status flags from standard input: %s" 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" 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 #, c-format
msgid "%s: Is a symbolic link, skipping" msgid "%s: Is a symbolic link, skipping"
msgstr "%s: Este o legătură simbolică, se omite" msgstr "%s: Este o legătură simbolică, se omite"
#: src/xz/file_io.c:684 #: src/xz/file_io.c:701
#, c-format #, c-format
msgid "%s: Is a directory, skipping" msgid "%s: Is a directory, skipping"
msgstr "%s: Este un director, se omite" msgstr "%s: Este un director, se omite"
#: src/xz/file_io.c:690 #: src/xz/file_io.c:707
#, c-format #, c-format
msgid "%s: Not a regular file, skipping" msgid "%s: Not a regular file, skipping"
msgstr "%s: Nu este un fișier obișnuit, se omite" 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 #, c-format
msgid "%s: File has setuid or setgid bit set, skipping" msgid "%s: File has setuid or setgid bit set, skipping"
msgstr "%s: Fișierul are activați biții «setuid» sau «setgid», se omite" 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 #, c-format
msgid "%s: File has sticky bit set, skipping" msgid "%s: File has sticky bit set, skipping"
msgstr "%s: Fișierul are activat bitul lipicios(sticky), se omite" 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 #, c-format
msgid "%s: Input file has more than one hard link, skipping" 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" 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" msgid "Empty filename, skipping"
msgstr "Numele fișierului este gol, se omite" msgstr "Numele fișierului este gol, se omite"
#: src/xz/file_io.c:817 #: src/xz/file_io.c:834
#, c-format #, c-format
msgid "Error restoring the status flags to standard input: %s" msgid "Error restoring the status flags to standard input: %s"
msgstr "Eroare la restabilirea indicatorilor de stare la intrarea standard: %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 #, c-format
msgid "Error getting the file status flags from standard output: %s" 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" 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 #, c-format
msgid "Error restoring the O_APPEND flag to standard output: %s" msgid "Error restoring the O_APPEND flag to standard output: %s"
msgstr "Eroare la restabilirea indicatorului O_APPEND la ieșirea standard: %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 #, c-format
msgid "%s: Closing the file failed: %s" msgid "%s: Closing the file failed: %s"
msgstr "%s: Închiderea fișierului a eșuat: %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 #, c-format
msgid "%s: Seeking failed when trying to create a sparse file: %s" 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" 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 #, c-format
msgid "%s: Read error: %s" msgid "%s: Read error: %s"
msgstr "%s: Eroare de citire: %s" msgstr "%s: Eroare de citire: %s"
#: src/xz/file_io.c:1222 #: src/xz/file_io.c:1239
#, c-format #, c-format
msgid "%s: Error seeking the file: %s" msgid "%s: Error seeking the file: %s"
msgstr "%s: Eroare la căutarea fișierului: %s" msgstr "%s: Eroare la căutarea fișierului: %s"
#: src/xz/file_io.c:1246 #: src/xz/file_io.c:1263
#, c-format #, c-format
msgid "%s: Unexpected end of file" msgid "%s: Unexpected end of file"
msgstr "%s: Sfârșit neașteptat al fișierului" msgstr "%s: Sfârșit neașteptat al fișierului"
#: src/xz/file_io.c:1305 #: src/xz/file_io.c:1322
#, c-format #, c-format
msgid "%s: Write error: %s" msgid "%s: Write error: %s"
msgstr "%s: Eroare de scriere: %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 #. to Ratio, the columns are right aligned. Check and Filename
#. are left aligned. If you need longer words, it's OK to #. are left aligned. If you need longer words, it's OK to
#. use two lines here. Test with "xz -l foo.xz". #. 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" msgid "Strms Blocks Compressed Uncompressed Ratio Check Filename"
msgstr "Fluxuri Blocuri Comprimare Decomprimare Raport Verificare Nume fișier" 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" msgid "Yes"
msgstr "Da" msgstr "Da"
#: src/xz/list.c:1025 src/xz/list.c:1203 #: src/xz/list.c:1026 src/xz/list.c:1204
msgid "No" msgid "No"
msgstr "Nu" msgstr "Nu"
#: src/xz/list.c:1027 src/xz/list.c:1205 #: src/xz/list.c:1028 src/xz/list.c:1206
#, c-format #, c-format
msgid " Minimum XZ Utils version: %s\n" msgid " Minimum XZ Utils version: %s\n"
msgstr " Versiunea minimă XZ Utils: %s\n" msgstr " Versiunea minimă XZ Utils: %s\n"
#. TRANSLATORS: %s is an integer. Only the plural form of this #. 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". #. 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 #, c-format
msgid "%s file\n" msgid "%s file\n"
msgid_plural "%s files\n" msgid_plural "%s files\n"
@ -532,15 +550,15 @@ msgstr[1] "două fișiere\n"
msgstr[2] "%s fișiere\n" msgstr[2] "%s fișiere\n"
msgstr[3] "%s de fișiere\n" msgstr[3] "%s de fișiere\n"
#: src/xz/list.c:1191 #: src/xz/list.c:1192
msgid "Totals:" msgid "Totals:"
msgstr "Totaluri:" msgstr "Totaluri:"
#: src/xz/list.c:1269 #: src/xz/list.c:1270
msgid "--list works only on .xz files (--format=xz or --format=auto)" 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)" 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" msgid "--list does not support reading from standard input"
msgstr "--list nu acceptă citirea de la intrarea standard" 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: ". #. of the line in messages. Usually it becomes "xz: ".
#. This is a translatable string because French needs #. This is a translatable string because French needs
#. a space before a colon. #. a space before a colon.
#: src/xz/message.c:725 #: src/xz/message.c:670 src/xz/message.c:725
#, c-format #, c-format
msgid "%s: " msgid "%s: "
msgstr "%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)" msgid "Internal error (bug)"
msgstr "Eroare internă (bug)" msgstr "Eroare internă (bug)"
#: src/xz/message.c:795 #: src/xz/message.c:804
msgid "Cannot establish signal handlers" msgid "Cannot establish signal handlers"
msgstr "Nu se pot stabili operatorii de semnal" 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" msgid "No integrity check; not verifying file integrity"
msgstr "Fără verificare a integrității; nu se verifică integritatea fișierului" 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" msgid "Unsupported type of integrity check; not verifying file integrity"
msgstr "Tip neacceptat de verificare a integrității; nu se verifică integritatea fișierului" 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" msgid "Memory usage limit reached"
msgstr "Limita de utilizare a memoriei a fost atinsă" msgstr "Limita de utilizare a memoriei a fost atinsă"
#: src/xz/message.c:817 #: src/xz/message.c:826
msgid "File format not recognized" msgid "File format not recognized"
msgstr "Formatul fișierului nu este recunoscut" msgstr "Formatul fișierului nu este recunoscut"
#: src/xz/message.c:820 #: src/xz/message.c:829
msgid "Unsupported options" msgid "Unsupported options"
msgstr "Opțiuni neacceptate" msgstr "Opțiuni neacceptate"
#: src/xz/message.c:823 #: src/xz/message.c:832
msgid "Compressed data is corrupt" msgid "Compressed data is corrupt"
msgstr "Datele comprimate sunt corupte" msgstr "Datele comprimate sunt corupte"
#: src/xz/message.c:826 #: src/xz/message.c:835
msgid "Unexpected end of input" msgid "Unexpected end of input"
msgstr "Sfârșit neașteptat al intrării" msgstr "Sfârșit neașteptat al intrării"
#: src/xz/message.c:868 #: src/xz/message.c:877
#, c-format #, c-format
msgid "%s MiB of memory is required. The limiter is disabled." msgid "%s MiB of memory is required. The limiter is disabled."
msgstr "Se necesită %s Mio de memorie. Limitarea este dezactivată." msgstr "Se necesită %s Mio de memorie. Limitarea este dezactivată."
#: src/xz/message.c:896 #: src/xz/message.c:905
#, c-format #, c-format
msgid "%s MiB of memory is required. The limit is %s." msgid "%s MiB of memory is required. The limit is %s."
msgstr "Se necesită %sMio de memorie. Limita este de %s." msgstr "Se necesită %sMio de memorie. Limita este de %s."
#: src/xz/message.c:915 #: src/xz/message.c:924
#, c-format #, c-format
msgid "%s: Filter chain: %s\n" msgid "%s: Filter chain: %s\n"
msgstr "%s: Lanț de filtre: %s\n" msgstr "%s: Lanț de filtre: %s\n"
#: src/xz/message.c:926 #: src/xz/message.c:935
#, c-format #, c-format
msgid "Try `%s --help' for more information." msgid "Try `%s --help' for more information."
msgstr "Încercați «%s --help» pentru mai multe informații." msgstr "Încercați «%s --help» pentru mai multe informații."
#: src/xz/message.c:952 #: src/xz/message.c:961
#, c-format #, c-format
msgid "" msgid ""
"Usage: %s [OPTION]... [FILE]...\n" "Usage: %s [OPTION]... [FILE]...\n"
@ -651,17 +669,17 @@ msgstr ""
"Comprimă sau decomprimă FIȘIER(e) în formatul .xz.\n" "Comprimă sau decomprimă FIȘIER(e) în formatul .xz.\n"
"\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" msgid "Mandatory arguments to long options are mandatory for short options too.\n"
msgstr "" msgstr ""
"Argumentele obligatorii pentru opțiunile lungi sunt obligatorii și\n" "Argumentele obligatorii pentru opțiunile lungi sunt obligatorii și\n"
"pentru opțiunile scurte.\n" "pentru opțiunile scurte.\n"
#: src/xz/message.c:963 #: src/xz/message.c:972
msgid " Operation mode:\n" msgid " Operation mode:\n"
msgstr " Mod de operare:\n" msgstr " Mod de operare:\n"
#: src/xz/message.c:966 #: src/xz/message.c:975
msgid "" msgid ""
" -z, --compress force compression\n" " -z, --compress force compression\n"
" -d, --decompress force decompression\n" " -d, --decompress force decompression\n"
@ -673,7 +691,7 @@ msgstr ""
" -t, --test testează integritatea fișierului comprimat\n" " -t, --test testează integritatea fișierului comprimat\n"
" -l, --list listează informații despre fișierele .xz" " -l, --list listează informații despre fișierele .xz"
#: src/xz/message.c:972 #: src/xz/message.c:981
msgid "" msgid ""
"\n" "\n"
" Operation modifiers:\n" " Operation modifiers:\n"
@ -681,7 +699,7 @@ msgstr ""
"\n" "\n"
" Modificatori de operare:\n" " Modificatori de operare:\n"
#: src/xz/message.c:975 #: src/xz/message.c:984
msgid "" msgid ""
" -k, --keep keep (don't delete) input files\n" " -k, --keep keep (don't delete) input files\n"
" -f, --force force overwrite of output file and (de)compress links\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" " -c, --stdout scrie la ieșirea standard și nu șterge fișierele de\n"
" intrare" " intrare"
#: src/xz/message.c:984 #: src/xz/message.c:993
msgid "" msgid ""
" --single-stream decompress only the first stream, and silently\n" " --single-stream decompress only the first stream, and silently\n"
" ignore possible remaining input data" " ignore possible remaining input data"
@ -701,7 +719,7 @@ msgstr ""
" --single-stream decomprimă doar primul flux și ignoră în tăcere\n" " --single-stream decomprimă doar primul flux și ignoră în tăcere\n"
" posibilele date de intrare rămase" " posibilele date de intrare rămase"
#: src/xz/message.c:987 #: src/xz/message.c:996
msgid "" msgid ""
" --no-sparse do not create sparse files when decompressing\n" " --no-sparse do not create sparse files when decompressing\n"
" -S, --suffix=.SUF use the suffix `.SUF' on compressed files\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" " ca --files, dar folosește caracterul nul(null) ca\n"
" terminator" " terminator"
#: src/xz/message.c:996 #: src/xz/message.c:1005
msgid "" msgid ""
"\n" "\n"
" Basic file format and compression options:\n" " Basic file format and compression options:\n"
@ -729,7 +747,7 @@ msgstr ""
"\n" "\n"
" Formatul de bază al fișierului și opțiunile de comprimare:\n" " Formatul de bază al fișierului și opțiunile de comprimare:\n"
#: src/xz/message.c:998 #: src/xz/message.c:1007
msgid "" msgid ""
" -F, --format=FMT file format to encode or decode; possible values are\n" " -F, --format=FMT file format to encode or decode; possible values are\n"
" `auto' (default), `xz', `lzma', `lzip', and `raw'\n" " `auto' (default), `xz', `lzma', `lzip', and `raw'\n"
@ -745,11 +763,11 @@ msgstr ""
" cu precauție), „crc32”, „crc64” (implicit) sau\n" " cu precauție), „crc32”, „crc64” (implicit) sau\n"
" „sha256”" " „sha256”"
#: src/xz/message.c:1003 #: src/xz/message.c:1012
msgid " --ignore-check don't verify the integrity check when decompressing" msgid " --ignore-check don't verify the integrity check when decompressing"
msgstr " --ignore-check nu se efectuează verificarea integrității la decomprimare" msgstr " --ignore-check nu se efectuează verificarea integrității la decomprimare"
#: src/xz/message.c:1007 #: src/xz/message.c:1016
msgid "" msgid ""
" -0 ... -9 compression preset; default is 6; take compressor *and*\n" " -0 ... -9 compression preset; default is 6; take compressor *and*\n"
" decompressor memory usage into account before using 7-9!" " decompressor memory usage into account before using 7-9!"
@ -759,7 +777,7 @@ msgstr ""
" comprimare *și* de instrumentul de decomprimare, înainte\n" " comprimare *și* de instrumentul de decomprimare, înainte\n"
" de a utiliza presetările 7-9!" " de a utiliza presetările 7-9!"
#: src/xz/message.c:1011 #: src/xz/message.c:1020
msgid "" msgid ""
" -e, --extreme try to improve compression ratio by using more CPU time;\n" " -e, --extreme try to improve compression ratio by using more CPU time;\n"
" does not affect decompressor memory requirements" " does not affect decompressor memory requirements"
@ -768,7 +786,7 @@ msgstr ""
" folosind mai mult timp CPU-ul; nu afectează cerințele\n" " folosind mai mult timp CPU-ul; nu afectează cerințele\n"
" de memorie ale instrumentului de decomprimare" " de memorie ale instrumentului de decomprimare"
#: src/xz/message.c:1015 #: src/xz/message.c:1024
msgid "" msgid ""
" -T, --threads=NUM use at most NUM threads; the default is 1; set to 0\n" " -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" " 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" " este 1; specificați valoarea 0 pentru a utiliza atâtea\n"
" fire de execuție câte nuclee de procesor există" " fire de execuție câte nuclee de procesor există"
#: src/xz/message.c:1020 #: src/xz/message.c:1029
msgid "" msgid ""
" --block-size=SIZE\n" " --block-size=SIZE\n"
" start a new .xz block after every SIZE bytes of input;\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" " utilizați acest lucru pentru a stabili dimensiunea\n"
" blocului pentru comprimarea cu fire de execuție" " blocului pentru comprimarea cu fire de execuție"
#: src/xz/message.c:1024 #: src/xz/message.c:1033
msgid "" msgid ""
" --block-list=SIZES\n" " --block-list=SIZES\n"
" start a new .xz block after the given comma-separated\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" " începe un nou bloc .xz după intervalele date separate\n"
" prin virgulă, de date necomprimate" " prin virgulă, de date necomprimate"
#: src/xz/message.c:1028 #: src/xz/message.c:1037
msgid "" msgid ""
" --flush-timeout=TIMEOUT\n" " --flush-timeout=TIMEOUT\n"
" when compressing, if more than TIMEOUT milliseconds has\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" " multor intrări s-ar bloca, toate datele în așteptare\n"
" sunt eliminate" " sunt eliminate"
#: src/xz/message.c:1034 #: src/xz/message.c:1043
#, no-c-format #, no-c-format
msgid "" msgid ""
" --memlimit-compress=LIMIT\n" " --memlimit-compress=LIMIT\n"
@ -832,7 +850,7 @@ msgstr ""
" execuție sau toate acestea; LIMITA este exprimată în\n" " execuție sau toate acestea; LIMITA este exprimată în\n"
" octeți, % din RAM sau 0 pt. a activa valoarea implicită" " octeți, % din RAM sau 0 pt. a activa valoarea implicită"
#: src/xz/message.c:1043 #: src/xz/message.c:1052
msgid "" msgid ""
" --no-adjust if compression settings exceed the memory usage limit,\n" " --no-adjust if compression settings exceed the memory usage limit,\n"
" give an error instead of adjusting the settings downwards" " 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" " --no-adjust dacă setările de comprimare depășesc limita de utilizare\n"
" a memoriei, dă o eroare în loc să reducă val. stabilite" " a memoriei, dă o eroare în loc să reducă val. stabilite"
#: src/xz/message.c:1049 #: src/xz/message.c:1058
msgid "" msgid ""
"\n" "\n"
" Custom filter chain for compression (alternative for using presets):" " Custom filter chain for compression (alternative for using presets):"
@ -849,7 +867,7 @@ msgstr ""
" Lanț de filtrare personalizat pentru comprimare (alternativă la utilizarea\n" " Lanț de filtrare personalizat pentru comprimare (alternativă la utilizarea\n"
" presetărilor):" " presetărilor):"
#: src/xz/message.c:1058 #: src/xz/message.c:1067
msgid "" msgid ""
"\n" "\n"
" --lzma1[=OPTS] LZMA1 or LZMA2; OPTS is a comma-separated list of zero or\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" " depth=NUM adâncimea maximă de căutare; 0=automată\n"
" (valoarea implicită)" " (valoarea implicită)"
#: src/xz/message.c:1073 #: src/xz/message.c:1082
msgid "" msgid ""
"\n" "\n"
" --x86[=OPTS] x86 BCJ filter (32-bit and 64-bit)\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" " OPȚIUNI valide pentru toate filtrele BCJ:\n"
" start=NUM poziția de pornire a conversiilor (implicit=0)" " start=NUM poziția de pornire a conversiilor (implicit=0)"
#: src/xz/message.c:1086 #: src/xz/message.c:1095
msgid "" msgid ""
"\n" "\n"
" --delta[=OPTS] Delta filter; valid OPTS (valid values; default):\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" " dist=NUM distanța dintre octeți fiind dedusă\n"
" scăzând un octet din celălalt (1-256; 1)" " scăzând un octet din celălalt (1-256; 1)"
#: src/xz/message.c:1094 #: src/xz/message.c:1103
msgid "" msgid ""
"\n" "\n"
" Other options:\n" " Other options:\n"
@ -927,7 +945,7 @@ msgstr ""
"\n" "\n"
" Alte opțiuni:\n" " Alte opțiuni:\n"
#: src/xz/message.c:1097 #: src/xz/message.c:1106
msgid "" msgid ""
" -q, --quiet suppress warnings; specify twice to suppress errors too\n" " -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose" " -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" " -v, --verbose descriere detaliată; specificați de două ori pentru și\n"
" mai multe detalii" " mai multe detalii"
#: src/xz/message.c:1102 #: src/xz/message.c:1111
msgid " -Q, --no-warn make warnings not affect the exit status" 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" 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)" msgid " --robot use machine-parsable messages (useful for scripts)"
msgstr "" msgstr ""
" --robot utilizează mesaje analizabile de mașină (utile pentru\n" " --robot utilizează mesaje analizabile de mașină (utile pentru\n"
" scripturi)" " scripturi)"
#: src/xz/message.c:1107 #: src/xz/message.c:1116
msgid "" msgid ""
" --info-memory display the total amount of RAM and the currently active\n" " --info-memory display the total amount of RAM and the currently active\n"
" memory usage limits, and exit" " memory usage limits, and exit"
@ -955,7 +973,7 @@ msgstr ""
" --info-memory afișează cantitatea totală de memorie RAM și limitele de\n" " --info-memory afișează cantitatea totală de memorie RAM și limitele de\n"
" utilizare a memoriei active în prezent, și iese" " utilizare a memoriei active în prezent, și iese"
#: src/xz/message.c:1110 #: src/xz/message.c:1119
msgid "" msgid ""
" -h, --help display the short help (lists only the basic options)\n" " -h, --help display the short help (lists only the basic options)\n"
" -H, --long-help display this long help and exit" " -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, --help afișează ajutorul scurt (enumeră doar opțiunile de bază)\n"
" -H, --long-help afișează acest ajutor lung(detaliat) și iese" " -H, --long-help afișează acest ajutor lung(detaliat) și iese"
#: src/xz/message.c:1114 #: src/xz/message.c:1123
msgid "" msgid ""
" -h, --help display this short help and exit\n" " -h, --help display this short help and exit\n"
" -H, --long-help display the long help (lists also the advanced options)" " -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" " -H, --long-help afișează mesajul detaliat de ajutor (afișează și opțiunile\n"
" avansate)" " avansate)"
#: src/xz/message.c:1119 #: src/xz/message.c:1128
msgid " -V, --version display the version number and exit" msgid " -V, --version display the version number and exit"
msgstr " -V, --version afișează numărul versiunii, și iese" msgstr " -V, --version afișează numărul versiunii, și iese"
#: src/xz/message.c:1121 #: src/xz/message.c:1130
msgid "" msgid ""
"\n" "\n"
"With no FILE, or when FILE is -, read standard input.\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 #. for this package. Please add _another line_ saying
#. "Report translation bugs to <...>\n" with the email or WWW #. "Report translation bugs to <...>\n" with the email or WWW
#. address for translation bugs. Thanks. #. address for translation bugs. Thanks.
#: src/xz/message.c:1127 #: src/xz/message.c:1136
#, c-format #, c-format
msgid "Report bugs to <%s> (in English or Finnish).\n" msgid "Report bugs to <%s> (in English or Finnish).\n"
msgstr "" msgstr ""
"Raportați erorile la <%s> (în engleză sau finlandeză).\n" "Raportați erorile la <%s> (în engleză sau finlandeză).\n"
"Raportați erorile de traducere la <translation-team-ro@lists.sourceforge.net>\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 #, c-format
msgid "%s home page: <%s>\n" msgid "%s home page: <%s>\n"
msgstr "Pagina principală a %s: <%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." msgid "THIS IS A DEVELOPMENT VERSION NOT INTENDED FOR PRODUCTION USE."
msgstr "ACEASTA ESTE O VERSIUNE DE DEZVOLTARE, NEDESTINATĂ UTILIZĂRII ÎN PRODUCȚIE." 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" msgid "The sum of lc and lp must not exceed 4"
msgstr "Suma de lc și lp nu trebuie să depășească 4" msgstr "Suma de lc și lp nu trebuie să depășească 4"
#: src/xz/suffix.c:134 src/xz/suffix.c:265 #: src/xz/suffix.c:160
#, 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
#, c-format #, c-format
msgid "%s: Filename has an unknown suffix, skipping" msgid "%s: Filename has an unknown suffix, skipping"
msgstr "%s: Numele fișierului are un sufix necunoscut, care se omite" msgstr "%s: Numele fișierului are un sufix necunoscut, care se omite"
#: src/xz/suffix.c:186 #: src/xz/suffix.c:181
#, c-format #, c-format
msgid "%s: File already has `%s' suffix, skipping" msgid "%s: File already has `%s' suffix, skipping"
msgstr "%s: Fișierul are deja sufixul „%s”, se omite" msgstr "%s: Fișierul are deja sufixul „%s”, se omite"
#: src/xz/suffix.c:402 #: src/xz/suffix.c:388
#, c-format #, c-format
msgid "%s: Invalid filename suffix" msgid "%s: Invalid filename suffix"
msgstr "%s: Sufixul numelui de fișier nu este valid" msgstr "%s: Sufixul numelui de fișier nu este valid"

332
po/sv.po
View File

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

334
po/uk.po
View File

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

View File

@ -79,7 +79,7 @@ do { \
} while (0) } 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. // Use sigprocmask() to set the signal mask in single-threaded programs.
#include <signal.h> #include <signal.h>
@ -100,12 +100,18 @@ mythread_sigmask(int how, const sigset_t *restrict set,
// Using pthreads // // Using pthreads //
//////////////////// ////////////////////
#include <sys/time.h>
#include <pthread.h> #include <pthread.h>
#include <signal.h> #include <signal.h>
#include <time.h> #include <time.h>
#include <errno.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_TYPE void *
#define MYTHREAD_RET_VALUE NULL #define MYTHREAD_RET_VALUE NULL
@ -219,8 +225,8 @@ static inline int
mythread_cond_init(mythread_cond *mycond) mythread_cond_init(mythread_cond *mycond)
{ {
#ifdef HAVE_CLOCK_GETTIME #ifdef HAVE_CLOCK_GETTIME
// NOTE: HAVE_DECL_CLOCK_MONOTONIC is always defined to 0 or 1. # if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && \
# if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && HAVE_DECL_CLOCK_MONOTONIC defined(HAVE_CLOCK_MONOTONIC)
struct timespec ts; struct timespec ts;
pthread_condattr_t condattr; pthread_condattr_t condattr;
@ -294,8 +300,8 @@ static inline void
mythread_condtime_set(mythread_condtime *condtime, const mythread_cond *cond, mythread_condtime_set(mythread_condtime *condtime, const mythread_cond *cond,
uint32_t timeout_ms) uint32_t timeout_ms)
{ {
condtime->tv_sec = timeout_ms / 1000; condtime->tv_sec = (time_t)(timeout_ms / 1000);
condtime->tv_nsec = (timeout_ms % 1000) * 1000000; condtime->tv_nsec = (long)((timeout_ms % 1000) * 1000000);
#ifdef HAVE_CLOCK_GETTIME #ifdef HAVE_CLOCK_GETTIME
struct timespec now; struct timespec now;
@ -372,7 +378,7 @@ typedef struct {
abort(); \ abort(); \
if (pending_) { \ if (pending_) { \
func(); \ func(); \
if (!InitOnceComplete(&once, 0, NULL)) \ if (!InitOnceComplete(&once_, 0, NULL)) \
abort(); \ abort(); \
} \ } \
} while (0) } while (0)

View File

@ -24,7 +24,15 @@
# include <config.h> # include <config.h>
#endif #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__ #ifdef __MINGW32__
# define __USE_MINGW_ANSI_STDIO 1 # define __USE_MINGW_ANSI_STDIO 1
#endif #endif
@ -127,7 +135,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <assert.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: // so that it works with fake bool type, for example:
// //
// bool foo = (flags & 0x100) != 0; // bool foo = (flags & 0x100) != 0;
@ -149,18 +157,8 @@ typedef unsigned char _Bool;
# define __bool_true_false_are_defined 1 # define __bool_true_false_are_defined 1
#endif #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> #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 // As of MSVC 2013, inline and restrict are supported with
// non-standard keywords. // non-standard keywords.
#if defined(_WIN32) && defined(_MSC_VER) #if defined(_WIN32) && defined(_MSC_VER)

View File

@ -52,6 +52,12 @@
// and such functions. // and such functions.
#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500) #if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500)
# include <immintrin.h> # 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 #endif
@ -189,6 +195,9 @@
// Unaligned reads and writes // // Unaligned reads and writes //
//////////////////////////////// ////////////////////////////////
// No-strict-align archs like x86-64
// ---------------------------------
//
// The traditional way of casting e.g. *(const uint16_t *)uint8_pointer // 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 // is bad even if the uint8_pointer is properly aligned because this kind
// of casts break strict aliasing rules and result in undefined behavior. // 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 // 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). // an option but isn't provided to keep things simpler (it's already a mess).
// Hopefully this is flexible enough in practice. // 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 static inline uint16_t
read16ne(const uint8_t *buf) read16ne(const uint8_t *buf)
{ {
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ #ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
return *(const uint16_t *)buf; return *(const uint16_t *)buf;
#else #else
uint16_t num; uint16_t num;
@ -221,8 +333,7 @@ read16ne(const uint8_t *buf)
static inline uint32_t static inline uint32_t
read32ne(const uint8_t *buf) read32ne(const uint8_t *buf)
{ {
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ #ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
return *(const uint32_t *)buf; return *(const uint32_t *)buf;
#else #else
uint32_t num; uint32_t num;
@ -235,8 +346,7 @@ read32ne(const uint8_t *buf)
static inline uint64_t static inline uint64_t
read64ne(const uint8_t *buf) read64ne(const uint8_t *buf)
{ {
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ #ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
return *(const uint64_t *)buf; return *(const uint64_t *)buf;
#else #else
uint64_t num; uint64_t num;
@ -249,8 +359,7 @@ read64ne(const uint8_t *buf)
static inline void static inline void
write16ne(uint8_t *buf, uint16_t num) write16ne(uint8_t *buf, uint16_t num)
{ {
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ #ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
*(uint16_t *)buf = num; *(uint16_t *)buf = num;
#else #else
memcpy(buf, &num, sizeof(num)); memcpy(buf, &num, sizeof(num));
@ -262,8 +371,7 @@ write16ne(uint8_t *buf, uint16_t num)
static inline void static inline void
write32ne(uint8_t *buf, uint32_t num) write32ne(uint8_t *buf, uint32_t num)
{ {
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ #ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
*(uint32_t *)buf = num; *(uint32_t *)buf = num;
#else #else
memcpy(buf, &num, sizeof(num)); memcpy(buf, &num, sizeof(num));
@ -275,8 +383,7 @@ write32ne(uint8_t *buf, uint32_t num)
static inline void static inline void
write64ne(uint8_t *buf, uint64_t num) write64ne(uint8_t *buf, uint64_t num)
{ {
#if defined(TUKLIB_FAST_UNALIGNED_ACCESS) \ #ifdef TUKLIB_USE_UNSAFE_TYPE_PUNNING
&& defined(TUKLIB_USE_UNSAFE_TYPE_PUNNING)
*(uint64_t *)buf = num; *(uint64_t *)buf = num;
#else #else
memcpy(buf, &num, sizeof(num)); memcpy(buf, &num, sizeof(num));
@ -288,68 +395,122 @@ write64ne(uint8_t *buf, uint64_t num)
static inline uint16_t static inline uint16_t
read16be(const uint8_t *buf) read16be(const uint8_t *buf)
{ {
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint16_t num = read16ne(buf); uint16_t num = read16ne(buf);
return conv16be(num); return conv16be(num);
#else
uint16_t num = ((uint16_t)buf[0] << 8) | (uint16_t)buf[1];
return num;
#endif
} }
static inline uint16_t static inline uint16_t
read16le(const uint8_t *buf) read16le(const uint8_t *buf)
{ {
#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint16_t num = read16ne(buf); uint16_t num = read16ne(buf);
return conv16le(num); return conv16le(num);
#else
uint16_t num = ((uint16_t)buf[0]) | ((uint16_t)buf[1] << 8);
return num;
#endif
} }
static inline uint32_t static inline uint32_t
read32be(const uint8_t *buf) read32be(const uint8_t *buf)
{ {
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint32_t num = read32ne(buf); uint32_t num = read32ne(buf);
return conv32be(num); 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 static inline uint32_t
read32le(const uint8_t *buf) read32le(const uint8_t *buf)
{ {
#if !defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint32_t num = read32ne(buf); uint32_t num = read32ne(buf);
return conv32le(num); 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 static inline uint64_t
read64be(const uint8_t *buf) read64be(const uint8_t *buf)
{ {
#if defined(WORDS_BIGENDIAN) || defined(TUKLIB_FAST_UNALIGNED_ACCESS)
uint64_t num = read64ne(buf); uint64_t num = read64ne(buf);
return conv64be(num); 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 #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; uint64_t num = (uint64_t)buf[0] << 56;
num |= (uint64_t)buf[1] << 48; num |= (uint64_t)buf[1] << 48;
num |= (uint64_t)buf[2] << 40; 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[6] << 8;
num |= (uint64_t)buf[7]; num |= (uint64_t)buf[7];
return num; return num;
#endif
} }
static inline uint64_t static inline uint64_t
read64le(const uint8_t *buf) 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]; uint64_t num = (uint64_t)buf[0];
num |= (uint64_t)buf[1] << 8; num |= (uint64_t)buf[1] << 8;
num |= (uint64_t)buf[2] << 16; 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[6] << 48;
num |= (uint64_t)buf[7] << 56; num |= (uint64_t)buf[7] << 56;
return num; 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 static inline void
write16be(uint8_t *buf, uint16_t num) write16be(uint8_t *buf, uint16_t num)
{ {
@ -408,10 +545,8 @@ write16be(uint8_t *buf, uint16_t num)
buf[1] = (uint8_t)num; buf[1] = (uint8_t)num;
return; return;
} }
#endif
#ifndef write16le
static inline void static inline void
write16le(uint8_t *buf, uint16_t num) write16le(uint8_t *buf, uint16_t num)
{ {
@ -419,10 +554,8 @@ write16le(uint8_t *buf, uint16_t num)
buf[1] = (uint8_t)(num >> 8); buf[1] = (uint8_t)(num >> 8);
return; return;
} }
#endif
#ifndef write32be
static inline void static inline void
write32be(uint8_t *buf, uint32_t num) write32be(uint8_t *buf, uint32_t num)
{ {
@ -432,10 +565,8 @@ write32be(uint8_t *buf, uint32_t num)
buf[3] = (uint8_t)num; buf[3] = (uint8_t)num;
return; return;
} }
#endif
#ifndef write32le
static inline void static inline void
write32le(uint8_t *buf, uint32_t num) write32le(uint8_t *buf, uint32_t num)
{ {
@ -445,6 +576,37 @@ write32le(uint8_t *buf, uint32_t num)
buf[3] = (uint8_t)(num >> 24); buf[3] = (uint8_t)(num >> 24);
return; 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 #endif
@ -630,7 +792,7 @@ bsr32(uint32_t n)
#if defined(__INTEL_COMPILER) #if defined(__INTEL_COMPILER)
return _bit_scan_reverse(n); 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 // GCC >= 3.4 has __builtin_clz(), which gives good results on
// multiple architectures. On x86, __builtin_clz() ^ 31U becomes // multiple architectures. On x86, __builtin_clz() ^ 31U becomes
// either plain BSR (so the XOR gets optimized away) or LZCNT and // either plain BSR (so the XOR gets optimized away) or LZCNT and
@ -684,7 +846,7 @@ clz32(uint32_t n)
#if defined(__INTEL_COMPILER) #if defined(__INTEL_COMPILER)
return _bit_scan_reverse(n) ^ 31U; 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); return (uint32_t)__builtin_clz(n);
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
@ -736,7 +898,7 @@ ctz32(uint32_t n)
#if defined(__INTEL_COMPILER) #if defined(__INTEL_COMPILER)
return _bit_scan_forward(n); 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); return (uint32_t)__builtin_ctz(n);
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #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) if (width < (size_t)columns_min)
len += (size_t)columns_min - width; len += (size_t)columns_min - width;
return len; return (int)len;
} }

View File

@ -73,6 +73,17 @@
#endif #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 extern uint64_t
tuklib_physmem(void) tuklib_physmem(void)
{ {
@ -87,8 +98,15 @@ tuklib_physmem(void)
HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll")); HMODULE kernel32 = GetModuleHandle(TEXT("kernel32.dll"));
if (kernel32 != NULL) { if (kernel32 != NULL) {
typedef BOOL (WINAPI *gmse_type)(LPMEMORYSTATUSEX); 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( gmse_type gmse = (gmse_type)GetProcAddress(
kernel32, "GlobalMemoryStatusEx"); kernel32, "GlobalMemoryStatusEx");
#ifdef CAN_DISABLE_WCAST_FUNCTION_TYPE
# pragma GCC diagnostic pop
#endif
if (gmse != NULL) { if (gmse != NULL) {
MEMORYSTATUSEX meminfo; MEMORYSTATUSEX meminfo;
meminfo.dwLength = sizeof(meminfo); meminfo.dwLength = sizeof(meminfo);

View File

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

View File

@ -18,7 +18,7 @@
TUKLIB_DECLS_BEGIN TUKLIB_DECLS_BEGIN
#if HAVE_DECL_PROGRAM_INVOCATION_NAME #ifdef HAVE_PROGRAM_INVOCATION_NAME
# define progname program_invocation_name # define progname program_invocation_name
#else #else
# define progname TUKLIB_SYMBOL(tuklib_progname) # 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/liblzma/simple \
-I$(top_srcdir)/src/common \ -I$(top_srcdir)/src/common \
-DTUKLIB_SYMBOL_PREFIX=lzma_ -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 EXTRA_DIST += liblzma_generic.map liblzma_linux.map validate_map.sh
if COND_SYMVERS_GENERIC if COND_SYMVERS_GENERIC
@ -72,11 +72,15 @@ endif
# static liblzma, we overwrite the static object file with an object file # static liblzma, we overwrite the static object file with an object file
# compiled from empty input. Note that GNU-specific features are OK here, # compiled from empty input. Note that GNU-specific features are OK here,
# because on Windows we are compiled with the GNU toolchain. # 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: .rc.lo:
$(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \ $(LIBTOOL) --mode=compile $(RC) $(DEFS) $(DEFAULT_INCLUDES) \
$(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \ $(INCLUDES) $(liblzma_la_CPPFLAGS) $(CPPFLAGS) $(RCFLAGS) \
-i $< -o $@ -i $< -o $@
echo > empty.c echo "typedef void empty;" > empty.c
$(COMPILE) -c empty.c -o $(*D)/$(*F).o $(COMPILE) -c empty.c -o $(*D)/$(*F).o
# Remove ordinals from the generated .def file. People must link by name, # Remove ordinals from the generated .def file. People must link by name,

View File

@ -1,22 +1,23 @@
/** /**
* \file api/lzma.h * \file api/lzma.h
* \brief The public API of liblzma data compression library * \brief The public API of liblzma data compression library
* \mainpage
* *
* liblzma is a public domain general-purpose data compression library with * 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 * 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 * format and raw (no headers) streams are supported. Multiple compression
* algorithms (filters) are supported. Currently LZMA2 is the primary filter. * algorithms (filters) are supported. Currently LZMA2 is the primary filter.
* *
* liblzma is part of XZ Utils <http://tukaani.org/xz/>. XZ Utils includes * liblzma is part of XZ Utils <https://xz.tukaani.org/xz-utils/>. XZ Utils
* a gzip-like command line tool named xz and some other tools. XZ Utils * includes a gzip-like command line tool named xz and some other tools.
* is developed and maintained by Lasse Collin. * 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 * 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 * 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 * 7-Zip <https://7-zip.org/>, which has a modified version of the public
* domain SHA-256 code found from Crypto++ <http://www.cryptopp.com/>. * 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. * 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 * against static liblzma on them, don't worry about LZMA_API_STATIC. That
* is, most developers will never need to use LZMA_API_STATIC. * 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, * 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 * and thus don't use __declspec(dllimport). This way developers don't
* need to worry about LZMA_API_STATIC. Also the calling convention is * 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 #ifndef LZMA_API_IMPORT
# if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__GNUC__) # if !defined(LZMA_API_STATIC) && defined(_WIN32) && !defined(__GNUC__)

View File

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

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/bcj.h * \file lzma/bcj.h
* \brief Branch/Call/Jump conversion filters * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -19,43 +18,44 @@
/* Filter IDs for lzma_filter.id */ /* Filter IDs for lzma_filter.id */
/**
* \brief Filter for x86 binaries
*/
#define LZMA_FILTER_X86 LZMA_VLI_C(0x04) #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 * 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 * for them is optional: if pointer to options is NULL, default value is

View File

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

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/check.h * \file lzma/check.h
* \brief Integrity checks * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -71,12 +70,17 @@ typedef enum {
/** /**
* \brief Test if the given Check ID is supported * \brief Test if the given Check ID is supported
* *
* Return true if the given Check ID is supported by this liblzma build. * LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always supported (even if
* Otherwise false is returned. It is safe to call this with a value that * liblzma is built with limited features).
* is not in the range [0, 15]; in that case the return value is always false.
* *
* You can assume that LZMA_CHECK_NONE and LZMA_CHECK_CRC32 are always * \note It is safe to call this with a value that is not in the
* supported (even if liblzma is built with limited features). * 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) extern LZMA_API(lzma_bool) lzma_check_is_supported(lzma_check check)
lzma_nothrow lzma_attr_const; 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: * 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 } * { 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) extern LZMA_API(uint32_t) lzma_check_size(lzma_check check)
lzma_nothrow lzma_attr_const; 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. * 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( extern LZMA_API(uint64_t) lzma_crc64(
const uint8_t *buf, size_t size, uint64_t crc) const uint8_t *buf, size_t size, uint64_t crc)
lzma_nothrow lzma_attr_pure; 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 * \brief Get the type of the integrity check
* *
* This function can be called only immediately after lzma_code() has * This function can be called only immediately after lzma_code() has
* returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK. * returned LZMA_NO_CHECK, LZMA_UNSUPPORTED_CHECK, or LZMA_GET_CHECK.
* Calling this function in any other situation has undefined behavior. * 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) extern LZMA_API(lzma_check) lzma_get_check(const lzma_stream *strm)
lzma_nothrow; lzma_nothrow;

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/container.h * \file lzma/container.h
* \brief File formats * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -51,7 +50,7 @@
* *
* This flag modifies the preset to make the encoding significantly slower * This flag modifies the preset to make the encoding significantly slower
* while improving the compression ratio only marginally. This is useful * 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 * 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 * least not significantly). The memory usage of the encoder may be increased
@ -72,9 +71,12 @@ typedef struct {
* Encoder: No flags are currently supported. * Encoder: No flags are currently supported.
* *
* Decoder: Bitwise-or of zero or more of the decoder flags: * Decoder: Bitwise-or of zero or more of the decoder flags:
* LZMA_TELL_NO_CHECK, LZMA_TELL_UNSUPPORTED_CHECK, * - LZMA_TELL_NO_CHECK
* LZMA_TELL_ANY_CHECK, LZMA_IGNORE_CHECK, * - LZMA_TELL_UNSUPPORTED_CHECK
* LZMA_CONCATENATED, LZMA_FAIL_FAST * - LZMA_TELL_ANY_CHECK
* - LZMA_IGNORE_CHECK
* - LZMA_CONCATENATED
* - LZMA_FAIL_FAST
*/ */
uint32_t flags; uint32_t flags;
@ -111,7 +113,7 @@ typedef struct {
/** /**
* \brief Timeout to allow lzma_code() to return early * \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 * 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 * to fill internal buffers, then no input or output occurs for
* a while. * a while.
@ -128,14 +130,13 @@ typedef struct {
* LZMA_OK. Reasonable values are 100 ms or more. The xz command * LZMA_OK. Reasonable values are 100 ms or more. The xz command
* line tool uses 300 ms. * line tool uses 300 ms.
* *
* If long blocking times are fine for you, set timeout to a special * If long blocking times are acceptable, set timeout to a special
* value of 0, which will disable the timeout mechanism and will make * value of 0. This will disable the timeout mechanism and will make
* lzma_code() block until all the input is consumed or the output * lzma_code() block until all the input is consumed or the output
* buffer has been filled. * buffer has been filled.
* *
* \note Even with a timeout, lzma_code() might sometimes take * \note Even with a timeout, lzma_code() might sometimes take
* somewhat long time to return. No timing guarantees * a long time to return. No timing guarantees are made.
* are made.
*/ */
uint32_t timeout; uint32_t timeout;
@ -171,12 +172,25 @@ typedef struct {
* with the currently supported options, so it is safe to leave these * with the currently supported options, so it is safe to leave these
* uninitialized. * uninitialized.
*/ */
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1; lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2; lzma_reserved_enum reserved_enum2;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum3; lzma_reserved_enum reserved_enum3;
/** \private Reserved member. */
uint32_t reserved_int1; uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2; uint32_t reserved_int2;
/** \private Reserved member. */
uint32_t reserved_int3; uint32_t reserved_int3;
/** \private Reserved member. */
uint32_t reserved_int4; uint32_t reserved_int4;
/** /**
@ -222,11 +236,22 @@ typedef struct {
*/ */
uint64_t memlimit_stop; uint64_t memlimit_stop;
/** \private Reserved member. */
uint64_t reserved_int7; uint64_t reserved_int7;
/** \private Reserved member. */
uint64_t reserved_int8; uint64_t reserved_int8;
/** \private Reserved member. */
void *reserved_ptr1; void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2; void *reserved_ptr2;
/** \private Reserved member. */
void *reserved_ptr3; void *reserved_ptr3;
/** \private Reserved member. */
void *reserved_ptr4; void *reserved_ptr4;
} lzma_mt; } lzma_mt;
@ -240,8 +265,7 @@ typedef struct {
* \param preset Compression preset (level and possible flags) * \param preset Compression preset (level and possible flags)
* *
* \return Number of bytes of memory required for the given * \return Number of bytes of memory required for the given
* preset when encoding. If an error occurs, for example * preset when encoding or UINT64_MAX on error.
* due to unsupported preset, UINT64_MAX is returned.
*/ */
extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset) extern LZMA_API(uint64_t) lzma_easy_encoder_memusage(uint32_t preset)
lzma_nothrow lzma_attr_pure; 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) * \param preset Compression preset (level and possible flags)
* *
* \return Number of bytes of memory required to decompress a file * \return Number of bytes of memory required to decompress a file
* that was compressed using the given preset. If an error * that was compressed using the given preset or UINT64_MAX
* occurs, for example due to unsupported preset, UINT64_MAX * on error.
* is returned.
*/ */
extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset) extern LZMA_API(uint64_t) lzma_easy_decoder_memusage(uint32_t preset)
lzma_nothrow lzma_attr_pure; 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 * \brief Initialize .xz Stream encoder using a preset number
* *
* This function is intended for those who just want to use the basic features * 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 * \param strm Pointer to lzma_stream that is at least initialized
* with LZMA_STREAM_INIT. * 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 * unsure. LZMA_CHECK_CRC32 is good too as long as the
* uncompressed file is not many gigabytes. * 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. * encode your data.
* - LZMA_MEM_ERROR: Memory allocation failed. * - LZMA_MEM_ERROR: Memory allocation failed.
* - LZMA_OPTIONS_ERROR: The given compression preset is not * - 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. * supported by this liblzma build.
* - LZMA_PROG_ERROR: One or more of the parameters have values * - LZMA_PROG_ERROR: One or more of the parameters have values
* that will never be valid. For example, strm == NULL. * 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( extern LZMA_API(lzma_ret) lzma_easy_encoder(
lzma_stream *strm, uint32_t preset, lzma_check check) 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(). * Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer * \param in Beginning of the input buffer
* \param in_size Size of the input buffer * \param in_size Size of the input buffer
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds. * *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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_BUF_ERROR: Not enough output buffer space.
* - LZMA_UNSUPPORTED_CHECK * - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR * - 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 * \brief Initialize .xz Stream encoder using a custom filter chain
* *
* \param strm Pointer to properly prepared lzma_stream * \param strm Pointer to lzma_stream that is at least initialized
* \param filters Array of filters. This must be terminated with * with LZMA_STREAM_INIT.
* filters[n].id = LZMA_VLI_UNKNOWN. See filter.h for * \param filters Array of filters terminated with
* more information. * .id == LZMA_VLI_UNKNOWN. See filters.h for more
* information.
* \param check Type of the integrity check to calculate from * \param check Type of the integrity check to calculate from
* uncompressed data. * uncompressed data.
* *
* \return - LZMA_OK: Initialization was successful. * \return Possible lzma_ret values:
* - LZMA_OK: Initialization was successful.
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_UNSUPPORTED_CHECK * - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR * - 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 * LZMA_FULL_BARRIER, and LZMA_FINISH. Support for LZMA_SYNC_FLUSH might be
* added in the future. * 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 * \param options Pointer to multithreaded compression options
* *
* \return - LZMA_OK * \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_UNSUPPORTED_CHECK * - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR * - 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 * No kind of flushing is supported, because the file format doesn't make
* it possible. * 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_MEM_ERROR
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
* - LZMA_PROG_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 * \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 * slightly bigger than the input data. This function calculates how much
* output buffer space is required to be sure that lzma_stream_buffer_encode() * output buffer space is required to be sure that lzma_stream_buffer_encode()
* doesn't return LZMA_BUF_ERROR. * 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 * \note The limit calculated by this function applies only to
* single-call encoding. Multi-call encoding may (and probably * single-call encoding. Multi-call encoding may (and probably
* will) have larger maximum expansion when encoding * 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. * 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) extern LZMA_API(size_t) lzma_stream_buffer_bound(size_t uncompressed_size)
lzma_nothrow; 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 * \brief Single-call .xz Stream encoder
* *
* \param filters Array of filters. This must be terminated with * \param filters Array of filters terminated with
* filters[n].id = LZMA_VLI_UNKNOWN. See filter.h * .id == LZMA_VLI_UNKNOWN. See filters.h for more
* for more information. * information.
* \param check Type of the integrity check to calculate from * \param check Type of the integrity check to calculate from
* uncompressed data. * uncompressed data.
* \param allocator lzma_allocator for custom allocator functions. * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free(). * Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer * \param in Beginning of the input buffer
* \param in_size Size of the input buffer * \param in_size Size of the input buffer
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds. * *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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_BUF_ERROR: Not enough output buffer space.
* - LZMA_UNSUPPORTED_CHECK * - LZMA_UNSUPPORTED_CHECK
* - LZMA_OPTIONS_ERROR * - 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 * uses too where many small streams are needed. XZ Embedded includes a
* decoder for this format. * 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 * and output produced. Store the amount of input used
* (uncompressed size) as it needs to be known to decompress * (uncompressed size) as it needs to be known to decompress
* the data. * 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. * output space (6 bytes) to create a valid MicroLZMA stream.
*/ */
extern LZMA_API(lzma_ret) lzma_microlzma_encoder( 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 * \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 * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
* to effectively disable the limiter. liblzma * to effectively disable the limiter. liblzma
* 5.2.3 and earlier don't allow 0 here and return * 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_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
* LZMA_CONCATENATED, LZMA_FAIL_FAST * 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_MEM_ERROR: Cannot allocate memory.
* - LZMA_OPTIONS_ERROR: Unsupported flags * - LZMA_OPTIONS_ERROR: Unsupported flags
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
@ -672,9 +720,6 @@ extern LZMA_API(lzma_ret) lzma_stream_decoder(
/** /**
* \brief Initialize multithreaded .xz 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 * The decoder can decode multiple Blocks in parallel. This requires that each
* Block Header contains the Compressed Size and Uncompressed size fields * Block Header contains the Compressed Size and Uncompressed size fields
* which are added by the multi-threaded encoder, see lzma_stream_encoder_mt(). * 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 * This function behaves like lzma_stream_decoder() when options->threads == 1
* and options->memlimit_threading <= 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_MEM_ERROR: Cannot allocate memory.
* - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
* - LZMA_OPTIONS_ERROR: Unsupported flags. * - 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 * as it doesn't support any decoder flags. It will return LZMA_STREAM_END
* after one .lzma stream.) * 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 * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
* to effectively disable the limiter. liblzma * to effectively disable the limiter. liblzma
* 5.2.3 and earlier don't allow 0 here and return * 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_TELL_ANY_CHECK, LZMA_IGNORE_CHECK,
* LZMA_CONCATENATED, LZMA_FAIL_FAST * 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_MEM_ERROR: Cannot allocate memory.
* - LZMA_OPTIONS_ERROR: Unsupported flags * - LZMA_OPTIONS_ERROR: Unsupported flags
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
@ -739,18 +791,20 @@ extern LZMA_API(lzma_ret) lzma_auto_decoder(
/** /**
* \brief Initialize .lzma decoder (legacy file format) * \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 * \param memlimit Memory usage limit as bytes. Use UINT64_MAX
* to effectively disable the limiter. liblzma * to effectively disable the limiter. liblzma
* 5.2.3 and earlier don't allow 0 here and return * 5.2.3 and earlier don't allow 0 here and return
* LZMA_PROG_ERROR; later versions treat 0 as if 1 * LZMA_PROG_ERROR; later versions treat 0 as if 1
* had been specified. * had been specified.
* *
* Valid `action' arguments to lzma_code() are LZMA_RUN and LZMA_FINISH. * \return Possible lzma_ret values:
* There is no need to use LZMA_FINISH, but it's allowed because it may * - LZMA_OK
* simplify certain types of applications.
*
* \return - LZMA_OK
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_PROG_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) * \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 * This decoder supports the .lz format version 0 and the unextended .lz
* format version 1: * 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 * 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. * 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_MEM_ERROR: Cannot allocate memory.
* - LZMA_OPTIONS_ERROR: Unsupported flags * - LZMA_OPTIONS_ERROR: Unsupported flags
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
@ -836,13 +892,14 @@ extern LZMA_API(lzma_ret) lzma_lzip_decoder(
* *in_pos is updated only if decoding succeeds. * *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that * \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size]. * won't be read is in[in_size].
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if decoding succeeds. * *out_pos is updated only if decoding succeeds.
* \param out_size Size of the out buffer; the first byte into * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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_FORMAT_ERROR
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
* - LZMA_DATA_ERROR * - LZMA_DATA_ERROR
@ -867,12 +924,13 @@ extern LZMA_API(lzma_ret) lzma_stream_buffer_decode(
/** /**
* \brief MicroLZMA decoder * \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 * The lzma_code() usage with this decoder is completely normal. The
* special behavior of lzma_code() applies to lzma_microlzma_encoder() only. * 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. * \param comp_size Compressed size of the MicroLZMA stream.
* The caller must somehow know this exactly. * The caller must somehow know this exactly.
* \param uncomp_size Uncompressed size of the MicroLZMA stream. * \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 * the implementation in XZ Embedded it doesn't
* affect the memory usage if one specifies bigger * affect the memory usage if one specifies bigger
* dictionary than actually required.) * 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( extern LZMA_API(lzma_ret) lzma_microlzma_decoder(
lzma_stream *strm, uint64_t comp_size, lzma_stream *strm, uint64_t comp_size,
uint64_t uncomp_size, lzma_bool uncomp_size_is_exact, 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 * \file lzma/delta.h
* \brief Delta filter * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -57,7 +56,15 @@ typedef struct {
* - 24-bit RGB image data: distance = 3 bytes * - 24-bit RGB image data: distance = 3 bytes
*/ */
uint32_t dist; uint32_t dist;
/**
* \brief Minimum value for lzma_options_delta.dist.
*/
# define LZMA_DELTA_DIST_MIN 1 # define LZMA_DELTA_DIST_MIN 1
/**
* \brief Maximum value for lzma_options_delta.dist.
*/
# define LZMA_DELTA_DIST_MAX 256 # 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 * when type is LZMA_DELTA_TYPE_BYTE, so it is safe to leave these
* uninitialized. * uninitialized.
*/ */
/** \private Reserved member. */
uint32_t reserved_int1; uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2; uint32_t reserved_int2;
/** \private Reserved member. */
uint32_t reserved_int3; uint32_t reserved_int3;
/** \private Reserved member. */
uint32_t reserved_int4; uint32_t reserved_int4;
/** \private Reserved member. */
void *reserved_ptr1; void *reserved_ptr1;
/** \private Reserved member. */
void *reserved_ptr2; void *reserved_ptr2;
} lzma_options_delta; } lzma_options_delta;

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/filter.h * \file lzma/filter.h
* \brief Common filter related types and functions * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -29,7 +28,7 @@
/** /**
* \brief Filter options * \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 * options to liblzma. A few functions work with a single lzma_filter
* structure, while most functions expect a filter chain. * structure, while most functions expect a filter chain.
* *
@ -37,8 +36,8 @@
* The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter * The array is terminated with .id = LZMA_VLI_UNKNOWN. Thus, the filter
* array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to * array must have LZMA_FILTERS_MAX + 1 elements (that is, five) to
* be able to hold any arbitrary filter chain. This is important when * be able to hold any arbitrary filter chain. This is important when
* using lzma_block_header_decode() from block.h, because too small * using lzma_block_header_decode() from block.h, because a filter array
* array would make liblzma write past the end of the filters array. * that is too small would make liblzma write past the end of the array.
*/ */
typedef struct { typedef struct {
/** /**
@ -68,12 +67,12 @@ typedef struct {
/** /**
* \brief Test if the given Filter ID is supported for encoding * \brief Test if the given Filter ID is supported for encoding
* *
* Return true if the give Filter ID is supported for encoding by this * \param id Filter ID
* liblzma build. Otherwise false is returned.
* *
* There is no way to list which filters are available in this particular * \return lzma_bool:
* liblzma version and build. It would be useless, because the application * - true if the Filter ID is supported for encoding by this
* couldn't know what kind of options the filter would need. * liblzma build.
* - false otherwise.
*/ */
extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id) extern LZMA_API(lzma_bool) lzma_filter_encoder_is_supported(lzma_vli id)
lzma_nothrow lzma_attr_const; 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 * \brief Test if the given Filter ID is supported for decoding
* *
* Return true if the give Filter ID is supported for decoding by this * \param id Filter ID
* liblzma build. Otherwise false is returned. *
* \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) extern LZMA_API(lzma_bool) lzma_filter_decoder_is_supported(lzma_vli id)
lzma_nothrow lzma_attr_const; 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. * 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. * 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_MEM_ERROR
* - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options * - LZMA_OPTIONS_ERROR: Unsupported Filter ID and its options
* is not NULL. * is not NULL.
@ -137,8 +147,13 @@ extern LZMA_API(lzma_ret) lzma_filters_copy(
* - options will be set to NULL. * - options will be set to NULL.
* - id will be set to LZMA_VLI_UNKNOWN. * - id will be set to LZMA_VLI_UNKNOWN.
* *
* If filters is NULL, this does nothing but remember that this never frees * If filters is NULL, this does nothing. Again, this never frees the
* the filters array itself. * 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( extern LZMA_API(void) lzma_filters_free(
lzma_filter *filters, const lzma_allocator *allocator) lzma_filter *filters, const lzma_allocator *allocator)
@ -156,9 +171,7 @@ extern LZMA_API(void) lzma_filters_free(
* .id == LZMA_VLI_UNKNOWN. * .id == LZMA_VLI_UNKNOWN.
* *
* \return Number of bytes of memory required for the given * \return Number of bytes of memory required for the given
* filter chain when encoding. If an error occurs, * filter chain when encoding or UINT64_MAX on error.
* for example due to unsupported filter chain,
* UINT64_MAX is returned.
*/ */
extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters) extern LZMA_API(uint64_t) lzma_raw_encoder_memusage(const lzma_filter *filters)
lzma_nothrow lzma_attr_pure; 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. * .id == LZMA_VLI_UNKNOWN.
* *
* \return Number of bytes of memory required for the given * \return Number of bytes of memory required for the given
* filter chain when decoding. If an error occurs, * filter chain when decoding or UINT64_MAX on error.
* for example due to unsupported filter chain,
* UINT64_MAX is returned.
*/ */
extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters) extern LZMA_API(uint64_t) lzma_raw_decoder_memusage(const lzma_filter *filters)
lzma_nothrow lzma_attr_pure; 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. * 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 * The `action' with lzma_code() can be LZMA_RUN, LZMA_SYNC_FLUSH (if the
* filter chain supports it), or LZMA_FINISH. * 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_MEM_ERROR
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
* - LZMA_PROG_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 * The `action' with lzma_code() can be LZMA_RUN or LZMA_FINISH. Using
* LZMA_FINISH is not required, it is supported just for convenience. * 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_MEM_ERROR
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
* - LZMA_PROG_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). * chain to be used for the next Block(s).
* *
* - After LZMA_SYNC_FLUSH: Raw encoder (lzma_raw_encoder()), * - 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 * encoder (lzma_stream_encoder()) allow changing certain filter-specific
* options in the middle of encoding. The actual filters in the chain * 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 * (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 * as if LZMA_FULL_FLUSH (Stream encoders) or LZMA_SYNC_FLUSH (Raw or Block
* encoder) had been used right before calling this function. * 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_MEM_ERROR
* - LZMA_MEMLIMIT_ERROR * - LZMA_MEMLIMIT_ERROR
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
@ -262,29 +287,30 @@ extern LZMA_API(lzma_ret) lzma_filters_update(
/** /**
* \brief Single-call raw encoder * \brief Single-call raw encoder
* *
* \param filters Array of lzma_filter structures. The end of the * \note There is no function to calculate how big output buffer
* array must be marked with .id = LZMA_VLI_UNKNOWN. * 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. * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free(). * Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer * \param in Beginning of the input buffer
* \param in_size Size of the input buffer * \param in_size Size of the input buffer
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds. * *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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_BUF_ERROR: Not enough output buffer space.
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR * - LZMA_DATA_ERROR
* - LZMA_PROG_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( extern LZMA_API(lzma_ret) lzma_raw_buffer_encode(
const lzma_filter *filters, const lzma_allocator *allocator, 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 * \brief Single-call raw decoder
* *
* \param filters Array of lzma_filter structures. The end of the * \param filters Array of filters terminated with
* array must be marked with .id = LZMA_VLI_UNKNOWN. * .id == LZMA_VLI_UNKNOWN.
* \param allocator lzma_allocator for custom allocator functions. * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free(). * Set to NULL to use malloc() and free().
* \param in Beginning of the input buffer * \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. * *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that * \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size]. * won't be read is in[in_size].
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds. * *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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( extern LZMA_API(lzma_ret) lzma_raw_buffer_decode(
const lzma_filter *filters, const lzma_allocator *allocator, 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 * This function may be useful when implementing custom file formats
* using the raw encoder and decoder. * 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 * \note This function validates the Filter ID, but does not
* necessarily validate the options. Thus, it is possible * necessarily validate the options. Thus, it is possible
* that this returns LZMA_OK while the following call to * that this returns LZMA_OK while the following call to
* lzma_properties_encode() returns LZMA_OPTIONS_ERROR. * 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( extern LZMA_API(lzma_ret) lzma_properties_size(
uint32_t *size, const lzma_filter *filter) lzma_nothrow; 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 * \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 * \note Even this function won't validate more options than actually
* necessary. Thus, it is possible that encoding the properties * necessary. Thus, it is possible that encoding the properties
* succeeds but using the same options to initialize the encoder * 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 * of the Filter Properties field is zero, calling
* lzma_properties_encode() is not required, but it * lzma_properties_encode() is not required, but it
* won't do any harm either. * 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( extern LZMA_API(lzma_ret) lzma_properties_encode(
const lzma_filter *filter, uint8_t *props) lzma_nothrow; 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 * it's application's responsibility to free it when
* appropriate. filter->options is set to NULL if * appropriate. filter->options is set to NULL if
* there are no properties or if an error occurs. * there are no properties or if an error occurs.
* \param allocator Custom memory allocator used to allocate the * \param allocator lzma_allocator for custom allocator functions.
* options. Set to NULL to use the default malloc(), * Set to NULL to use malloc() and free().
* and in case of an error, also free(). * and in case of an error, also free().
* \param props Input buffer containing the properties. * \param props Input buffer containing the properties.
* \param props_size Size of the properties. This must be the exact * \param props_size Size of the properties. This must be the exact
* size; giving too much or too little input will * size; giving too much or too little input will
* return LZMA_OPTIONS_ERROR. * return LZMA_OPTIONS_ERROR.
* *
* \return - LZMA_OK * \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR * - LZMA_OPTIONS_ERROR
* - LZMA_MEM_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 * Knowing the size of Filter Flags is useful to know when allocating
* memory to hold the encoded Filter Flags. * 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 * \param filter Filter ID and associated options whose encoded
* size is to be calculated * 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 * guarantee that filter->options is valid, thus
* lzma_filter_flags_encode() may still fail. * lzma_filter_flags_encode() may still fail.
* - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options. * - LZMA_OPTIONS_ERROR: Unknown Filter ID or unsupported options.
* - LZMA_PROG_ERROR: Invalid 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( extern LZMA_API(lzma_ret) lzma_filter_flags_size(
uint32_t *size, const lzma_filter *filter) 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. * This is due to how this function is used internally by liblzma.
* *
* \param filter Filter ID and options to be encoded * \param filter Filter ID and options to be encoded
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos out[*out_pos] is the next write position. This * \param[out] out_pos out[*out_pos] is the next write position. This
* is updated by the encoder. * is updated by the encoder.
* \param out_size out[out_size] is the first byte to not write. * \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_OPTIONS_ERROR: Invalid or unsupported options.
* - LZMA_PROG_ERROR: Invalid options or not enough output * - LZMA_PROG_ERROR: Invalid options or not enough output
* buffer space (you should have checked it with * 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 * \brief Decode Filter Flags from given buffer
* *
* The decoded result is stored into *filter. The old value of * 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_OPTIONS_ERROR
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
*/ */
extern LZMA_API(lzma_ret) lzma_filter_flags_decode( 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 * 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. * 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 * With this flag, this validation is skipped. This flag doesn't affect the
* of the individual filter options). * 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) #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 * lzma_str_list_filters(). See the xz man page for the description
* of filter names and options. * 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 * 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. * 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 * 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); * printf("%s: %s\n", argv[0], msg);
* } * }
* \endcode * \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( extern LZMA_API(const char *) lzma_str_to_filters(
const char *str, int *error_pos, lzma_filter *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() * specify "6" to lzma_str_to_filters() then lzma_str_from_filters()
* will produce a string containing "lzma2". * 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 * allocated string describing the given filter
* chain. Old value is ignored. On error *str is * chain. Old value is ignored. On error *str is
* always set to NULL. * always set to NULL.
* \param filters Array of 1-4 filters and a terminating element * \param filters Array of filters terminated with
* with .id = LZMA_VLI_UNKNOWN. * .id == LZMA_VLI_UNKNOWN.
* \param flags Bitwise-or of zero or more of the flags * \param flags Bitwise-or of zero or more of the flags
* LZMA_STR_ENCODER, LZMA_STR_DECODER, * LZMA_STR_ENCODER, LZMA_STR_DECODER,
* LZMA_STR_GETOPT_LONG, and LZMA_STR_NO_SPACES. * LZMA_STR_GETOPT_LONG, and LZMA_STR_NO_SPACES.
* \param allocator lzma_allocator for custom allocator functions. * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free(). * Set to NULL to use malloc() and free().
* *
* \return - LZMA_OK * \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_OPTIONS_ERROR: Empty filter chain * - LZMA_OPTIONS_ERROR: Empty filter chain
* (filters[0].id == LZMA_VLI_UNKNOWN) or the filter chain * (filters[0].id == LZMA_VLI_UNKNOWN) or the filter chain
* includes a Filter ID that is not supported by this function. * 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 * 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 * 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 * If filter_id is LZMA_VLI_UNKNOWN then all supported .xz-compatible filters
* are listed: * 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 * - 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 * 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 * - If LZMA_STR_ALL_FILTERS is used then the list will include also
* those filters that cannot be used in the .xz format (LZMA1). * 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. * \param allocator lzma_allocator for custom allocator functions.
* Set to NULL to use malloc() and free(). * 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_OPTIONS_ERROR: Unsupported filter_id or flags
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR

View File

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

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/index.h * \file lzma/index.h
* \brief Handling of .xz Index and related information * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -50,8 +49,13 @@ typedef struct {
*/ */
const lzma_stream_flags *flags; const lzma_stream_flags *flags;
/** \private Reserved member. */
const void *reserved_ptr1; const void *reserved_ptr1;
/** \private Reserved member. */
const void *reserved_ptr2; const void *reserved_ptr2;
/** \private Reserved member. */
const void *reserved_ptr3; const void *reserved_ptr3;
/** /**
@ -107,9 +111,17 @@ typedef struct {
*/ */
lzma_vli padding; lzma_vli padding;
/** \private Reserved member. */
lzma_vli reserved_vli1; lzma_vli reserved_vli1;
/** \private Reserved member. */
lzma_vli reserved_vli2; lzma_vli reserved_vli2;
/** \private Reserved member. */
lzma_vli reserved_vli3; lzma_vli reserved_vli3;
/** \private Reserved member. */
lzma_vli reserved_vli4; lzma_vli reserved_vli4;
} stream; } stream;
@ -196,25 +208,46 @@ typedef struct {
*/ */
lzma_vli total_size; lzma_vli total_size;
/** \private Reserved member. */
lzma_vli reserved_vli1; lzma_vli reserved_vli1;
/** \private Reserved member. */
lzma_vli reserved_vli2; lzma_vli reserved_vli2;
/** \private Reserved member. */
lzma_vli reserved_vli3; lzma_vli reserved_vli3;
/** \private Reserved member. */
lzma_vli reserved_vli4; lzma_vli reserved_vli4;
/** \private Reserved member. */
const void *reserved_ptr1; const void *reserved_ptr1;
/** \private Reserved member. */
const void *reserved_ptr2; const void *reserved_ptr2;
/** \private Reserved member. */
const void *reserved_ptr3; const void *reserved_ptr3;
/** \private Reserved member. */
const void *reserved_ptr4; const void *reserved_ptr4;
} block; } block;
/* /**
* \private Internal struct.
*
* Internal data which is used to store the state of the iterator. * Internal data which is used to store the state of the iterator.
* The exact format may vary between liblzma versions, so don't * The exact format may vary between liblzma versions, so don't
* touch these in any way. * touch these in any way.
*/ */
union { union {
/** \private Internal member. */
const void *p; const void *p;
/** \private Internal member. */
size_t s; size_t s;
/** \private Internal member. */
lzma_vli v; lzma_vli v;
} internal[6]; } internal[6];
} lzma_index_iter; } lzma_index_iter;
@ -272,16 +305,21 @@ typedef enum {
* \brief Calculate memory usage of lzma_index * \brief Calculate memory usage of lzma_index
* *
* On disk, the size of the Index field depends on both the number of Records * 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 * 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 * 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 * 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. * 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 * the given number of Streams and Blocks in lzma_index structure. This
* value may vary between CPU architectures and also between liblzma versions * value may vary between CPU architectures and also between liblzma versions
* if the internal implementation is modified. * 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( extern LZMA_API(uint64_t) lzma_index_memusage(
lzma_vli streams, lzma_vli blocks) lzma_nothrow; 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), * This is a shorthand for lzma_index_memusage(lzma_index_stream_count(i),
* lzma_index_block_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) extern LZMA_API(uint64_t) lzma_index_memused(const lzma_index *i)
lzma_nothrow; 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 * \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 * \return On success, a pointer to an empty initialized lzma_index is
* returned. If allocation fails, NULL is returned. * 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 * \brief Deallocate lzma_index
* *
* If i is NULL, this does nothing. * 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( extern LZMA_API(void) lzma_index_end(
lzma_index *i, const lzma_allocator *allocator) lzma_nothrow; 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 * \brief Add a new Block to lzma_index
* *
* \param i Pointer to a lzma_index structure * \param i Pointer to a lzma_index structure
* \param allocator Pointer to lzma_allocator, or NULL to * \param allocator lzma_allocator for custom allocator
* use malloc() * functions. Set to NULL to use malloc()
* and free().
* \param unpadded_size Unpadded Size of a Block. This can be * \param unpadded_size Unpadded Size of a Block. This can be
* calculated with lzma_block_unpadded_size() * calculated with lzma_block_unpadded_size()
* after encoding or decoding the Block. * 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 * lzma_index_append() it is possible to read the next Block with
* an existing iterator. * an existing iterator.
* *
* \return - LZMA_OK * \return Possible lzma_ret values:
* - LZMA_OK
* - LZMA_MEM_ERROR * - LZMA_MEM_ERROR
* - LZMA_DATA_ERROR: Compressed or uncompressed size of the * - LZMA_DATA_ERROR: Compressed or uncompressed size of the
* Stream or size of the Index field would grow too big. * 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 * lzma_index, because to decode Blocks, knowing the integrity check type
* is needed. * is needed.
* *
* The given Stream Flags are copied into internal preallocated structure * \param i Pointer to lzma_index structure
* in the lzma_index, thus the caller doesn't need to keep the *stream_flags * \param stream_flags Pointer to lzma_stream_flags structure. This
* available after calling this function. * 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_OPTIONS_ERROR: Unsupported stream_flags->version.
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
*/ */
@ -376,6 +431,10 @@ extern LZMA_API(lzma_ret) lzma_index_stream_flags(
* showing the Check types to the user. * 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. * 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) extern LZMA_API(uint32_t) lzma_index_checks(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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. * 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_DATA_ERROR: The file size would grow too big.
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
*/ */
@ -401,6 +461,10 @@ extern LZMA_API(lzma_ret) lzma_index_stream_padding(
/** /**
* \brief Get the number of Streams * \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) extern LZMA_API(lzma_vli) lzma_index_stream_count(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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 * This returns the total number of Blocks in lzma_index. To get number
* of Blocks in individual Streams, use lzma_index_iter. * 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) extern LZMA_API(lzma_vli) lzma_index_block_count(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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 * \brief Get the size of the Index field as bytes
* *
* This is needed to verify the Backward Size field in the Stream Footer. * 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) extern LZMA_API(lzma_vli) lzma_index_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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 * 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 * were in a single Stream. This is useful if you are going to combine
* Blocks from multiple Streams into a single new Stream. * 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) extern LZMA_API(lzma_vli) lzma_index_stream_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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, * This doesn't include the Stream Header, Stream Footer, Stream Padding,
* or Index fields. * 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) extern LZMA_API(lzma_vli) lzma_index_total_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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(). * no Stream Padding, this function is identical to lzma_index_stream_size().
* If multiple lzma_indexes have been combined, this includes also the headers * If multiple lzma_indexes have been combined, this includes also the headers
* of each separate Stream and the possible Stream Padding fields. * 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) extern LZMA_API(lzma_vli) lzma_index_file_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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 * \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) extern LZMA_API(lzma_vli) lzma_index_uncompressed_size(const lzma_index *i)
lzma_nothrow lzma_attr_pure; 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 * \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 * This function associates the iterator with the given lzma_index, and calls
* lzma_index_iter_rewind() on the iterator. * 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, * It is safe to make copies of an initialized lzma_index_iter, for example,
* to easily restart reading at some particular position. * 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( extern LZMA_API(void) lzma_index_iter_init(
lzma_index_iter *iter, const lzma_index *i) lzma_nothrow; 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 * Rewind the iterator so that next call to lzma_index_iter_next() will
* return the first Block or Stream. * 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) extern LZMA_API(void) lzma_index_iter_rewind(lzma_index_iter *iter)
lzma_nothrow; 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 * \param mode Specify what kind of information the caller wants
* to get. See lzma_index_iter_mode for details. * to get. See lzma_index_iter_mode for details.
* *
* \return If next Block or Stream matching the mode was found, *iter * \return lzma_bool:
* is updated and this function returns false. If no Block or * - true if no Block or Stream matching the mode is found.
* Stream matching the mode is found, *iter is not modified * *iter is not updated (failure).
* and this function returns true. If mode is set to an unknown * - false if the next Block or Stream matching the mode was
* value, *iter is not modified and this function returns true. * found. *iter is updated (success).
*/ */
extern LZMA_API(lzma_bool) lzma_index_iter_next( extern LZMA_API(lzma_bool) lzma_index_iter_next(
lzma_index_iter *iter, lzma_index_iter_mode mode) 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 * the Index field(s) and use lzma_index_iter_locate() to do random-access
* reading with granularity of Block size. * 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 * If the target is smaller than the uncompressed size of the Stream (can be
* checked with lzma_index_uncompressed_size()): * checked with lzma_index_uncompressed_size()):
* - Information about the Stream and Block containing the requested * - Information about the Stream and Block containing the requested
* uncompressed offset is stored into *iter. * uncompressed offset is stored into *iter.
* - Internal state of the iterator is adjusted so that * - Internal state of the iterator is adjusted so that
* lzma_index_iter_next() can be used to read subsequent Blocks or Streams. * 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 * If the target is greater than the uncompressed size of the Stream, *iter
* is not modified, and this function returns true. * 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( extern LZMA_API(lzma_bool) lzma_index_iter_locate(
lzma_index_iter *iter, lzma_vli target) lzma_nothrow; 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 * multi-Stream .xz file, or when combining multiple Streams into single
* Stream. * 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 * \param src lzma_index to be appended after dest. If this
* function succeeds, the memory allocated for src * function succeeds, the memory allocated for src
* is freed or moved to be part of dest, and all * is freed or moved to be part of dest, and all
* iterators pointing to src will become invalid. * iterators pointing to src will become invalid.
* \param allocator Custom memory allocator; can be NULL to use * \param allocator lzma_allocator for custom allocator functions.
* malloc() and free(). * 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. * src is now a dangling pointer.
* - LZMA_DATA_ERROR: *dest would grow too big. * - LZMA_DATA_ERROR: *dest would grow too big.
* - LZMA_MEM_ERROR * - 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 * \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. * \return A copy of the lzma_index, or NULL if memory allocation failed.
*/ */
extern LZMA_API(lzma_index *) lzma_index_dup( 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. * 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). * 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_MEM_ERROR
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
*/ */
@ -601,7 +703,7 @@ extern LZMA_API(lzma_ret) lzma_index_encoder(
* \brief Initialize .xz Index decoder * \brief Initialize .xz Index decoder
* *
* \param strm Pointer to properly prepared lzma_stream * \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 * this pointer. Initially this function will
* set *i to NULL (the old value is ignored). If * set *i to NULL (the old value is ignored). If
* decoding succeeds (lzma_code() returns * 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 * There is no need to use LZMA_FINISH, but it's allowed because it may
* simplify certain types of applications. * 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_MEM_ERROR
* - LZMA_PROG_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 * but that error code has never been possible from this
* initialization function. * initialization function.
*/ */
@ -633,21 +736,23 @@ extern LZMA_API(lzma_ret) lzma_index_decoder(
/** /**
* \brief Single-call .xz Index encoder * \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 i lzma_index to be encoded
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \param[out] out_pos The next byte will be written to out[*out_pos].
* *out_pos is updated only if encoding succeeds. * *out_pos is updated only if encoding succeeds.
* \param out_size Size of the out buffer; the first byte into * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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_BUF_ERROR: Output buffer is too small. Use
* lzma_index_size() to find out how much output * lzma_index_size() to find out how much output
* space is needed. * space is needed.
* - LZMA_PROG_ERROR * - 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, 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; 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 * \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 * lzma_index, which the application has to
* later free with lzma_index_end(). If an error * later free with lzma_index_end(). If an error
* occurs, *i will be NULL. The old value of *i * occurs, *i will be NULL. The old value of *i
* is always ignored and thus doesn't need to be * is always ignored and thus doesn't need to be
* initialized by the caller. * 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 * lzma_index is allowed to require. The value
* pointed by this pointer is modified if and only * pointed by this pointer is modified if and only
* if LZMA_MEMLIMIT_ERROR is returned. * 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 Beginning of the input buffer
* \param in_pos The next byte will be read from in[*in_pos]. * \param in_pos The next byte will be read from in[*in_pos].
* *in_pos is updated only if decoding succeeds. * *in_pos is updated only if decoding succeeds.
* \param in_size Size of the input buffer; the first byte that * \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size]. * 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_MEM_ERROR
* - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached. * - LZMA_MEMLIMIT_ERROR: Memory usage limit was reached.
* The minimum required memlimit value was stored to *memlimit. * 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 * \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 * This decoder decodes the Stream Header, Stream Footer, Index, and
* Stream Padding field(s) from the input .xz file and stores the resulting * 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 * 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_MEMLIMIT_ERROR
* - LZMA_PROG_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_MEM_ERROR
* - LZMA_PROG_ERROR * - LZMA_PROG_ERROR
*/ */

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/index_hash.h * \file lzma/index_hash.h
* \brief Validate Index by using a hash function * \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 * Hashing makes it possible to use constant amount of memory to validate
* Index of arbitrary size. * Index of arbitrary size.
@ -11,8 +12,6 @@
* *
* This file has been put into the public domain. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #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 * \brief Allocate and initialize a new lzma_index_hash structure
* *
* If index_hash is NULL, a new lzma_index_hash structure is allocated, * If index_hash is NULL, this function allocates and initializes a new
* initialized, and a pointer to it returned. If allocation fails, NULL * lzma_index_hash structure and returns a pointer to it. If allocation
* is returned. * fails, NULL is returned.
* *
* If index_hash is non-NULL, it is reinitialized and the same pointer * If index_hash is non-NULL, this function reinitializes the lzma_index_hash
* returned. In this case, return value cannot be NULL or a different * structure and returns the same pointer. In this case, return value cannot
* pointer than the index_hash that was given as an argument. * 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( extern LZMA_API(lzma_index_hash *) lzma_index_hash_init(
lzma_index_hash *index_hash, const lzma_allocator *allocator) 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 * \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( extern LZMA_API(void) lzma_index_hash_end(
lzma_index_hash *index_hash, const lzma_allocator *allocator) 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 unpadded_size Unpadded Size of a Block
* \param uncompressed_size Uncompressed 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 * - LZMA_DATA_ERROR: Compressed or uncompressed size of the
* Stream or size of the Index field would grow too big. * Stream or size of the Index field would grow too big.
* - LZMA_PROG_ERROR: Invalid arguments or this function is being * - 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 index_hash Pointer to a lzma_index_hash structure
* \param in Pointer to the beginning of the input buffer * \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 * \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 * - LZMA_STREAM_END: Index decoded successfully and it matches
* the Records given with lzma_index_hash_append(). * the Records given with lzma_index_hash_append().
* - LZMA_DATA_ERROR: Index is corrupt or doesn't match the * - 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 * \brief Get the size of the Index field as bytes
* *
* This is needed to verify the Backward Size field in the Stream Footer. * 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( extern LZMA_API(lzma_vli) lzma_index_hash_size(
const lzma_index_hash *index_hash) const lzma_index_hash *index_hash)

View File

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

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/stream_flags.h * \file lzma/stream_flags.h
* \brief .xz Stream Header and Stream Footer encoder and decoder * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -36,7 +35,7 @@ typedef struct {
* *
* To prevent API and ABI breakages if new features are needed in * To prevent API and ABI breakages if new features are needed in
* Stream Header or Stream Footer, a version number is used to * 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 * version must always be zero. With non-zero version, the
* lzma_stream_header_encode() and lzma_stream_footer_encode() * lzma_stream_header_encode() and lzma_stream_footer_encode()
* will return LZMA_OPTIONS_ERROR. * will return LZMA_OPTIONS_ERROR.
@ -67,7 +66,15 @@ typedef struct {
* Footer have been decoded. * Footer have been decoded.
*/ */
lzma_vli backward_size; lzma_vli backward_size;
/**
* \brief Minimum value for lzma_stream_flags.backward_size
*/
# define LZMA_BACKWARD_SIZE_MIN 4 # 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) # 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 * is just two bytes plus Backward Size of four bytes. But it's
* nice to have the proper types when they are needed.) * nice to have the proper types when they are needed.)
*/ */
/** \private Reserved member. */
lzma_reserved_enum reserved_enum1; lzma_reserved_enum reserved_enum1;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum2; lzma_reserved_enum reserved_enum2;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum3; lzma_reserved_enum reserved_enum3;
/** \private Reserved member. */
lzma_reserved_enum reserved_enum4; lzma_reserved_enum reserved_enum4;
/** \private Reserved member. */
lzma_bool reserved_bool1; lzma_bool reserved_bool1;
/** \private Reserved member. */
lzma_bool reserved_bool2; lzma_bool reserved_bool2;
/** \private Reserved member. */
lzma_bool reserved_bool3; lzma_bool reserved_bool3;
/** \private Reserved member. */
lzma_bool reserved_bool4; lzma_bool reserved_bool4;
/** \private Reserved member. */
lzma_bool reserved_bool5; lzma_bool reserved_bool5;
/** \private Reserved member. */
lzma_bool reserved_bool6; lzma_bool reserved_bool6;
/** \private Reserved member. */
lzma_bool reserved_bool7; lzma_bool reserved_bool7;
/** \private Reserved member. */
lzma_bool reserved_bool8; lzma_bool reserved_bool8;
/** \private Reserved member. */
uint32_t reserved_int1; uint32_t reserved_int1;
/** \private Reserved member. */
uint32_t reserved_int2; uint32_t reserved_int2;
} lzma_stream_flags; } lzma_stream_flags;
@ -111,10 +146,11 @@ typedef struct {
* \param options Stream Header options to be encoded. * \param options Stream Header options to be encoded.
* options->backward_size is ignored and doesn't * options->backward_size is ignored and doesn't
* need to be initialized. * 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. * 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 * - LZMA_OPTIONS_ERROR: options->version is not supported by
* this liblzma version. * this liblzma version.
* - LZMA_PROG_ERROR: Invalid options. * - LZMA_PROG_ERROR: Invalid options.
@ -128,10 +164,11 @@ extern LZMA_API(lzma_ret) lzma_stream_header_encode(
* \brief Encode Stream Footer * \brief Encode Stream Footer
* *
* \param options Stream Footer options to be encoded. * \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. * 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 * - LZMA_OPTIONS_ERROR: options->version is not supported by
* this liblzma version. * this liblzma version.
* - LZMA_PROG_ERROR: Invalid options. * - LZMA_PROG_ERROR: Invalid options.
@ -144,32 +181,33 @@ extern LZMA_API(lzma_ret) lzma_stream_footer_encode(
/** /**
* \brief Decode Stream Header * \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 * options->backward_size is always set to LZMA_VLI_UNKNOWN. This is to
* help comparing Stream Flags from Stream Header and Stream Footer with * help comparing Stream Flags from Stream Header and Stream Footer with
* lzma_stream_flags_compare(). * 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 * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given
* buffer cannot be Stream Header. * buffer cannot be Stream Header.
* - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the header
* is corrupt. * is corrupt.
* - LZMA_OPTIONS_ERROR: Unsupported options are present * - LZMA_OPTIONS_ERROR: Unsupported options are present
* in the header. * 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( extern LZMA_API(lzma_ret) lzma_stream_header_decode(
lzma_stream_flags *options, const uint8_t *in) 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 * \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 * \param in Beginning of the input buffer of
* LZMA_STREAM_HEADER_SIZE bytes. * 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 * - LZMA_FORMAT_ERROR: Magic bytes don't match, thus the given
* buffer cannot be Stream Footer. * buffer cannot be Stream Footer.
* - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer * - LZMA_DATA_ERROR: CRC32 doesn't match, thus the Stream Footer
* is corrupt. * is corrupt.
* - LZMA_OPTIONS_ERROR: Unsupported options are present * - LZMA_OPTIONS_ERROR: Unsupported options are present
* in Stream Footer. * 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( extern LZMA_API(lzma_ret) lzma_stream_footer_decode(
lzma_stream_flags *options, const uint8_t *in) 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 * backward_size values are compared only if both are not
* LZMA_VLI_UNKNOWN. * 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 * to LZMA_VLI_UNKNOWN, backward_size values were not
* compared or validated. * compared or validated.
* - LZMA_DATA_ERROR: The structures differ. * - LZMA_DATA_ERROR: The structures differ.

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/version.h * \file lzma/version.h
* \brief Version number * \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. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -17,14 +16,26 @@
#endif #endif
/* /** \brief Major version number of the liblzma release. */
* Version number split into components
*/
#define LZMA_VERSION_MAJOR 5 #define LZMA_VERSION_MAJOR 5
/** \brief Minor version number of the liblzma release. */
#define LZMA_VERSION_MINOR 4 #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 #define LZMA_VERSION_STABILITY LZMA_VERSION_STABILITY_STABLE
/** \brief Commit version number of the liblzma release */
#ifndef LZMA_VERSION_COMMIT #ifndef LZMA_VERSION_COMMIT
# define LZMA_VERSION_COMMIT "" # define LZMA_VERSION_COMMIT ""
#endif #endif
@ -95,15 +106,16 @@
LZMA_VERSION_COMMIT) 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 #ifndef LZMA_H_INTERNAL_RC
/** /**
* \brief Run-time version number as an integer * \brief Run-time version number as an integer
* *
* Return the value of LZMA_VERSION macro at the compile time of liblzma. * This allows an application to compare if it was built against the same,
* This allows the application to compare if it was built against the same,
* older, or newer version of liblzma that is currently running. * 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) extern LZMA_API(uint32_t) lzma_version_number(void)
lzma_nothrow lzma_attr_const; 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 * \brief Run-time version as a string
* *
* This function may be useful if you want to display which version of * This function may be useful to display which version of liblzma an
* liblzma your application is currently using. * application is currently using.
*
* \return Run-time version of liblzma
*/ */
extern LZMA_API(const char *) lzma_version_string(void) extern LZMA_API(const char *) lzma_version_string(void)
lzma_nothrow lzma_attr_const; lzma_nothrow lzma_attr_const;

View File

@ -1,6 +1,7 @@
/** /**
* \file lzma/vli.h * \file lzma/vli.h
* \brief Variable-length integer handling * \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 * In the .xz format, most integers are encoded in a variable-length
* representation, which is sometimes called little endian base-128 encoding. * representation, which is sometimes called little endian base-128 encoding.
@ -19,8 +20,6 @@
* *
* This file has been put into the public domain. * This file has been put into the public domain.
* You can do whatever you want with this file. * You can do whatever you want with this file.
*
* See ../lzma.h for information about liblzma as a whole.
*/ */
#ifndef LZMA_H_INTERNAL #ifndef LZMA_H_INTERNAL
@ -70,7 +69,8 @@ typedef uint64_t lzma_vli;
* for example in the uncompressed_size and compressed_size variables. * for example in the uncompressed_size and compressed_size variables.
* *
* \return True if the integer is representable as VLI or if it * \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) \ #define lzma_vli_is_valid(vli) \
((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN) ((vli) <= LZMA_VLI_MAX || (vli) == LZMA_VLI_UNKNOWN)
@ -86,12 +86,12 @@ typedef uint64_t lzma_vli;
* integer has been encoded. * integer has been encoded.
* *
* \param vli Integer to be 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 * out. When starting to encode a new integer in
* multi-call mode, *vli_pos must be set to zero. * multi-call mode, *vli_pos must be set to zero.
* To use single-call encoding, set vli_pos to NULL. * To use single-call encoding, set vli_pos to NULL.
* \param out Beginning of the output buffer * \param[out] out Beginning of the output buffer
* \param out_pos The next byte will be written to out[*out_pos]. * \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 * \param out_size Size of the out buffer; the first byte into
* which no data is written to is out[out_size]. * 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. * 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 * initialize it to zero when *vli_pos == 0, so
* application isn't required to initialize *vli. * 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 * starting to decode a new integer in multi-call
* mode, *vli_pos must be initialized to zero. To * mode, *vli_pos must be initialized to zero. To
* use single-call decoding, set vli_pos to NULL. * use single-call decoding, set vli_pos to NULL.
* \param in Beginning of the input buffer * \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 * \param in_size Size of the input buffer; the first byte that
* won't be read is in[in_size]. * 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 /// lzma_crc32_table[0] is needed by LZ encoder so we need to keep
/// the array two-dimensional. /// the array two-dimensional.
#ifdef HAVE_SMALL #ifdef HAVE_SMALL
lzma_attr_visibility_hidden
extern uint32_t lzma_crc32_table[1][256]; extern uint32_t lzma_crc32_table[1][256];
extern void lzma_crc32_init(void); extern void lzma_crc32_init(void);
#else #else
lzma_attr_visibility_hidden
extern const uint32_t lzma_crc32_table[8][256]; extern const uint32_t lzma_crc32_table[8][256];
lzma_attr_visibility_hidden
extern const uint64_t lzma_crc64_table[4][256]; extern const uint64_t lzma_crc64_table[4][256];
#endif #endif
/// \brief Initialize *check depending on type /// \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); extern void lzma_check_init(lzma_check_state *check, lzma_check type);
/// Update the check state /// Update the check state

View File

@ -184,6 +184,20 @@ calc_hi(uint64_t poly, uint64_t a)
MASK_H(in, mask, high) 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 // EDG-based compilers (Intel's classic compiler and compiler for E2K) can
// define __GNUC__ but the attribute must not be used with them. // define __GNUC__ but the attribute must not be used with them.
// The new Clang-based ICX needs the attribute. // 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__) #if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
__attribute__((__target__("ssse3,sse4.1,pclmul"))) __attribute__((__target__("ssse3,sse4.1,pclmul")))
#endif #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 static uint64_t
crc64_clmul(const uint8_t *buf, size_t size, uint64_t crc) 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 // C = buf + size == aligned_buf + size2
// D = buf + size + skip_end == aligned_buf + size2 + skip_end // 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_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 *)( const __m128i *aligned_buf = (const __m128i *)(
(uintptr_t)buf & ~(uintptr_t)15); (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 # pragma GCC diagnostic pop
#endif #endif
} }
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__clang__) \
&& defined(_M_IX86)
# pragma optimize("", on)
#endif
#endif #endif

View File

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

View File

@ -8,7 +8,7 @@
/// conditionally to keep the code working on older boxes. /// conditionally to keep the code working on older boxes.
// //
// This code is based on the code found from 7-Zip, which has a modified // 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. // The code was modified a little to fit into liblzma.
// //
// Authors: Kevin Springle // 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 static lzma_ret
alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, alone_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator,
const lzma_options_lzma *options) 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) extern LZMA_API(lzma_ret)
lzma_alone_encoder(lzma_stream *strm, const lzma_options_lzma *options) 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) if (ret != LZMA_BUF_ERROR)
return ret; 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 // given to us) or the output buffer was too small. Use the
// uncompressed chunks of LZMA2 to wrap the data into a valid // uncompressed chunks of LZMA2 to wrap the data into a valid
// Block. If we haven't been given enough output space, even // 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; 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, lzma_check_update(&coder->check, coder->block->check,
out + out_start, out_used); out + out_start, out_used);

View File

@ -77,6 +77,9 @@ block_encode(void *coder_ptr, const lzma_allocator *allocator,
// checked it at the beginning of this function. // checked it at the beginning of this function.
coder->uncompressed_size += in_used; coder->uncompressed_size += 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, lzma_check_update(&coder->check, coder->block->check,
in + in_start, in_used); in + in_start, in_used);

View File

@ -35,7 +35,8 @@ lzma_version_string(void)
// Memory allocation // // 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) lzma_alloc(size_t size, const lzma_allocator *allocator)
{ {
// Some malloc() variants return NULL if called with size == 0. // 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) lzma_alloc_zero(size_t size, const lzma_allocator *allocator)
{ {
// Some calloc() variants return NULL if called with size == 0. // 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_in, &in_pos, strm->avail_in,
strm->next_out, &out_pos, strm->avail_out, action); strm->next_out, &out_pos, strm->avail_out, action);
// 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->next_in += in_pos;
strm->avail_in -= in_pos; strm->avail_in -= in_pos;
strm->total_in += in_pos; strm->total_in += in_pos;
}
if (out_pos > 0) {
strm->next_out += out_pos; strm->next_out += out_pos;
strm->avail_out -= out_pos; strm->avail_out -= out_pos;
strm->total_out += out_pos; strm->total_out += out_pos;
}
strm->internal->avail_in = strm->avail_in; strm->internal->avail_in = strm->avail_in;

View File

@ -17,17 +17,28 @@
#include "mythread.h" #include "mythread.h"
#include "tuklib_integer.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__) #if defined(_WIN32) || defined(__CYGWIN__)
# ifdef DLL_EXPORT # ifdef DLL_EXPORT
# define LZMA_API_EXPORT __declspec(dllexport) # define LZMA_API_EXPORT __declspec(dllexport)
# else # else
# define LZMA_API_EXPORT # define LZMA_API_EXPORT
# endif # endif
# define lzma_attr_visibility_hidden
// Don't use ifdef or defined() below. // Don't use ifdef or defined() below.
#elif HAVE_VISIBILITY #elif HAVE_VISIBILITY
# define LZMA_API_EXPORT __attribute__((__visibility__("default"))) # define LZMA_API_EXPORT __attribute__((__visibility__("default")))
# define lzma_attr_visibility_hidden \
__attribute__((__visibility__("hidden")))
#else #else
# define LZMA_API_EXPORT # define LZMA_API_EXPORT
# define lzma_attr_visibility_hidden
#endif #endif
#define LZMA_API(type) LZMA_API_EXPORT type LZMA_API_CALL #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. // to 2 then symbol versioning is done only if also PIC is defined.
// By default Libtool defines PIC when building a shared library and // By default Libtool defines PIC when building a shared library and
// doesn't define it when building a static library but it can be // 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. // on PIC if neither --with-pic or --without-pic was used.
#if defined(HAVE_SYMBOL_VERSIONS_LINUX) \ #if defined(HAVE_SYMBOL_VERSIONS_LINUX) \
&& (HAVE_SYMBOL_VERSIONS_LINUX == 2 && !defined(PIC)) && (HAVE_SYMBOL_VERSIONS_LINUX == 2 && !defined(PIC))
@ -87,6 +98,23 @@
# endif # endif
#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 // These allow helping the compiler in some often-executed branches, whose
// result is almost always the same. // result is almost always the same.
#ifdef __GNUC__ #ifdef __GNUC__
@ -297,14 +325,14 @@ struct lzma_internal_s {
/// Allocates memory /// Allocates memory
extern void *lzma_alloc(size_t size, const lzma_allocator *allocator) lzma_attr_alloc_size(1)
lzma_attribute((__malloc__)) 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 /// Allocates memory and zeroes it (like calloc()). This can be faster
/// than lzma_alloc() + memzero() while being backward compatible with /// than lzma_alloc() + memzero() while being backward compatible with
/// custom allocators. /// custom allocators.
extern void * lzma_attribute((__malloc__)) lzma_attr_alloc_size(1) lzma_attr_alloc_size(1)
lzma_alloc_zero(size_t size, const lzma_allocator *allocator); extern void *lzma_alloc_zero(size_t size, const lzma_allocator *allocator);
/// Frees memory /// Frees memory
extern void lzma_free(void *ptr, const lzma_allocator *allocator); 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]. // coder->temp[coder->temp_size - LZMA_STREAM_HEADER_SIZE].
// //
// Otherwise we will need to seek. The seeking is done so // 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 // This way it's likely that we also get a complete Index
// field into coder->temp without needing a separate seek // field into coder->temp without needing a separate seek
// for that (unless the Index field is big). // for that (unless the Index field is big).

View File

@ -37,9 +37,12 @@ typedef struct {
uint64_t (*block_size)(const void *options); uint64_t (*block_size)(const void *options);
/// Tells the size of the Filter Properties field. If options are /// Tells the size of the Filter Properties field. If options are
/// invalid, UINT32_MAX is returned. If this is NULL, props_size_fixed /// invalid, LZMA_OPTIONS_ERROR is returned and size is set to
/// is used. /// UINT32_MAX.
lzma_ret (*props_size_get)(uint32_t *size, const void *options); 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; uint32_t props_size_fixed;
/// Encodes Filter Properties. /// Encodes Filter Properties.
@ -216,17 +219,17 @@ lzma_filters_update(lzma_stream *strm, const lzma_filter *filters)
extern lzma_ret extern lzma_ret
lzma_raw_encoder_init(lzma_next_coder *next, const lzma_allocator *allocator, 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, 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) 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); (lzma_filter_find)(&encoder_find), true);
strm->internal->supported_actions[LZMA_RUN] = true; strm->internal->supported_actions[LZMA_RUN] = true;

View File

@ -10,6 +10,7 @@
// //
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#include "common.h"
#include "index.h" #include "index.h"
#include "stream_flags_common.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) if (uncompressed_base + uncompressed_size > LZMA_VLI_MAX)
return LZMA_DATA_ERROR; 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. // Check that the file size will stay within limits.
if (index_file_size(s->node.compressed_base, if (index_file_size(s->node.compressed_base,
compressed_base + unpadded_size, s->record_count + 1, compressed_base + unpadded_size, s->record_count + 1,

View File

@ -2,6 +2,13 @@
// //
/// \file index.h /// \file index.h
/// \brief Handling of Index /// \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 // Author: Lasse Collin
// //
@ -13,8 +20,6 @@
#ifndef LZMA_INDEX_H #ifndef LZMA_INDEX_H
#define LZMA_INDEX_H #define LZMA_INDEX_H
#include "common.h"
/// Minimum Unpadded Size /// Minimum Unpadded Size
#define UNPADDED_SIZE_MIN LZMA_VLI_C(5) #define UNPADDED_SIZE_MIN LZMA_VLI_C(5)
@ -22,6 +27,9 @@
/// Maximum Unpadded Size /// Maximum Unpadded Size
#define UNPADDED_SIZE_MAX (LZMA_VLI_MAX & ~LZMA_VLI_C(3)) #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 /// Get the size of the Index Padding field. This is needed by Index encoder
/// and decoder, but applications should have no use for this. /// 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 static inline lzma_vli
vli_ceil4(lzma_vli vli) vli_ceil4(lzma_vli vli)
{ {
assert(vli <= LZMA_VLI_MAX); assert(vli <= UNPADDED_SIZE_MAX);
return (vli + 3) & ~LZMA_VLI_C(3); 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 // format". One could argue that the application should
// verify the Index Indicator before trying to decode the // verify the Index Indicator before trying to decode the
// Index, but well, I suppose it is simpler this way. // 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; return LZMA_DATA_ERROR;
coder->sequence = SEQ_COUNT; coder->sequence = SEQ_COUNT;
@ -203,9 +203,16 @@ index_decode(void *coder_ptr, const lzma_allocator *allocator,
} }
out: out:
// Update the 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, coder->crc32 = lzma_crc32(in + in_start,
*in_pos - in_start, coder->crc32); in_used, coder->crc32);
}
return ret; return ret;
} }

View File

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

View File

@ -65,7 +65,7 @@ index_encode(void *coder_ptr,
while (*out_pos < out_size) while (*out_pos < out_size)
switch (coder->sequence) { switch (coder->sequence) {
case SEQ_INDICATOR: case SEQ_INDICATOR:
out[*out_pos] = 0x00; out[*out_pos] = INDEX_INDICATOR;
++*out_pos; ++*out_pos;
coder->sequence = SEQ_COUNT; coder->sequence = SEQ_COUNT;
break; break;
@ -153,8 +153,15 @@ index_encode(void *coder_ptr,
out: out:
// Update the CRC32. // Update the 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, coder->crc32 = lzma_crc32(out + out_start,
*out_pos - out_start, coder->crc32); out_used, coder->crc32);
}
return ret; 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) lzma_vli uncompressed_size)
{ {
// Validate the arguments. // 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_MIN
|| unpadded_size > UNPADDED_SIZE_MAX || unpadded_size > UNPADDED_SIZE_MAX
|| uncompressed_size > LZMA_VLI_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) { switch (index_hash->sequence) {
case SEQ_BLOCK: case SEQ_BLOCK:
// Check the Index Indicator is present. // Check the Index Indicator is present.
if (in[(*in_pos)++] != 0x00) if (in[(*in_pos)++] != INDEX_INDICATOR)
return LZMA_DATA_ERROR; return LZMA_DATA_ERROR;
index_hash->sequence = SEQ_COUNT; index_hash->sequence = SEQ_COUNT;
@ -328,9 +328,16 @@ lzma_index_hash_decode(lzma_index_hash *index_hash, const uint8_t *in,
} }
out: out:
// Update the 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, index_hash->crc32 = lzma_crc32(in + in_start,
*in_pos - in_start, index_hash->crc32); in_used, index_hash->crc32);
}
return ret; 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 five lowest bits are for the base-2 logarithm of
// the dictionary size and the highest three bits are // the dictionary size and the highest three bits are
// the fractional part (0/16 to 7/16) that will be // 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: // For example, with 0xB5:
// b2log = 21 // b2log = 21
@ -262,7 +262,11 @@ lzip_decode(void *coder_ptr, const lzma_allocator *allocator,
coder->member_size += *in_pos - in_start; coder->member_size += *in_pos - in_start;
coder->uncompressed_size += out_used; 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 = lzma_crc32(out + out_start, out_used,
coder->crc32); coder->crc32);

View File

@ -19,6 +19,16 @@
# include <immintrin.h> # include <immintrin.h>
#endif #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. /// 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 /// It's rounded up to 2^n. This extra amount needs to be
/// allocated in the buffers being used. It needs to be /// allocated in the buffers being used. It needs to be
/// initialized too to keep Valgrind quiet. /// 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, lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
uint32_t len, uint32_t limit) uint32_t len, uint32_t limit)
{ {
@ -59,11 +69,13 @@ lzma_memcmplen(const uint8_t *buf1, const uint8_t *buf2,
while (len < limit) { while (len < limit) {
const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len); const uint64_t x = read64ne(buf1 + len) - read64ne(buf2 + len);
if (x != 0) { 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; unsigned long tmp;
_BitScanForward64(&tmp, x); _BitScanForward64(&tmp, x);
len += (uint32_t)tmp >> 3; 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; len += (uint32_t)__builtin_ctzll(x) >> 3;
# endif # endif
return my_min(len, limit); 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. // version isn't used on x86-64.
# define LZMA_MEMCMPLEN_EXTRA 16 # define LZMA_MEMCMPLEN_EXTRA 16
while (len < limit) { 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 *)(buf1 + len)),
_mm_loadu_si128((const __m128i *)(buf2 + 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 // Encode the properties byte. Bitwise-negation of it will be the
// first output byte. // 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. // Initialize the LZMA encoder.
const lzma_filter_info filters[2] = { const lzma_filter_info filters[2] = {

View File

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

View File

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

View File

@ -629,7 +629,7 @@ get_thread(struct lzma_stream_coder *coder, const lzma_allocator *allocator)
coder->thr = coder->threads_free; coder->thr = coder->threads_free;
coder->threads_free = coder->threads_free->next; 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 // it from the cached memory usage. Don't add it
// to mem_in_use though; the caller will handle it // to mem_in_use though; the caller will handle it
// since it knows how much memory it will actually // 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) { if (coder->pos == 0) {
// Detect if it's Index. // Detect if it's Index.
if (in[*in_pos] == 0x00) if (in[*in_pos] == INDEX_INDICATOR)
return LZMA_INDEX_DETECTED; return LZMA_INDEX_DETECTED;
// Calculate the size of the Block Header. Note that // 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 // values after we read these as those changes can only be
// towards more favorable conditions (less memory in use, // towards more favorable conditions (less memory in use,
// more in cache). // more in cache).
uint64_t mem_in_use; //
uint64_t mem_cached; // These are initialized to silence warnings.
struct worker_thread *thr = NULL; // Init to silence warning. uint64_t mem_in_use = 0;
uint64_t mem_cached = 0;
struct worker_thread *thr = NULL;
mythread_sync(coder->mutex) { mythread_sync(coder->mutex) {
mem_in_use = coder->mem_in_use; 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_* // 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. // or add the changes.
mythread_sync(coder->mutex) { mythread_sync(coder->mutex) {
coder->mem_cached -= mem_freed; 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. // coder->mem_cached might count the same thing twice.
// If so, this will get corrected in get_thread() when // If so, this will get corrected in get_thread() when
// a worker_thread is picked from coder->free_threads // 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_in_use += coder->mem_next_in
+ coder->mem_next_filters; + coder->mem_next_filters;
} }

View File

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

View File

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

View File

@ -197,7 +197,7 @@ typedef struct {
/// (default is uint32_t). /// (default is uint32_t).
/// ///
/// Stringifying a filter is done by processing a given number of options /// 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. /// 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 /// 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); assert(*str < str_end);
*preset = (uint32_t)(**str - '0'); *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) { while (++*str < str_end) {
switch (**str) { switch (**str) {
case 'e': case 'e':
@ -466,9 +466,9 @@ static const struct {
/// If the flag LZMA_STR_ENCODER is used then the first /// If the flag LZMA_STR_ENCODER is used then the first
/// strfy_encoder elements of optmap are stringified. /// strfy_encoder elements of optmap are stringified.
/// With LZMA_STR_DECODER strfy_decoder is used. /// 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, /// 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; const option_map *optmap;
uint8_t strfy_encoder; uint8_t strfy_encoder;
uint8_t strfy_decoder; 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 /// 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 /// 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 * static const char *
parse_options(const char **const str, const char *str_end, parse_options(const char **const str, const char *str_end,
void *filter_options, void *filter_options,
@ -667,7 +667,7 @@ parse_options(const char **const str, const char *str_end,
&& *p >= '0' && *p <= '9'); && *p >= '0' && *p <= '9');
if (p < name_eq_value_end) { 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 // used for error messages that are
// specifically about the suffix. (Out of // specifically about the suffix. (Out of
// range values are about the whole value // 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). /// 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. /// This way the caller knows where in the string a possible error occurred.
static const char * static const char *
str_to_filters(const char **const str, lzma_filter *filters, uint32_t flags, 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) ? "=" : ":"; const char *opt_delim = (flags & LZMA_STR_GETOPT_LONG) ? "=" : ":";
for (size_t i = 0; filters[i].id != LZMA_VLI_UNKNOWN; ++i) { 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 // Don't add a space between filters if the caller
// doesn't want them. // doesn't want them.
if (i > 0 && !(flags & LZMA_STR_NO_SPACES)) if (i > 0 && !(flags & LZMA_STR_NO_SPACES))

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