@@ -318,19 +318,23 @@ static php_zstd_context* php_zstd_output_handler_context_init(void)
318318ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX (arginfo_zstd_compress , 0 , 1 , MAY_BE_STRING |MAY_BE_FALSE )
319319 ZEND_ARG_TYPE_INFO (0 , data , IS_STRING , 0 )
320320 ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (0 , level , IS_LONG , 0 , "ZSTD_COMPRESS_LEVEL_DEFAULT" )
321+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (0 , dict , IS_STRING , 1 , "null" )
321322#else
322323ZEND_BEGIN_ARG_INFO_EX (arginfo_zstd_compress , 0 , 0 , 1 )
323324 ZEND_ARG_INFO (0 , data )
324325 ZEND_ARG_INFO (0 , level )
326+ ZEND_ARG_INFO (0 , dict )
325327#endif
326328ZEND_END_ARG_INFO ()
327329
328330#if PHP_VERSION_ID >= 80000
329331ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX (arginfo_zstd_uncompress , 0 , 1 , MAY_BE_STRING |MAY_BE_FALSE )
330332 ZEND_ARG_TYPE_INFO (0 , data , IS_STRING , 0 )
333+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (0 , dict , IS_STRING , 1 , "null" )
331334#else
332335ZEND_BEGIN_ARG_INFO_EX (arginfo_zstd_uncompress , 0 , 0 , 1 )
333336 ZEND_ARG_INFO (0 , data )
337+ ZEND_ARG_INFO (0 , dict )
334338#endif
335339ZEND_END_ARG_INFO ()
336340
@@ -362,9 +366,11 @@ ZEND_END_ARG_INFO()
362366#if PHP_VERSION_ID >= 80000
363367ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX (arginfo_zstd_compress_init , 0 , 0 , Zstd \\Compress \\Context , MAY_BE_FALSE )
364368 ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (0 , level , IS_LONG , 0 , "ZSTD_COMPRESS_LEVEL_DEFAULT" )
369+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (0 , dict , IS_STRING , 1 , "null" )
365370#else
366371ZEND_BEGIN_ARG_INFO_EX (arginfo_zstd_compress_init , 0 , 0 , 0 )
367372 ZEND_ARG_INFO (0 , level )
373+ ZEND_ARG_INFO (0 , dict )
368374#endif
369375ZEND_END_ARG_INFO ()
370376
@@ -383,8 +389,10 @@ ZEND_END_ARG_INFO()
383389
384390#if PHP_VERSION_ID >= 80000
385391ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX (arginfo_zstd_uncompress_init , 0 , 0 , Zstd \\UnCompress \\Context , MAY_BE_FALSE )
392+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE (0 , dict , IS_STRING , 1 , "null" )
386393#else
387394ZEND_BEGIN_ARG_INFO_EX (arginfo_zstd_uncompress_init , 0 , 0 , 0 )
395+ ZEND_ARG_INFO (0 , dict )
388396#endif
389397ZEND_END_ARG_INFO ()
390398
@@ -415,6 +423,10 @@ ZEND_END_ARG_INFO()
415423ZEND_DECLARE_MODULE_GLOBALS (zstd );
416424#endif
417425
426+ #ifndef Z_PARAM_STR_OR_NULL
427+ #define Z_PARAM_STR_OR_NULL (dest ) Z_PARAM_STR_EX(dest, 1, 0)
428+ #endif
429+
418430static size_t zstd_check_compress_level (zend_long level )
419431{
420432 uint16_t maxLevel = (uint16_t ) ZSTD_maxCLevel ();
@@ -433,21 +445,22 @@ ZEND_FUNCTION(zstd_compress)
433445 size_t result ;
434446 smart_string out = { 0 };
435447 zend_long level = ZSTD_CLEVEL_DEFAULT ;
436- zend_string * input ;
448+ zend_string * input , * dict = NULL ;
437449 php_zstd_context ctx ;
438450
439- ZEND_PARSE_PARAMETERS_START (1 , 2 )
451+ ZEND_PARSE_PARAMETERS_START (1 , 3 )
440452 Z_PARAM_STR (input )
441453 Z_PARAM_OPTIONAL
442454 Z_PARAM_LONG (level )
455+ Z_PARAM_STR_OR_NULL (dict )
443456 ZEND_PARSE_PARAMETERS_END_EX (RETURN_FALSE );
444457
445458 if (!zstd_check_compress_level (level )) {
446459 RETURN_FALSE ;
447460 }
448461
449462 php_zstd_context_init (& ctx );
450- if (php_zstd_context_create_compress (& ctx , level , NULL ) != SUCCESS ) {
463+ if (php_zstd_context_create_compress (& ctx , level , dict ) != SUCCESS ) {
451464 php_zstd_context_free (& ctx );
452465 RETURN_FALSE ;
453466 }
@@ -480,11 +493,13 @@ ZEND_FUNCTION(zstd_uncompress)
480493 size_t chunk , result ;
481494 uint64_t size ;
482495 smart_string out = { 0 };
483- zend_string * input ;
496+ zend_string * input , * dict = NULL ;
484497 php_zstd_context ctx ;
485498
486- ZEND_PARSE_PARAMETERS_START (1 , 1 )
499+ ZEND_PARSE_PARAMETERS_START (1 , 2 )
487500 Z_PARAM_STR (input )
501+ Z_PARAM_OPTIONAL
502+ Z_PARAM_STR_OR_NULL (dict )
488503 ZEND_PARSE_PARAMETERS_END_EX (RETURN_FALSE );
489504
490505 size = ZSTD_getFrameContentSize (ZSTR_VAL (input ), ZSTR_LEN (input ));
@@ -496,7 +511,7 @@ ZEND_FUNCTION(zstd_uncompress)
496511 }
497512
498513 php_zstd_context_init (& ctx );
499- if (php_zstd_context_create_decompress (& ctx , NULL ) != SUCCESS ) {
514+ if (php_zstd_context_create_decompress (& ctx , dict ) != SUCCESS ) {
500515 php_zstd_context_free (& ctx );
501516 RETURN_FALSE ;
502517 }
@@ -547,6 +562,8 @@ ZEND_FUNCTION(zstd_compress_dict)
547562 zend_string * input , * dict ;
548563 php_zstd_context ctx ;
549564
565+ // php_error_docref(NULL, E_DEPRECATED, "Use zstd_compress() instead");
566+
550567 ZEND_PARSE_PARAMETERS_START (2 , 3 )
551568 Z_PARAM_STR (input )
552569 Z_PARAM_STR (dict )
@@ -595,6 +612,8 @@ ZEND_FUNCTION(zstd_uncompress_dict)
595612 zend_string * input , * dict ;
596613 php_zstd_context ctx ;
597614
615+ // php_error_docref(NULL, E_DEPRECATED, "Use zstd_uncompress() instead");
616+
598617 ZEND_PARSE_PARAMETERS_START (2 , 2 )
599618 Z_PARAM_STR (input )
600619 Z_PARAM_STR (dict )
@@ -657,10 +676,12 @@ ZEND_FUNCTION(zstd_uncompress_dict)
657676ZEND_FUNCTION (zstd_compress_init )
658677{
659678 zend_long level = ZSTD_CLEVEL_DEFAULT ;
679+ zend_string * dict = NULL ;
660680
661- ZEND_PARSE_PARAMETERS_START (0 , 1 )
681+ ZEND_PARSE_PARAMETERS_START (0 , 2 )
662682 Z_PARAM_OPTIONAL
663683 Z_PARAM_LONG (level )
684+ Z_PARAM_STR_OR_NULL (dict )
664685 ZEND_PARSE_PARAMETERS_END_EX (RETURN_FALSE );
665686
666687 if (!zstd_check_compress_level (level )) {
@@ -669,7 +690,7 @@ ZEND_FUNCTION(zstd_compress_init)
669690
670691 PHP_ZSTD_CONTEXT_OBJ_INIT_OF_CLASS (php_zstd_compress_context_ce );
671692
672- if (php_zstd_context_create_compress (ctx , level , NULL ) != SUCCESS ) {
693+ if (php_zstd_context_create_compress (ctx , level , dict ) != SUCCESS ) {
673694 zval_ptr_dtor (return_value );
674695 RETURN_FALSE ;
675696 }
@@ -729,9 +750,16 @@ ZEND_FUNCTION(zstd_compress_add)
729750
730751ZEND_FUNCTION (zstd_uncompress_init )
731752{
753+ zend_string * dict = NULL ;
754+
755+ ZEND_PARSE_PARAMETERS_START (0 , 1 )
756+ Z_PARAM_OPTIONAL
757+ Z_PARAM_STR_OR_NULL (dict )
758+ ZEND_PARSE_PARAMETERS_END_EX (RETURN_FALSE );
759+
732760 PHP_ZSTD_CONTEXT_OBJ_INIT_OF_CLASS (php_zstd_uncompress_context_ce );
733761
734- if (php_zstd_context_create_decompress (ctx , NULL ) != SUCCESS ) {
762+ if (php_zstd_context_create_decompress (ctx , dict ) != SUCCESS ) {
735763 zval_ptr_dtor (return_value );
736764 RETURN_FALSE ;
737765 }
0 commit comments