@@ -111,6 +111,7 @@ static ERL_NIF_TERM zstd_nif_new_decompression_stream(ErlNifEnv* env, int argc,
111111
112112static 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 },
0 commit comments