@@ -112,6 +112,7 @@ static ERL_NIF_TERM zstd_nif_new_decompression_stream(ErlNifEnv* env, int argc,
112112static ERL_NIF_TERM zstd_nif_init_compression_stream (ErlNifEnv * env , int argc , const ERL_NIF_TERM argv []) {
113113 int level = ZSTD_CLEVEL_DEFAULT ;
114114 int window_log = 0 ;
115+ int enable_long_distance_matching = 0 ;
115116 size_t ret ;
116117 ZSTD_CStream * * pzcs ;
117118
@@ -124,14 +125,20 @@ static ERL_NIF_TERM zstd_nif_init_compression_stream(ErlNifEnv* env, int argc, c
124125 return enif_make_badarg (env );
125126
126127 /* extract the window log if any */
127- if ((argc == 3 ) && !(enif_get_int (env , argv [2 ], & window_log )))
128+ if ((argc >= 3 ) && !(enif_get_int (env , argv [2 ], & window_log )))
129+ return enif_make_badarg (env );
130+
131+ /* extract the enable long distance matching if any */
132+ if ((argc == 4 ) && !(enif_get_int (env , argv [3 ], & enable_long_distance_matching )))
128133 return enif_make_badarg (env );
129134
130135 /* initialize the stream */
131136 if (ZSTD_isError (ret = ZSTD_initCStream (* pzcs , level )))
132137 return enif_make_tuple2 (env , zstd_atom_error , enif_make_string (env , ZSTD_getErrorName (ret ), ERL_NIF_LATIN1 ));
133138 if (ZSTD_isError (ret = ZSTD_CCtx_setParameter (* pzcs , ZSTD_c_windowLog , window_log )))
134139 return enif_make_tuple2 (env , zstd_atom_error , enif_make_string (env , ZSTD_getErrorName (ret ), ERL_NIF_LATIN1 ));
140+ if (ZSTD_isError (ret = ZSTD_CCtx_setParameter (* pzcs , ZSTD_c_enableLongDistanceMatching , enable_long_distance_matching )))
141+ return enif_make_tuple2 (env , zstd_atom_error , enif_make_string (env , ZSTD_getErrorName (ret ), ERL_NIF_LATIN1 ));
135142 if (ZSTD_isError (ret = ZSTD_CCtx_setParameter (* pzcs , ZSTD_c_checksumFlag , 1 )))
136143 return enif_make_tuple2 (env , zstd_atom_error , enif_make_string (env , ZSTD_getErrorName (ret ), ERL_NIF_LATIN1 ));
137144
@@ -423,6 +430,7 @@ static ErlNifFunc nif_funcs[] = {
423430 { "compression_stream_init" , 1 , zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
424431 { "compression_stream_init" , 2 , zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
425432 { "compression_stream_init" , 3 , zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
433+ { "compression_stream_init" , 4 , zstd_nif_init_compression_stream , ERL_DIRTY_JOB_CPU_BOUND },
426434 { "decompression_stream_init" , 1 , zstd_nif_init_decompression_stream , ERL_DIRTY_JOB_CPU_BOUND },
427435
428436 { "compression_stream_reset" , 2 , zstd_nif_reset_compression_stream },
0 commit comments