diff options
Diffstat (limited to '')
-rw-r--r-- | src/liblzma/Makefile.am | 5 | ||||
-rw-r--r-- | src/liblzma/api/Makefile.am | 1 | ||||
-rw-r--r-- | src/liblzma/api/lzma.h | 3 | ||||
-rw-r--r-- | src/liblzma/api/lzma/hardware.h | 51 | ||||
-rw-r--r-- | src/liblzma/common/Makefile.inc | 1 | ||||
-rw-r--r-- | src/liblzma/common/hardware_physmem.c | 25 |
6 files changed, 84 insertions, 2 deletions
diff --git a/src/liblzma/Makefile.am b/src/liblzma/Makefile.am index 6d5753b1..a4d2c1e6 100644 --- a/src/liblzma/Makefile.am +++ b/src/liblzma/Makefile.am @@ -12,7 +12,7 @@ CLEANFILES = doc_DATA = lib_LTLIBRARIES = liblzma.la -liblzma_la_SOURCES = +liblzma_la_SOURCES = $(top_srcdir)/src/common/tuklib_physmem.c liblzma_la_CPPFLAGS = \ -I$(top_srcdir)/src/liblzma/api \ -I$(top_srcdir)/src/liblzma/common \ @@ -23,7 +23,8 @@ liblzma_la_CPPFLAGS = \ -I$(top_srcdir)/src/liblzma/subblock \ -I$(top_srcdir)/src/liblzma/delta \ -I$(top_srcdir)/src/liblzma/simple \ - -I$(top_srcdir)/src/common + -I$(top_srcdir)/src/common \ + -DTUKLIB_SYMBOL_PREFIX=lzma_ liblzma_la_LDFLAGS = -no-undefined -version-info 0:0:0 include $(srcdir)/common/Makefile.inc diff --git a/src/liblzma/api/Makefile.am b/src/liblzma/api/Makefile.am index 0992d221..4536b0ac 100644 --- a/src/liblzma/api/Makefile.am +++ b/src/liblzma/api/Makefile.am @@ -14,6 +14,7 @@ nobase_include_HEADERS = \ lzma/container.h \ lzma/delta.h \ lzma/filter.h \ + lzma/hardware.h \ lzma/index.h \ lzma/index_hash.h \ lzma/lzma.h \ diff --git a/src/liblzma/api/lzma.h b/src/liblzma/api/lzma.h index dab29636..f5ab30d1 100644 --- a/src/liblzma/api/lzma.h +++ b/src/liblzma/api/lzma.h @@ -308,6 +308,9 @@ extern "C" { #include "lzma/index.h" #include "lzma/index_hash.h" +/* Hardware information */ +#include "lzma/hardware.h" + /* * All subheaders included. Undefine LZMA_H_INTERNAL to prevent applications * re-including the subheaders. diff --git a/src/liblzma/api/lzma/hardware.h b/src/liblzma/api/lzma/hardware.h new file mode 100644 index 00000000..f44cb602 --- /dev/null +++ b/src/liblzma/api/lzma/hardware.h @@ -0,0 +1,51 @@ +/** + * \file lzma/hardware.h + * \brief Hardware information + * + * Since liblzma can consume a lot of system resources, it also provides + * ways to limit the resource usage. Applications linking against liblzma + * need to do the actual decisions how much resources to let liblzma to use. + * To ease making these decisions, liblzma provides functions to find out + * the relevant capabilities of the underlaying hardware. Currently there + * is only a function to find out the amount of RAM, but in the future there + * will be also a function to detect how many concurrent threads the system + * can run. + * + * \note On some operating systems, these function may temporarily + * load a shared library or open file descriptor(s) to find out + * the requested hardware information. Unless the application + * assumes that specific file descriptors are not touched by + * other threads, this should have no effect on thread safety. + * Possible operations involving file descriptors will restart + * the syscalls if they return EINTR. + */ + +/* + * Author: Lasse Collin + * + * This file has been put into the public domain. + * You can do whatever you want with this file. + * + * See ../lzma.h for information about liblzma as a whole. + */ + +#ifndef LZMA_H_INTERNAL +# error Never include this file directly. Use <lzma.h> instead. +#endif + + +/** + * \brief Get the total amount of physical memory (RAM) in bytes + * + * This function may be useful when determining a reasonable memory + * usage limit for decompressing or how much memory it is OK to use + * for compressing. For example, the default limit used by the xz + * command line tool is 40 % of RAM. + * + * \return On success, the total amount of physical memory in bytes + * is returned. If the amount of RAM cannot be determined, + * zero is returned. This can happen if an error occurs + * or if there is no code in liblzma to detect the amount + * of RAM on the specific operating system. + */ +extern LZMA_API(uint64_t) lzma_physmem(void) lzma_nothrow; diff --git a/src/liblzma/common/Makefile.inc b/src/liblzma/common/Makefile.inc index aaaeee93..29f43ff1 100644 --- a/src/liblzma/common/Makefile.inc +++ b/src/liblzma/common/Makefile.inc @@ -14,6 +14,7 @@ liblzma_la_SOURCES += \ common/easy_preset.h \ common/filter_common.c \ common/filter_common.h \ + common/hardware_physmem.c \ common/index.c \ common/index.h \ common/stream_flags_common.c \ diff --git a/src/liblzma/common/hardware_physmem.c b/src/liblzma/common/hardware_physmem.c new file mode 100644 index 00000000..7405b658 --- /dev/null +++ b/src/liblzma/common/hardware_physmem.c @@ -0,0 +1,25 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \file hardware_physmem.c +/// \brief Get the total amount of physical memory (RAM) +// +// Author: Jonathan Nieder +// +// This file has been put into the public domain. +// You can do whatever you want with this file. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "common.h" + +#include "tuklib_physmem.h" + + +extern LZMA_API(uint64_t) +lzma_physmem(void) +{ + // It is simpler to make lzma_physmem() a wrapper for + // tuklib_physmem() than to hack appropriate symbol visiblity + // support for the tuklib modules. + return tuklib_physmem(); +} |