Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpredis/phpredis.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2022-11-01 14:11:54 +0300
committerPavlo Yatsukhnenko <yatsukhnenko@gmail.com>2022-11-01 14:22:34 +0300
commit376d4d27b01a05c1a0634dfad7b3d2e6429a0a7e (patch)
tree47042f99429593d1ae0da89146d51bb9610c1aeb
parent504810a5d1599c4e5f8c749934de272a625a687f (diff)
Use fast_zpp API
-rw-r--r--redis_commands.c84
1 files changed, 34 insertions, 50 deletions
diff --git a/redis_commands.c b/redis_commands.c
index 5c3dcb90..47faaebd 100644
--- a/redis_commands.c
+++ b/redis_commands.c
@@ -2105,93 +2105,77 @@ redis_acl_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
smart_string cmdstr = {0};
- zend_string *zstr;
- zval *z_args;
- int argc, i;
+ zend_string *op, *zstr;
+ zval *z_args = NULL;
+ int argc = 0, i;
- if ((argc = ZEND_NUM_ARGS()) < 1) {
- php_error_docref(NULL, E_WARNING, "ACL command requires at least one argument");
- return FAILURE;
- }
-
- z_args = ecalloc(argc, sizeof(*z_args));
- if (zend_get_parameters_array(ht, argc, z_args) == FAILURE) {
- goto failure;
- }
+ ZEND_PARSE_PARAMETERS_START(1, -1)
+ Z_PARAM_STR(op)
+ Z_PARAM_OPTIONAL
+ Z_PARAM_VARIADIC('*', z_args, argc)
+ ZEND_PARSE_PARAMETERS_END_EX(return FAILURE);
- zstr = zval_get_string(&z_args[0]);
- if (zend_string_equals_literal_ci(zstr, "CAT") ||
- zend_string_equals_literal_ci(zstr, "LIST") ||
- zend_string_equals_literal_ci(zstr, "USERS")
+ if (zend_string_equals_literal_ci(op, "CAT") ||
+ zend_string_equals_literal_ci(op, "LIST") ||
+ zend_string_equals_literal_ci(op, "USERS")
) {
*ctx = NULL;
- } else if (zend_string_equals_literal_ci(zstr, "LOAD") ||
- zend_string_equals_literal_ci(zstr, "SAVE")
+ } else if (zend_string_equals_literal_ci(op, "LOAD") ||
+ zend_string_equals_literal_ci(op, "SAVE")
) {
*ctx = PHPREDIS_CTX_PTR;
- } else if (zend_string_equals_literal_ci(zstr, "GENPASS") ||
- zend_string_equals_literal_ci(zstr, "WHOAMI")
+ } else if (zend_string_equals_literal_ci(op, "GENPASS") ||
+ zend_string_equals_literal_ci(op, "WHOAMI")
) {
*ctx = PHPREDIS_CTX_PTR + 1;
- } else if (zend_string_equals_literal_ci(zstr, "SETUSER")) {
- if (argc < 2) {
+ } else if (zend_string_equals_literal_ci(op, "SETUSER")) {
+ if (argc < 1) {
php_error_docref(NULL, E_WARNING, "ACL SETUSER requires at least one argument");
- zend_string_release(zstr);
- goto failure;
+ return FAILURE;
}
*ctx = PHPREDIS_CTX_PTR;
- } else if (zend_string_equals_literal_ci(zstr, "DELUSER")) {
- if (argc < 2) {
+ } else if (zend_string_equals_literal_ci(op, "DELUSER")) {
+ if (argc < 1) {
php_error_docref(NULL, E_WARNING, "ACL DELUSER requires at least one argument");
- zend_string_release(zstr);
- goto failure;
+ return FAILURE;
}
*ctx = PHPREDIS_CTX_PTR + 2;
- } else if (zend_string_equals_literal_ci(zstr, "GETUSER")) {
- if (argc < 2) {
+ } else if (zend_string_equals_literal_ci(op, "GETUSER")) {
+ if (argc < 1) {
php_error_docref(NULL, E_WARNING, "ACL GETUSER requires at least one argument");
- zend_string_release(zstr);
- goto failure;
+ return FAILURE;
}
*ctx = PHPREDIS_CTX_PTR + 3;
- } else if (zend_string_equals_literal_ci(zstr, "DRYRUN")) {
- if (argc < 3) {
+ } else if (zend_string_equals_literal_ci(op, "DRYRUN")) {
+ if (argc < 2) {
php_error_docref(NULL, E_WARNING, "ACL DRYRUN requires at least two arguments");
- zend_string_release(zstr);
- goto failure;
+ return FAILURE;
}
*ctx = PHPREDIS_CTX_PTR;
- } else if (zend_string_equals_literal_ci(zstr, "LOG")) {
- if (argc > 1 && Z_TYPE(z_args[1]) == IS_STRING && ZVAL_STRICMP_STATIC(&z_args[1], "RESET")) {
+ } else if (zend_string_equals_literal_ci(op, "LOG")) {
+ if (argc > 0 && Z_TYPE(z_args[0]) == IS_STRING && ZVAL_STRICMP_STATIC(&z_args[0], "RESET")) {
*ctx = PHPREDIS_CTX_PTR;
} else {
*ctx = PHPREDIS_CTX_PTR + 4;
}
} else {
- php_error_docref(NULL, E_WARNING, "Unknown ACL operation '%s'", ZSTR_VAL(zstr));
- zend_string_release(zstr);
- goto failure;
+ php_error_docref(NULL, E_WARNING, "Unknown ACL operation '%s'", ZSTR_VAL(op));
+ return FAILURE;
}
- REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, argc, "ACL");
- redis_cmd_append_sstr_zstr(&cmdstr, zstr);
- zend_string_release(zstr);
+ REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, 1 + argc, "ACL");
+ redis_cmd_append_sstr_zstr(&cmdstr, op);
- for (i = 1; i < argc; ++i) {
+ for (i = 0; i < argc; ++i) {
zstr = zval_get_string(&z_args[i]);
redis_cmd_append_sstr_zstr(&cmdstr, zstr);
zend_string_release(zstr);
}
- efree(z_args);
*cmd = cmdstr.c;
*cmd_len = cmdstr.len;
return SUCCESS;
-
-failure:
- efree(z_args);
- return FAILURE;
}
/* Attempt to pull a long expiry from a zval. We're more restrictave than zval_get_long