zstd/lib
Yann Collet 0d6b8f65a9 ZSTDMT_free() scrubs potentially unfinished jobs to release their resources
In some complex scenarios (free() without finishing compression),
it is possible that some resources are still into jobs
and not collected back into pools.
In which case, previous version of free() would miss them.
This would be equivalent to a leak.

New version ensures that it even foes after such resource.
It requires job consumers to properly mark resources as released,
by replacing entries by NULL after releasing back to the pool.

Obviously, it's not recommended to free() zstdmt context mid-term,
still that's now a supported scenario.

The same methodology is also used to ensure proper resource collection
after an error is detected.

Still to do :
- detect compression errors (not just allocation ones)
- properly manage resource when init() is called without finishing previous compression.
2017-01-17 17:46:33 -08:00
..
common fixed linux warnings 2017-01-02 01:11:55 +01:00
compress ZSTDMT_free() scrubs potentially unfinished jobs to release their resources 2017-01-17 17:46:33 -08:00
decompress fixed ZSTD_sizeof_?Dict() 2016-12-23 22:25:03 +01:00
deprecated Export all API functions 2016-12-16 13:27:30 -08:00
dictBuilder fixed ZSTD_sizeof_?Dict() 2016-12-23 22:25:03 +01:00
dll VS: fixed 32-bit DLL compilation 2016-12-15 12:12:46 +01:00
legacy Fix dictionary loading bug causing an MSAN failure 2016-12-20 10:47:52 -08:00
.gitignore Added "dictionary decompression" example 2016-07-07 14:08:00 +02:00
libzstd.pc.in updated pkg config file 2016-11-30 11:06:58 -08:00
Makefile compile object files, for faster recompilation 2017-01-02 03:22:18 +01:00
README.md moved zbuff source files into lib/deprecated 2016-12-05 19:28:19 -08:00
zstd.h ZSTDMT_compress() creates a single frame 2017-01-11 18:21:25 +01:00

Zstandard library files

The lib directory contains several directories. Depending on target use case, it's enough to include only files from relevant directories.

API

Zstandard's stable API is exposed within zstd.h, at the root of lib directory.

Advanced API

Some additional API may be useful if you're looking into advanced features :

  • common/error_public.h : transforms size_t function results into an enum, for precise error handling.
  • ZSTD_STATIC_LINKING_ONLY : if you define this macro before including zstd.h, it will give access to advanced and experimental API. These APIs shall never be used with dynamic library ! They are not "stable", their definition may change in the future. Only static linking is allowed.

Modular build

Directory common/ is required in all circumstances. You can select to support compression only, by just adding files from the compress/ directory, In a similar way, you can build a decompressor-only library with the decompress/ directory.

Other optional functionalities provided are :

  • dictBuilder/ : source files to create dictionaries. The API can be consulted in dictBuilder/zdict.h. This module also depends on common/ and compress/ .

  • legacy/ : source code to decompress previous versions of zstd, starting from v0.1. This module also depends on common/ and decompress/ . Library compilation must include directive ZSTD_LEGACY_SUPPORT = 1 . The main API can be consulted in legacy/zstd_legacy.h. Advanced API from each version can be found in their relevant header file. For example, advanced API for version v0.4 is in legacy/zstd_v04.h .

Using MinGW+MSYS to create DLL

DLL can be created using MinGW+MSYS with the make libzstd command. This command creates dll\libzstd.dll and the import library dll\libzstd.lib. The import library is only required with Visual C++. The header file zstd.h and the dynamic library dll\libzstd.dll are required to compile a project using gcc/MinGW. The dynamic library has to be added to linking options. It means that if a project that uses ZSTD consists of a single test-dll.c file it should be linked with dll\libzstd.dll. For example:

    gcc $(CFLAGS) -Iinclude/ test-dll.c -o test-dll dll\libzstd.dll

The compiled executable will require ZSTD DLL which is available at dll\libzstd.dll.

Obsolete streaming API

Streaming is now provided within zstd.h. Older streaming API is still available within deprecated/zbuff.h. It will be removed in a future version. Consider migrating code towards newer streaming API in zstd.h.

Miscellaneous

The other files are not source code. There are :

  • LICENSE : contains the BSD license text
  • Makefile : script to compile or install zstd library (static and dynamic)
  • libzstd.pc.in : for pkg-config (make install)
  • README.md : this file