aboutsummaryrefslogtreecommitdiff
path: root/src/liblzma
diff options
context:
space:
mode:
Diffstat (limited to 'src/liblzma')
-rw-r--r--src/liblzma/Makefile.am5
-rw-r--r--src/liblzma/api/Makefile.am1
-rw-r--r--src/liblzma/api/lzma.h3
-rw-r--r--src/liblzma/api/lzma/hardware.h51
-rw-r--r--src/liblzma/common/Makefile.inc1
-rw-r--r--src/liblzma/common/hardware_physmem.c25
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();
+}