aboutsummaryrefslogtreecommitdiff
path: root/src/common (follow)
AgeCommit message (Collapse)AuthorFilesLines
2023-11-22tuklib_integer: Fix typo discovered by codespell.Jia Tan1-1/+1
Based on internet dictionary searches, 'choise' is an outdated spelling of 'choice'.
2023-10-22mythread.h: Make MYTHREAD_POSIX compatible with MinGW-w64's winpthreads.Lasse Collin1-1/+22
This might be almost useless but it doesn't need much extra code either.
2023-10-18tuklib_integer: Revise unaligned reads and writes on strict-align archs.Lasse Collin1-67/+189
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-18tuklib_integer: Add missing write64be and write64le fallback functions.Lasse Collin1-0/+34
2023-09-24tuklib_physmem: Comment out support for Windows versions older than 2000.Lasse Collin1-11/+9
2023-09-24sysdefs.h: Update the comment about __USE_MINGW_ANSI_STDIO.Lasse Collin1-1/+9
2023-09-22MSVC: #define inline and restrict only when needed.Lasse Collin1-5/+8
This also drops the check for _WIN32 as that shouldn't be needed.
2023-09-22tuklib: Update tuklib_attr_noreturn for C11/C17 and C23.Lasse Collin2-3/+23
This makes no difference for GCC or Clang as they support GNU C's __attribute__((__noreturn__)) but this helps with MSVC: - VS 2019 version 16.7 and later support _Noreturn if the options /std:c11 or /std:c17 are used. This gets handled with the check for __STDC_VERSION__ >= 201112. - When MSVC isn't in C11/C17 mode, __declspec(noreturn) is used. C23 will deprecate _Noreturn (and <stdnoreturn.h>) for [[noreturn]]. This commit anticipates that but the final __STDC_VERSION__ value isn't known yet.
2023-08-08mythread.h: Fix typo error in Vista threads mythread_once().Jamaika11-1/+1
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-08-01mythread.h: Disable signal functions in builds targeting Wasm + WASI.ChanTsune1-1/+1
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-05-04tuklib_integer.h: Reverts previous commit.Jia Tan1-2/+2
Previous commit 6be460dde07113fe3f08f814b61ddc3264125a96 would cause an error if the integer size was 32 bit.
2023-05-04tuklib_integer.h: Changes two other UINT_MAX == UINT32_MAX to >=.Jia Tan1-2/+2
2023-05-03tuklib_integer.h: Fix a recent copypaste error in Clang detection.Lasse Collin1-2/+2
Wrong line was changed in 7062348bf35c1e4cbfee00ad9fffb4a21aa6eff7. Also, this has >= instead of == since ints larger than 32 bits would work too even if not relevant in practice.
2023-04-19Windows: Include <intrin.h> when needed.Jia Tan1-0/+6
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-19tuklib_integer: Use __builtin_clz() with Clang.Jia Tan1-3/+3
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-01-26tuklib_physmem: Check for __has_warning before GCC version.Lasse Collin1-3/+3
Clang can be configured to fake a too high GCC version so this way it's more robust.
2023-01-24Revert "tuklib_common: Define __has_warning if it is not defined."Lasse Collin1-7/+0
This reverts commit 82e3c968bfa10e3ff13333bd9cbbadb5988d6766. Macros in the reserved namespace (_foo or __foo) shouldn't be #defined without a very good reason. Here the alternative would have been to #define tuklib_has_warning(str) to an approriate value. Also the tuklib_* files should stay namespace clean if possible.
2023-01-24tuklib_physmem: Clean up the way -Wcast-function-type is silenced on Windows.Lasse Collin1-4/+13
__has_warning and other __has_foo macros are meant to become compiler-agnostic so it's not good to check for __clang__ with it. This also relied on tuklib_common.h for #defining __has_warning which was confusing as #defining reserved macros is generally not a good idea.
2023-01-19tuklib_physmem: Silence warning from -Wcast-function-type on MinGW-w64.Jia Tan1-0/+9
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-01-19tuklib_common: Define __has_warning if it is not defined.Jia Tan1-0/+7
clang supports the __has_warning macro to determine if the version of clang compiling the code supports a given warning. If we do not define it for other compilers, it may cause a preprocessor error.
2023-01-12xz: Silence warnings from -Wsign-conversion in a 32-bit build.Lasse Collin1-1/+1
2023-01-12liblzma: Silence a warning from -Wsign-conversion in a 32-bit build.Lasse Collin1-2/+2
2023-01-10sysdefs.h: Don't include strings.h anymore.Lasse Collin1-6/+0
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-10sysdefs.h: Fix a comment.Lasse Collin1-1/+1
2023-01-10sysdefs.h: Don't include memory.h anymore even if it were available.Lasse Collin1-6/+2
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-06Style: Change #if !defined() to #ifndef in mythread.h.Jia Tan1-1/+1
2023-01-02Build: Only define HAVE_PROGRAM_INVOCATION_NAME if it is set to 1.Jia Tan2-2/+2
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.
2022-12-30liblzma: Includes sys/time.h conditionally in mythreadJia Tan1-1/+7
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.
2022-12-30Build: No longer require HAVE_DECL_CLOCK_MONOTONIC to always be set.Jia Tan1-2/+2
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.
2022-10-31Windows: Fix mythread_once() macro with Vista threads.Lasse Collin1-3/+4
Don't call InitOnceComplete() if initialization was already done. So far mythread_once() has been needed only when building with --enable-small. windows/build.bash does this together with --disable-threads so the Vista-specific mythread_once() is never needed by those builds. VS project files or CMake-builds don't support HAVE_SMALL builds at all.
2022-10-20tuklib_cpucores: Use HW_NCPUONLINE on OpenBSD.Lasse Collin1-0/+9
On OpenBSD the number of cores online is often less than what HW_NCPU would return because OpenBSD disables simultaneous multi-threading (SMT) by default. Thanks to Christian Weisgerber.
2022-10-05tuklib_integer: Add 64-bit endianness-converting reads and writes.Lasse Collin1-2/+44
Also update the comment in liblzma's memcmplen.h. Thanks to Michał Górny for the original patch for the reads.
2022-09-28tuklib_physmem: Fix Unicode builds on Windows.Lasse Collin1-1/+1
Thanks to ArSaCiA Game.
2020-07-12Windows: Fix building of resource files when config.h isn't used.Lasse Collin1-1/+3
Now CMake + Visual Studio works for building liblzma.dll. Thanks to Markus Rickert.
2020-02-22Use defined(__GNUC__) before __GNUC__ in preprocessor lines.Lasse Collin1-1/+2
This should silence the equivalent of -Wundef in compilers that don't define __GNUC__.
2020-02-20tuklib_exit: Add missing header.Lasse Collin1-0/+1
strerror() needs <string.h> which happened to be included via tuklib_common.h -> tuklib_config.h -> sysdefs.h if HAVE_CONFIG_H was defined. This wasn't tested without config.h before so it had worked fine.
2020-02-18Revert the previous commit and add a comment.Lasse Collin1-7/+10
The previous commit broke crc32_tablegen.c. If the whole package is built without config.h (with defines set on the compiler command line) this should still work fine as long as these headers conform to C99 well enough.
2020-02-17Do not check for HAVE_CONFIG_H in tuklib_config.h.Lasse Collin1-8/+7
In XZ Utils sysdefs.h takes care of it and the required headers.
2020-02-16sysdefs.h: Omit the conditionals around string.h and limits.h.Lasse Collin1-6/+2
string.h is used unconditionally elsewhere in the project and configure has always stopped if limits.h is missing, so these headers must have been always available even on the weirdest systems.
2019-12-31Rename unaligned_read32ne to read32ne, and similarly for the others.Lasse Collin1-34/+30
2019-12-31Rename read32ne to aligned_read32ne, and similarly for the others.Lasse Collin1-28/+28
Using the aligned methods requires more care to ensure that the address really is aligned, so it's nicer if the aligned methods are prefixed. The next commit will remove the unaligned_ prefix from the unaligned methods which in liblzma are used in more places than the aligned ones.
2019-12-31Revise tuklib_integer.h and .m4.Lasse Collin1-217/+271
Add a configure option --enable-unsafe-type-punning to get the old non-conforming memory access methods. It can be useful with old compilers or in some other less typical situations but shouldn't normally be used. Omit the packed struct trick for unaligned access. While it's best in some cases, this is simpler. If the memcpy trick doesn't work, one can request unsafe type punning from configure. Because CRC32/CRC64 code needs fast aligned reads, if no very safe way to do it is found, type punning is used as a fallback. This sucks but since it currently works in practice, it seems to be the least bad option. It's never needed with GCC >= 4.7 or Clang >= 3.6 since these support __builtin_assume_aligned and thus fast aligned access can be done with the memcpy trick. Other things: - Support GCC/Clang __builtin_bswapXX - Cleaner bswap fallback macros - Minor cleanups
2019-07-12Fix comment typos in tuklib_mbstr* files.Lasse Collin3-3/+3
2019-07-12Add missing include to tuklib_mbstr_width.c.Lasse Collin1-0/+1
It didn't matter in XZ Utils because sysdefs.h includes string.h anyway.
2019-07-12Update tuklib base headers to include stdbool.h.Lasse Collin2-1/+2
2019-06-23tuklib_mbstr_width: Fix a warning from -Wsign-conversion.Lasse Collin1-1/+1
2019-06-23tuklib_cpucores: Silence warnings from -Wsign-conversion.Lasse Collin1-5/+5
2019-06-23tuklib_integer: Silence warnings from -Wsign-conversion.Lasse Collin1-3/+3
2019-06-20tuklib_integer: Fix usage of conv macros.Lasse Collin1-4/+8
Use a temporary variable instead of e.g. conv32le(unaligned_read32ne(buf)) because the macro can evaluate its argument multiple times.
2019-06-01tuklib_integer: Cleanup MSVC-specific code.Lasse Collin1-11/+9
2019-06-01tuklib_integer: Improve unaligned memory access.Lasse Collin1-12/+168
Now memcpy() or GNU C packed structs for unaligned access instead of type punning. See the comment in this commit for details. Avoiding type punning with unaligned access is needed to silence gcc -fsanitize=undefined. New functions: unaliged_readXXne and unaligned_writeXXne where XX is 16, 32, or 64.
2018-01-10tuklib_integer: New Intel C compiler needs immintrin.h.Lasse Collin1-0/+11
Thanks to Melanie Blower (Intel) for the patch.
2017-04-19Update the home page URLs to HTTPS.Lasse Collin1-1/+1
2016-10-24tuklib_cpucores: Add support for sched_getaffinity().Lasse Collin1-0/+9
It's available in glibc (GNU/Linux, GNU/kFreeBSD). It's better than sysconf(_SC_NPROCESSORS_ONLN) because sched_getaffinity() gives the number of cores available to the process instead of the total number of cores online. As a side effect, this commit fixes a bug on GNU/kFreeBSD where configure would detect the FreeBSD-specific cpuset_getaffinity() but it wouldn't actually work because on GNU/kFreeBSD it requires using -lfreebsd-glue when linking. Now the glibc-specific function will be used instead. Thanks to Sebastian Andrzej Siewior for the original patch and testing.
2015-11-08tuklib_physmem: Hopefully silence a warning on Windows.Lasse Collin1-1/+2
2015-03-29Fix the detection of installed RAM on QNX.Lasse Collin1-1/+13
The earlier version compiled but didn't actually work since sysconf(_SC_PHYS_PAGES) always fails (or so I was told). Thanks to Ole André Vadla Ravnås for the patch and testing.
2015-02-10tuklib_cpucores: Use cpuset_getaffinity() on FreeBSD if available.Lasse Collin1-0/+18
In FreeBSD, cpuset_getaffinity() is the preferred way to get the number of available cores. Thanks to Rui Paulo for the patch. I edited it slightly, but hopefully I didn't break anything.
2015-02-03Add a few casts to tuklib_integer.h to silence possible warnings.Lasse Collin1-12/+12
I heard that Visual Studio 2013 gave warnings without the casts. Thanks to Gabi Davar.
2014-12-21Fix build when --disable-threads is used.Lasse Collin1-0/+2
2014-10-09Add support for AmigaOS/AROS to tuklib_physmem().Lasse Collin1-0/+7
Thanks to Fredrik Wikstrom.
2014-01-12Windows: Add MSVC defines for inline and restrict keywords.Lasse Collin1-0/+10
2014-01-12Fix typos in comments.Lasse Collin1-1/+1
2013-09-17Add native threading support on Windows.Lasse Collin1-111/+402
Now liblzma only uses "mythread" functions and types which are defined in mythread.h matching the desired threading method. Before Windows Vista, there is no direct equivalent to pthread condition variables. Since this package doesn't use pthread_cond_broadcast(), pre-Vista threading can still be kept quite simple. The pre-Vista code doesn't use anything that wasn't already available in Windows 95, so the binaries should run even on Windows 95 if someone happens to care.
2013-08-04Fix the previous commit which broke the build.Lasse Collin1-1/+1
Apparently I didn't even compile-test the previous commit. Thanks to Christian Hesse.
2013-08-03Windows: Add Windows support to tuklib_cpucores().Lasse Collin1-1/+12
It is used for Cygwin too. I'm not sure if that is a good or bad idea. Thanks to Vincent Torri.
2012-12-14liblzma: Fix mythread_sync for nested locking.Lasse Collin1-2/+3
2011-08-09Workaround unusual SIZE_MAX on SCO OpenServer.Lasse Collin1-3/+6
2011-05-28Don't call close(-1) in tuklib_open_stdxxx() on error.Lasse Collin1-1/+3
Thanks to Jim Meyering.
2011-05-17Don't use clockid_t in mythread.h when clock_gettime() isn't available.Lasse Collin1-0/+2
Thanks to Wim Lewis for the patch.
2011-04-19Fix portability problems in mythread.h.Lasse Collin1-4/+27
Use gettimeofday() if clock_gettime() isn't available (e.g. Darwin). The test for availability of pthread_condattr_setclock() and CLOCK_MONOTONIC was incorrect. Instead of fixing the #ifdefs, use an Autoconf test. That way if there exists a system that supports them but doesn't specify the matching POSIX #defines, the features will still get detected. Don't try to use pthread_sigmask() on OpenVMS. It doesn't have that function. Guard mythread.h against being #included multiple times.
2011-04-10Revise mythread.h.Lasse Collin1-20/+180
This adds: - mythread_sync() macro to create synchronized blocks - mythread_cond structure and related functions and macros for condition variables with timed waiting using a relative timeout - mythread_create() to create a thread with all signals blocked Some of these wouldn't need to be inline functions, but I'll keep them this way for now for simplicity. For timed waiting on a condition variable, librt is now required on some systems to use clock_gettime(). configure.ac was updated to handle this.
2011-01-18Add alloc_size and malloc attributes to a few functions.Lasse Collin1-0/+6
Thanks to Cristian Rodríguez for the original patch.
2010-12-12Add missing PRIx32 and PRIx64 compatibility definitions.Lasse Collin1-0/+9
This fixes portability to systems that lack C99 inttypes.h. Thanks to Juan Manuel Guerrero.
2010-10-23Windows: Use MinGW's stdio functions.Lasse Collin1-0/+5
The non-standard ones from msvcrt.dll appear to work most of the time with XZ Utils, but there are some corner cases where things may go very wrong. So it's good to use the better replacements provided by MinGW(-w64) runtime.
2010-10-09Windows: Update common_w32res.rc.Lasse Collin1-6/+3
2010-09-10xz: Multiple fixes.Lasse Collin3-0/+161
The code assumed that printing numbers with thousand separators and decimal points would always produce only US-ASCII characters. This was used for buffer sizes (with snprintf(), no overflows) and aligning columns of the progress indicator and --list. That assumption was wrong (e.g. LC_ALL=fi_FI.UTF-8 with glibc), so multibyte character support was added in this commit. The old way is used if the operating system doesn't have enough multibyte support (e.g. lacks wcwidth()). The sizes of buffers were increased to accomodate multibyte characters. I don't know how big they should be exactly, but they aren't used for anything critical, so it's not too bad. If they still aren't big enough, I hopefully get a bug report. snprintf() takes care of avoiding buffer overflows. Some static buffers were replaced with buffers allocated on stack. double_to_str() was removed. uint64_to_str() and uint64_to_nicestr() now share the static buffer and test for thousand separator support. Integrity check names "None" and "Unknown-N" (2 <= N <= 15) were marked to be translated. I had forgot these, plus they wouldn't have worked correctly anyway before this commit, because printing tables with multibyte strings didn't work. Thanks to Marek Černocký for reporting the bug about misaligned table columns in --list output.
2010-09-07Fix use of N_() and ngettext().Lasse Collin1-2/+2
I had somehow thought that N_() is usually used as shorthand for ngettext(). This also fixes a missing \n from a call to ngettext().
2010-05-26Rename MIN() and MAX() to my_min() and my_max().Lasse Collin1-7/+5
This should avoid some minor portability issues.
2010-05-26Better #error message.Lasse Collin1-2/+2
2010-05-10Updates to tuklib_physmem and tuklib_cpucores.Lasse Collin2-3/+44
Don't use #error to generate compile error, because some compilers actually don't take it as an error. This fixes tuklib_physmem on IRIX. Fix incorrect error check for sysconf() return values. Add AIX, HP-UX, and Tru64 specific code to detect the amount RAM. Add HP-UX specific code to detect the number of CPU cores. Thanks a lot to Peter O'Gorman for initial patches, testing, and debugging these fixes.
2010-02-12Collection of language fixes to comments and docs.Lasse Collin2-2/+2
Thanks to Jonathan Nieder.
2010-01-27Silence two compiler warnings on DOS-like systems.Lasse Collin1-1/+5
2010-01-12Add IRIX-specific code to tuklib_physmem and tuklib_cpucores.Lasse Collin2-0/+25
This is untested but it will get tested soon and, if needed, fixed before 5.0.0. Thanks to Stuart Shelton.
2009-11-26Typo fix to sysdefs.h.Lasse Collin1-1/+1
Thanks to Jonathan Nieder.
2009-11-22Update tuklib_integer.h with bit scan functions.Lasse Collin1-8/+181
Thanks to Joachim Henke for the original patch.
2009-10-04Use a tuklib module for integer handling.Lasse Collin4-223/+357
This replaces bswap.h and integer.h. The tuklib module uses <byteswap.h> on GNU, <sys/endian.h> on *BSDs and <sys/byteorder.h> on Solaris, which may contain optimized code like inline assembly.
2009-09-27Work around a bug in Interix header files.Lasse Collin1-0/+6
Thanks to Markus Duft for the patch.
2009-09-22Avoid non-standard preprocessor construct.Lasse Collin1-4/+7
Thanks to Jouk Jansen.
2009-09-21Make sure that TUKLIB_DOSLIKE doesn't get defined on Cygwin.Lasse Collin1-1/+2
Thanks to Charles Wilson.
2009-09-19Various changes.Lasse Collin14-65/+410
Separate a few reusable components from XZ Utils specific code. The reusable code is now in "tuklib" modules. A few more could be separated still, e.g. bswap.h. Fix some bugs in lzmainfo. Fix physmem and cpucores code on OS/2. Thanks to Elbert Pol for help. Add OpenVMS support into physmem. Add a few #ifdefs to ease building XZ Utils on OpenVMS. Thanks to Jouk Jansen for the original patch.
2009-09-05Add OS/2-specific code to physmem.h.Lasse Collin1-11/+21
Also move DJGPP-specific code near the code meant for other DOS-like systems.
2009-09-05Use sysctl() != -1 instead of !sysctl() to check ifLasse Collin2-2/+2
the function call succeeded. NetBSD 4.0 returns positive values on success, but NetBSD Current and FreeBSD return zero. OpenBSD's man page doesn't tell what sysctl() returns on success. All these BSDs return -1 on error. Thanks to Robert Elz and Thomas Klausner.
2009-08-29Fix sysctl() usage.Lasse Collin2-2/+2
This fixes build on *BSDs and Darwin. Thanks to Jukka Salmi for the patches. Richard Koch reported the problem too.
2009-07-18Added public domain notice into a few files.Lasse Collin1-1/+8
2009-06-27Make physmem() work on Cygwin 1.5 and older.Lasse Collin1-37/+40
2009-06-27Moved the Windows resource files outside the windows directoryLasse Collin1-0/+46
to prepare for building them with Autotools.
2009-06-24Support HW_PHYSMEM64Lasse Collin1-11/+19
2009-04-13Put the interesting parts of XZ Utils into the public domain.Lasse Collin7-31/+21
Some minor documentation cleanups were made at the same time.
2009-03-18Fix wrong macro names in lc_cpucores.m4 and cpucores.h.Lasse Collin1-2/+2
Thanks to Bert Wesarg.
2009-02-15Make physmem.h work on old Windows versions.Lasse Collin1-4/+27
Thanks to Hongbo Ni for the original patch.
2009-02-14Cleanups to the code that detects the amount of RAM andLasse Collin2-8/+65
the number of CPU cores. Added support for using sysinfo() on Linux systems whose libc lacks appropriate sysconf() support (at least dietlibc). The Autoconf macros were split into separate files, and CPU core count detection was moved from hardware.c to cpucores.h. The core count isn't used for anything real for now, so a problematic part in process.c was commented out.
2009-02-13Improve support for DOS-like systems.Lasse Collin2-0/+16
Here DOS-like means DOS, Windows, and OS/2.
2009-02-08Fix aliasing issue in physmem.h.Lasse Collin1-9/+10
2009-02-05Various code cleanups the the xz command line tool.Lasse Collin1-0/+13
It now builds with MinGW.
2009-01-31Add LZMA_API to liblzma API headers. It's useful at leastLasse Collin1-2/+0
on Windows. sysdefs.h no longer #includes lzma.h, so lzma.h has to be #included separately where needed.
2009-01-07Use pthread_sigmask() instead of sigprocmask() when pthreadsLasse Collin1-0/+6
are enabled.
2008-12-31Remove lzma_init() and other init functions from liblzma API.Lasse Collin1-0/+34
Half of developers were already forgetting to use these functions, which could have caused total breakage in some future liblzma version or even now if --enable-small was used. Now liblzma uses pthread_once() to do the initializations unless it has been built with --disable-threads which make these initializations thread-unsafe. When --enable-small isn't used, liblzma currently gets needlessly linked against libpthread (on systems that have it). While it is stupid for now, liblzma will need threads in future anyway, so this stupidity will be temporary only. When --enable-small is used, different code CRC32 and CRC64 is now used than without --enable-small. This made the resulting binary slightly smaller, but the main reason was to clean it up and to handle the lack of lzma_init_check(). The pkg-config file lzma.pc was renamed to liblzma.pc. I'm not sure if it works correctly and portably for static linking (Libs.private includes -pthread or other operating system specific flags). Hopefully someone complains if it is bad. lzma_rc_prices[] is now included as a precomputed array even with --enable-small. It's just 128 bytes now that it uses uint8_t instead of uint32_t. Smaller array seemed to be at least as fast as the more bloated uint32_t array on x86; hopefully it's not bad on other architectures.
2008-11-19Oh well, big messy commit again. Some highlights:Lasse Collin3-14/+17
- Updated to the latest, probably final file format version. - Command line tool reworked to not use threads anymore. Threading will probably go into liblzma anyway. - Memory usage limit is now about 30 % for uncompression and about 90 % for compression. - Progress indicator with --verbose - Simplified --help and full --long-help - Upgraded to the last LGPLv2.1+ getopt_long from gnulib. - Some bug fixes
2008-09-11Fix a compiler error on big endian systems that don'tLasse Collin1-14/+18
support unaligned memory access.
2008-08-28Sort of garbage collection commit. :-| Many things are stillLasse Collin2-17/+51
broken. API has changed a lot and it will still change a little more here and there. The command line tool doesn't have all the required changes to reflect the API changes, so it's easy to get "internal error" or trigger assertions.
2008-06-18Update the code to mostly match the new simpler file formatLasse Collin2-0/+211
specification. Simplify things by removing most of the support for known uncompressed size in most places. There are some miscellaneous changes here and there too. The API of liblzma has got many changes and still some more will be done soon. While most of the code has been updated, some things are not fixed (the command line tool will choke with invalid filter chain, if nothing else). Subblock filter is somewhat broken for now. It will be updated once the encoded format of the Subblock filter has been decided.
2008-05-11Remove support for pre-C89 libc versions that lack memcpy,Lasse Collin1-13/+2
memmove, and memset.
2008-01-16Added ARRAY_SIZE(array) macro.Lasse Collin1-0/+4
2008-01-08More pre-C99 inttypes.h compatibility fixes. Now the codeLasse Collin1-11/+0
should work even if the system has no inttypes.h.
2008-01-06Introduced compatibility with systems that have pre-C99Lasse Collin1-1/+58
or no inttypes.h. This is useful when the compiler has good enough support for C99, but libc headers don't. Changed liblzma API so that sys/types.h and inttypes.h have to be #included before #including lzma.h. On systems that don't have C99 inttypes.h, it's the problem of the applications to provide the required types and macros before #including lzma.h. If lzma.h defined the missing types and macros, it could conflict with third-party applications whose configure has detected that the types are missing and defined them in config.h already. An alternative would have been introducing lzma_uint32 and similar types, but that would just be an extra pain on modern systems.
2007-12-09Imported to git.Lasse Collin3-0/+227