Skip to content

Commit 160d0a3

Browse files
authored
Add window log param (#53)
* Add window log param * Add checksum by default
1 parent 321f23d commit 160d0a3

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

c_src/zstd_nif.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ static ERL_NIF_TERM zstd_nif_new_decompression_stream(ErlNifEnv* env, int argc,
111111

112112
static ERL_NIF_TERM zstd_nif_init_compression_stream(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
113113
int level = ZSTD_CLEVEL_DEFAULT;
114+
int window_log = 0;
114115
size_t ret;
115116
ZSTD_CStream **pzcs;
116117

@@ -119,12 +120,20 @@ static ERL_NIF_TERM zstd_nif_init_compression_stream(ErlNifEnv* env, int argc, c
119120
return enif_make_tuple2(env, zstd_atom_error, zstd_atom_invalid);
120121

121122
/* extract the compression level if any */
122-
if ((argc == 2) && !(enif_get_int(env, argv[1], &level)))
123+
if ((argc >= 2) && !(enif_get_int(env, argv[1], &level)))
124+
return enif_make_badarg(env);
125+
126+
/* extract the window log if any */
127+
if ((argc == 3) && !(enif_get_int(env, argv[2], &window_log)))
123128
return enif_make_badarg(env);
124129

125130
/* initialize the stream */
126131
if (ZSTD_isError(ret = ZSTD_initCStream(*pzcs, level)))
127132
return enif_make_tuple2(env, zstd_atom_error, enif_make_string(env, ZSTD_getErrorName(ret), ERL_NIF_LATIN1));
133+
if (ZSTD_isError(ret = ZSTD_CCtx_setParameter(*pzcs, ZSTD_c_windowLog, window_log)))
134+
return enif_make_tuple2(env, zstd_atom_error, enif_make_string(env, ZSTD_getErrorName(ret), ERL_NIF_LATIN1));
135+
if (ZSTD_isError(ret = ZSTD_CCtx_setParameter(*pzcs, ZSTD_c_checksumFlag, 1)))
136+
return enif_make_tuple2(env, zstd_atom_error, enif_make_string(env, ZSTD_getErrorName(ret), ERL_NIF_LATIN1));
128137

129138
/* stream initialization successful */
130139
return zstd_atom_ok;
@@ -413,6 +422,7 @@ static ErlNifFunc nif_funcs[] = {
413422

414423
{ "compression_stream_init" , 1, zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
415424
{ "compression_stream_init" , 2, zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
425+
{ "compression_stream_init" , 3, zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
416426
{ "decompression_stream_init" , 1, zstd_nif_init_decompression_stream , ERL_DIRTY_JOB_CPU_BOUND },
417427

418428
{ "compression_stream_reset" , 2, zstd_nif_reset_compression_stream },

src/zstd.erl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
-export([compress/1, compress/2]).
44
-export([decompress/1]).
5-
-export([new_compression_stream/0, new_decompression_stream/0, compression_stream_init/1,
6-
compression_stream_init/2, decompression_stream_init/1, compression_stream_reset/2,
7-
compression_stream_reset/1, decompression_stream_reset/1, stream_flush/1,
8-
stream_compress/2, stream_decompress/2]).
5+
-export([new_compression_stream/0, compression_stream_init/1, compression_stream_init/2,
6+
compression_stream_init/3, compression_stream_reset/1, compression_stream_reset/2,
7+
stream_compress/2, stream_flush/1, new_decompression_stream/0,
8+
decompression_stream_init/1, decompression_stream_reset/1, stream_decompress/2]).
99

1010
-on_load init/0.
1111

@@ -41,6 +41,11 @@ compression_stream_init(_Ref) ->
4141
compression_stream_init(_Ref, _Level) ->
4242
erlang:nif_error(?LINE).
4343

44+
-spec compression_stream_init(reference(), 0..22, integer()) ->
45+
ok | {error, invalid | string()}.
46+
compression_stream_init(_Ref, _Level, _WindowLog) ->
47+
erlang:nif_error(?LINE).
48+
4449
-spec decompression_stream_init(reference()) -> ok | {error, invalid | string()}.
4550
decompression_stream_init(_Ref) ->
4651
erlang:nif_error(?LINE).

test/zstd_tests.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ zstd_test() ->
1111
zstd_stream_test() ->
1212
Bin = << <<"A">> || _ <- lists:seq(1, 1024 * 1024) >>,
1313
CStream = zstd:new_compression_stream(),
14-
ok = zstd:compression_stream_init(CStream),
14+
ok = zstd:compression_stream_init(CStream, 5, 23),
1515
{ok, CompressionBin} = zstd:stream_compress(CStream, Bin),
1616
{ok, FlushBin} = zstd:stream_flush(CStream),
1717

0 commit comments

Comments
 (0)