This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new f031dc56046 Documentation: document lzf command.
f031dc56046 is described below

commit f031dc56046a4128208cb628346d866a7bb16a81
Author: hanzj <[email protected]>
AuthorDate: Thu May 28 08:25:37 2026 +0800

    Documentation: document lzf command.
    
    Add documentation for the lzf compression/decompression command.
    The lzf tool uses the liblzf library to compress and decompress
    files using the lightweight LZF algorithm.
    
    Refs #11081
    
    Signed-off-by: hanzj <[email protected]>
---
 Documentation/applications/system/lzf/index.rst | 162 ++++++++++++++++++++++++
 1 file changed, 162 insertions(+)

diff --git a/Documentation/applications/system/lzf/index.rst 
b/Documentation/applications/system/lzf/index.rst
index 4fe8c761d39..01ee313861e 100644
--- a/Documentation/applications/system/lzf/index.rst
+++ b/Documentation/applications/system/lzf/index.rst
@@ -1,3 +1,165 @@
 ============================
 ``lzf`` LZF compression tool
 ============================
+
+Overview
+========
+
+The ``lzf`` command compresses and decompresses files using the LZF
+algorithm by Marc Alexander Lehmann.  LZF is a very lightweight
+compression format optimized for speed; it trades a modest compression
+ratio for fast decompression that is nearly as fast as a memory copy.
+
+The tool reads input files (or ``stdin`` when no files are given),
+writes the result to a derived output file (or ``stdout``), and
+optionally removes the original on success.
+
+File format
+-----------
+
+An LZF stream consists of zero or more blocks.  Each block starts
+with the two-byte magic ``ZV`` followed by a type byte:
+
+- **Type 0** (5-byte header): uncompressed literal — 2-byte length,
+  then raw data.
+- **Type 1** (7-byte header): compressed — 2-byte compressed length,
+  2-byte uncompressed length, then LZF-compressed data.
+
+A ``\x00`` byte signals end-of-stream.
+
+Configuration
+=============
+
+Enable the command with ``CONFIG_SYSTEM_LZF`` (tristate).  This
+option depends on ``CONFIG_LIBC_LZF``, which provides the core
+compression and decompression library.
+
+Additional configuration symbols:
+
+- ``CONFIG_SYSTEM_LZF_BLOG`` — Log2 of the block size used for
+  compression and decompression (default ``10``, range 9–12).  The
+  actual block size is ``(1 << BLOG) - 1`` bytes.  Larger values may
+  yield slightly better compression at the cost of more static memory
+  (approximately ``2 * (1 << BLOG)`` bytes of ``.bss``).
+- ``CONFIG_SYSTEM_LZF_PROGNAME`` — Program name registered with NSH
+  (default ``"lzf"``).
+- ``CONFIG_SYSTEM_LZF_PRIORITY`` — Task priority (default ``100``).
+- ``CONFIG_SYSTEM_LZF_STACKSIZE`` — Task stack size (default
+  ``DEFAULT_TASK_STACKSIZE``).
+
+Usage
+=====
+
+.. code-block:: console
+
+   lzf [-cdfvh] [-b <size>] [file ...]
+   lzf -h
+
+When no ``file`` arguments are given, ``lzf`` reads from ``stdin``
+and writes to ``stdout``.  The ``-f`` flag is required in this mode
+if the data direction would otherwise be a terminal (to prevent
+accidental interactive use).
+
+When files are given, the output file name is derived automatically:
+
+- **Compress** (default or ``-c``): the first ``.`` in the filename is
+  replaced with ``_``, and a ``.lzf`` suffix is appended.  For
+  example, ``data.bin`` becomes ``data_bin.lzf``.
+- **Decompress** (``-d``): the ``.lzf`` suffix is stripped and the
+  first ``_`` is replaced back with ``.``.  For example,
+  ``data_bin.lzf`` becomes ``data.bin``.
+
+On success the original file is removed (replaced).
+
+Options
+=======
+
+.. list-table::
+   :header-rows: 1
+
+   * - Option
+     - Description
+   * - ``-c``
+     - Compress (default mode).
+   * - ``-d``
+     - Decompress.
+   * - ``-f``
+     - Force overwrite of the output file.  Also suppresses the
+       terminal-safety check when reading from ``stdin`` or writing
+       to ``stdout``.
+   * - ``-h``
+     - Show usage information and exit.
+   * - ``-v``
+     - Verbose mode.  Prints the compression ratio and the output
+       filename for each processed file on ``stderr``.
+   * - ``-b <size>``
+     - Set the block size in bytes.  Must be between 1 and
+       ``(1 << CONFIG_SYSTEM_LZF_BLOG) - 1``.  Values outside this
+       range are silently clamped to the compiled-in default.
+
+Environment
+-----------
+
+When ``CONFIG_DISABLE_ENVIRON`` is not set, the ``LZF_BLOCKSIZE``
+environment variable can override the default block size.  The
+command-line ``-b`` option takes precedence over the environment
+variable.
+
+Examples
+========
+
+Compress a file (replaces ``sensor.log`` with
+``sensor_log.lzf``):
+
+.. code-block:: console
+
+   nsh> lzf sensor.log
+
+Decompress a file (replaces ``sensor_log.lzf`` with
+``sensor.log``):
+
+.. code-block:: console
+
+   nsh> lzf -d sensor_log.lzf
+
+Compress with verbose output showing the ratio:
+
+.. code-block:: console
+
+   nsh> lzf -v largefile.dat
+
+Compress from ``stdin`` to ``stdout`` (pipeline):
+
+.. code-block:: console
+
+   nsh> cat data.bin | lzf -f > data.bin.lzf
+
+Decompress from ``stdin`` to ``stdout``:
+
+.. code-block:: console
+
+   nsh> cat data.bin.lzf | lzf -df > data.bin
+
+Set a smaller block size for low-memory systems:
+
+.. code-block:: console
+
+   nsh> lzf -b 512 sensor.log
+
+Notes
+=====
+
+- The default mode is compress; ``-c`` is optional but may be used for
+  clarity.
+- ``-c`` and ``-d`` are mutually exclusive.  If both are specified the
+  last one on the command line wins.
+- When run in FLAT or PROTECTED build modes (``CONFIG_SYSTEM_LZF`` set
+  to ``y``), the tool serializes concurrent invocations via a mutex
+  because the compression hash table and I/O buffers are statically
+  allocated.  In KERNEL build mode (``CONFIG_SYSTEM_LZF`` set to ``m``)
+  each instance has its own address space and no serialization is
+  needed.
+- The LZF library is provided under a BSD-2-Clause license.
+- The output file is created with mode ``0600`` (owner read/write only).
+- If the output file already exists and ``-f`` is not given, the
+  command fails with an error.

Reply via email to