#include #include #include #include #include #include #include #include #define NR_ITERATIONS 10 static const char source[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sodales " "scelerisque lacus. In ullamcorper sem a nibh venenatis efficitur at " "id quam. Nam quis urna nulla. In in consectetur ligula. Morbi " "ligula neque, imperdiet quis erat et, mollis consequat sapien. " "Vivamus quis bibendum nulla. Vivamus tincidunt mauris sed nisl " "vulputate pellentesque. Nam blandit ac risus ut auctor. Fusce " "sagittis quam ut sapien accumsan, pellentesque finibus elit " "eleifend. Duis sodales ex urna, a porttitor ex bibendum quis quam."; int main(int argc, const char **argv) { if (argc < 2) { fprintf(stderr, "usage: %s \n", argv[0]); return -1; } const b_compression_function *zstd = b_compression_function_get_by_id(B_COMPRESSOR_FUNCTION_ZSTD); if (!zstd) { fprintf(stderr, "zstd support not enabled\n"); return -1; } b_compression_mode mode = B_COMPRESSION_MODE_COMPRESS; FILE *out_fp = fopen(argv[1], "wb"); if (!out_fp) { fprintf(stderr, "cannot open output file %s\n", argv[1]); return -1; } b_stream *out_stream = b_stream_open_fp(out_fp); b_cstream *cstream; b_cstream_open(out_stream, zstd, mode, &cstream); const size_t source_len = strlen(source); bool compressed = false; for (int i = 0; i < NR_ITERATIONS; i++) { if (compressed) { b_cstream_begin_compressed_section(cstream, NULL); } size_t nr_written = 0; b_status status = b_cstream_write( cstream, source, source_len, &nr_written); if (!B_OK(status)) { fprintf(stderr, "write error: %s\n", b_status_description(status)); break; } size_t nr_written_compressed = 0; if (compressed) { b_cstream_end_compressed_section( cstream, &nr_written_compressed, &nr_written); } size_t tx_total = 0; b_cstream_tx_bytes(cstream, &tx_total); printf("iteration %d: wrote %zu (compressed) / %zu " "(uncompressed) / %zu (total) bytes (%s)\n", i, nr_written_compressed, nr_written, tx_total, compressed ? "compressed" : "uncompressed"); compressed = !compressed; } printf("Done\n"); b_cstream_close(cstream); b_stream_unref(out_stream); fclose(out_fp); return 0; }