Skip to content

Commit cd8b88d

Browse files
committed
feat: add dictionary parameter to compress and uncompress functions
1 parent 29b493e commit cd8b88d

File tree

1 file changed

+37
-9
lines changed

1 file changed

+37
-9
lines changed

zstd.c

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -318,19 +318,23 @@ static php_zstd_context* php_zstd_output_handler_context_init(void)
318318
ZEND_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
322323
ZEND_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
326328
ZEND_END_ARG_INFO()
327329

328330
#if PHP_VERSION_ID >= 80000
329331
ZEND_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
332335
ZEND_BEGIN_ARG_INFO_EX(arginfo_zstd_uncompress, 0, 0, 1)
333336
ZEND_ARG_INFO(0, data)
337+
ZEND_ARG_INFO(0, dict)
334338
#endif
335339
ZEND_END_ARG_INFO()
336340

@@ -362,9 +366,11 @@ ZEND_END_ARG_INFO()
362366
#if PHP_VERSION_ID >= 80000
363367
ZEND_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
366371
ZEND_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
369375
ZEND_END_ARG_INFO()
370376

@@ -383,8 +389,10 @@ ZEND_END_ARG_INFO()
383389

384390
#if PHP_VERSION_ID >= 80000
385391
ZEND_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
387394
ZEND_BEGIN_ARG_INFO_EX(arginfo_zstd_uncompress_init, 0, 0, 0)
395+
ZEND_ARG_INFO(0, dict)
388396
#endif
389397
ZEND_END_ARG_INFO()
390398

@@ -415,6 +423,10 @@ ZEND_END_ARG_INFO()
415423
ZEND_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+
418430
static 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)
657676
ZEND_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

730751
ZEND_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

Comments
 (0)