Zstandard library : usage examples
==================================
-- [Simple compression](simple_compression.c)
+- [Simple compression](simple_compression.c) :
Compress a single file.
Introduces usage of : `ZSTD_compress()`
-- [Simple decompression](simple_decompression.c)
- Decompress a single file compressed by zstd.
+- [Simple decompression](simple_decompression.c) :
+ Decompress a single file.
Only compatible with simple compression.
Result remains in memory.
Introduces usage of : `ZSTD_decompress()`
-- [Dictionary compression](dictionary_compression.c)
- Compress multiple files using the same dictionary.
- Introduces usage of : `ZSTD_createCDict()` and `ZSTD_compress_usingCDict()`
-
-- [Dictionary decompression](dictionary_decompression.c)
- Decompress multiple files using the same dictionary.
- Result remains in memory.
- Introduces usage of : `ZSTD_createDDict()` and `ZSTD_decompress_usingDDict()`
-
-- [Streaming compression](streaming_compression.c)
+- [Streaming compression](streaming_compression.c) :
Compress a single file.
Introduces usage of : `ZSTD_compressStream()`
-- [Streaming decompression](streaming_decompression.c)
+- [Streaming decompression](streaming_decompression.c) :
Decompress a single file compressed by zstd.
- Compatible with simple and streaming compression.
+ Compatible with both simple and streaming compression.
Result is sent to stdout.
Introduces usage of : `ZSTD_decompressStream()`
+
+- [Dictionary compression](dictionary_compression.c) :
+ Compress multiple files using the same dictionary.
+ Introduces usage of : `ZSTD_createCDict()` and `ZSTD_compress_usingCDict()`
+
+- [Dictionary decompression](dictionary_decompression.c) :
+ Decompress multiple files using the same dictionary.
+ Result remains in memory.
+ Introduces usage of : `ZSTD_createDDict()` and `ZSTD_decompress_usingDDict()`
FILE* const fin = fopen_orDie(fname, "rb");
size_t const buffInSize = ZSTD_DStreamInSize();
void* const buffIn = malloc_orDie(buffInSize);
+ FILE* const fout = stdout;
size_t const buffOutSize = ZSTD_DStreamOutSize(); /* Guarantee to successfully flush at least one complete compressed block in all circumstances. */
void* const buffOut = malloc_orDie(buffOutSize);
- FILE* const fout = stdout;
ZSTD_DStream* const dstream = ZSTD_createDStream();
if (dstream==NULL) { fprintf(stderr, "ZSTD_createDStream() error \n"); exit(10); }
size_t const initResult = ZSTD_initDStream(dstream);
- if (ZSTD_isError(initResult)) { fprintf(stderr, "ZSTD_initDStream() error \n"); exit(11); }
- size_t toRead = initResult;
+ if (ZSTD_isError(initResult)) { fprintf(stderr, "ZSTD_initDStream() error : %s \n", ZSTD_getErrorName(initResult)); exit(11); }
- size_t read;
+ size_t read, toRead = initResult;
while ( (read = fread_orDie(buffIn, toRead, fin)) ) {
ZSTD_inBuffer input = { buffIn, read, 0 };
while (input.pos < input.size) {