Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 376d4d2

Browse files
committed
Use fast_zpp API
1 parent 504810a commit 376d4d2

1 file changed

Lines changed: 34 additions & 50 deletions

File tree

redis_commands.c

Lines changed: 34 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2105,93 +2105,77 @@ redis_acl_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
21052105
char **cmd, int *cmd_len, short *slot, void **ctx)
21062106
{
21072107
smart_string cmdstr = {0};
2108-
zend_string *zstr;
2109-
zval *z_args;
2110-
int argc, i;
2108+
zend_string *op, *zstr;
2109+
zval *z_args = NULL;
2110+
int argc = 0, i;
21112111

2112-
if ((argc = ZEND_NUM_ARGS()) < 1) {
2113-
php_error_docref(NULL, E_WARNING, "ACL command requires at least one argument");
2114-
return FAILURE;
2115-
}
2116-
2117-
z_args = ecalloc(argc, sizeof(*z_args));
2118-
if (zend_get_parameters_array(ht, argc, z_args) == FAILURE) {
2119-
goto failure;
2120-
}
2112+
ZEND_PARSE_PARAMETERS_START(1, -1)
2113+
Z_PARAM_STR(op)
2114+
Z_PARAM_OPTIONAL
2115+
Z_PARAM_VARIADIC('*', z_args, argc)
2116+
ZEND_PARSE_PARAMETERS_END_EX(return FAILURE);
21212117

2122-
zstr = zval_get_string(&z_args[0]);
2123-
if (zend_string_equals_literal_ci(zstr, "CAT") ||
2124-
zend_string_equals_literal_ci(zstr, "LIST") ||
2125-
zend_string_equals_literal_ci(zstr, "USERS")
2118+
if (zend_string_equals_literal_ci(op, "CAT") ||
2119+
zend_string_equals_literal_ci(op, "LIST") ||
2120+
zend_string_equals_literal_ci(op, "USERS")
21262121
) {
21272122
*ctx = NULL;
2128-
} else if (zend_string_equals_literal_ci(zstr, "LOAD") ||
2129-
zend_string_equals_literal_ci(zstr, "SAVE")
2123+
} else if (zend_string_equals_literal_ci(op, "LOAD") ||
2124+
zend_string_equals_literal_ci(op, "SAVE")
21302125
) {
21312126
*ctx = PHPREDIS_CTX_PTR;
2132-
} else if (zend_string_equals_literal_ci(zstr, "GENPASS") ||
2133-
zend_string_equals_literal_ci(zstr, "WHOAMI")
2127+
} else if (zend_string_equals_literal_ci(op, "GENPASS") ||
2128+
zend_string_equals_literal_ci(op, "WHOAMI")
21342129
) {
21352130
*ctx = PHPREDIS_CTX_PTR + 1;
2136-
} else if (zend_string_equals_literal_ci(zstr, "SETUSER")) {
2137-
if (argc < 2) {
2131+
} else if (zend_string_equals_literal_ci(op, "SETUSER")) {
2132+
if (argc < 1) {
21382133
php_error_docref(NULL, E_WARNING, "ACL SETUSER requires at least one argument");
2139-
zend_string_release(zstr);
2140-
goto failure;
2134+
return FAILURE;
21412135
}
21422136
*ctx = PHPREDIS_CTX_PTR;
2143-
} else if (zend_string_equals_literal_ci(zstr, "DELUSER")) {
2144-
if (argc < 2) {
2137+
} else if (zend_string_equals_literal_ci(op, "DELUSER")) {
2138+
if (argc < 1) {
21452139
php_error_docref(NULL, E_WARNING, "ACL DELUSER requires at least one argument");
2146-
zend_string_release(zstr);
2147-
goto failure;
2140+
return FAILURE;
21482141
}
21492142
*ctx = PHPREDIS_CTX_PTR + 2;
2150-
} else if (zend_string_equals_literal_ci(zstr, "GETUSER")) {
2151-
if (argc < 2) {
2143+
} else if (zend_string_equals_literal_ci(op, "GETUSER")) {
2144+
if (argc < 1) {
21522145
php_error_docref(NULL, E_WARNING, "ACL GETUSER requires at least one argument");
2153-
zend_string_release(zstr);
2154-
goto failure;
2146+
return FAILURE;
21552147
}
21562148
*ctx = PHPREDIS_CTX_PTR + 3;
2157-
} else if (zend_string_equals_literal_ci(zstr, "DRYRUN")) {
2158-
if (argc < 3) {
2149+
} else if (zend_string_equals_literal_ci(op, "DRYRUN")) {
2150+
if (argc < 2) {
21592151
php_error_docref(NULL, E_WARNING, "ACL DRYRUN requires at least two arguments");
2160-
zend_string_release(zstr);
2161-
goto failure;
2152+
return FAILURE;
21622153
}
21632154
*ctx = PHPREDIS_CTX_PTR;
2164-
} else if (zend_string_equals_literal_ci(zstr, "LOG")) {
2165-
if (argc > 1 && Z_TYPE(z_args[1]) == IS_STRING && ZVAL_STRICMP_STATIC(&z_args[1], "RESET")) {
2155+
} else if (zend_string_equals_literal_ci(op, "LOG")) {
2156+
if (argc > 0 && Z_TYPE(z_args[0]) == IS_STRING && ZVAL_STRICMP_STATIC(&z_args[0], "RESET")) {
21662157
*ctx = PHPREDIS_CTX_PTR;
21672158
} else {
21682159
*ctx = PHPREDIS_CTX_PTR + 4;
21692160
}
21702161
} else {
2171-
php_error_docref(NULL, E_WARNING, "Unknown ACL operation '%s'", ZSTR_VAL(zstr));
2172-
zend_string_release(zstr);
2173-
goto failure;
2162+
php_error_docref(NULL, E_WARNING, "Unknown ACL operation '%s'", ZSTR_VAL(op));
2163+
return FAILURE;
21742164
}
21752165

2176-
REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, argc, "ACL");
2177-
redis_cmd_append_sstr_zstr(&cmdstr, zstr);
2178-
zend_string_release(zstr);
2166+
REDIS_CMD_INIT_SSTR_STATIC(&cmdstr, 1 + argc, "ACL");
2167+
redis_cmd_append_sstr_zstr(&cmdstr, op);
21792168

2180-
for (i = 1; i < argc; ++i) {
2169+
for (i = 0; i < argc; ++i) {
21812170
zstr = zval_get_string(&z_args[i]);
21822171
redis_cmd_append_sstr_zstr(&cmdstr, zstr);
21832172
zend_string_release(zstr);
21842173
}
2185-
efree(z_args);
21862174

21872175
*cmd = cmdstr.c;
21882176
*cmd_len = cmdstr.len;
21892177

21902178
return SUCCESS;
2191-
2192-
failure:
2193-
efree(z_args);
2194-
return FAILURE;
21952179
}
21962180

21972181
/* Attempt to pull a long expiry from a zval. We're more restrictave than zval_get_long

0 commit comments

Comments
 (0)