8000 Refactor and avoid allocation in rawcommand method · phpredis/phpredis@f68544f · GitHub
[go: up one dir, main page]

Skip to content

Commit f68544f

Browse files
JakubOnderkamichael-grunder
authored andcommitted
Refactor and avoid allocation in rawcommand method
1 parent 42a4276 commit f68544f

File tree

1 file changed

+6
-18
lines changed

1 file changed

+6
-18
lines changed

redis.c

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2654,34 +2654,22 @@ PHP_METHOD(Redis, client) {
26542654

26552655
/* {{{ proto mixed Redis::rawcommand(string $command, [ $arg1 ... $argN]) */
26562656
PHP_METHOD(Redis, rawcommand) {
2657-
int argc = ZEND_NUM_ARGS(), cmd_len;
2657+
int argc, cmd_len;
26582658
char *cmd = NULL;
26592659
RedisSock *redis_sock;
26602660
zval *z_args;
26612661

2662-
/* Sanity check on arguments */
2663-
if (argc < 1) {
2664-
php_error_docref(NULL, E_WARNING,
2665-
"Must pass at least one command keyword");
2666-
RETURN_FALSE;
2667-
}
2668-
z_args = emalloc(argc * sizeof(zval));
2669-
if (zend_get_parameters_array(ht, argc, z_args) == FAILURE) {
2670-
php_error_docref(NULL, E_WARNING,
2671-
"Internal PHP error parsing arguments");
2672-
efree(z_args);
2673-
RETURN_FALSE;
2674-
} else if (redis_build_raw_cmd(z_args, argc, &cmd, &cmd_len) < 0 ||
2662+
ZEND_PARSE_PARAMETERS_START(1, -1)
2663+
Z_PARAM_VARIADIC('+', z_args, argc)
2664+
ZEND_PARSE_PARAMETERS_END();
2665+
2666+
if (redis_build_raw_cmd(z_args, argc, &cmd, &cmd_len) < 0 ||
26752667
(redis_sock = redis_sock_get(getThis(), 0)) == NULL
26762668
) {
26772669
if (cmd) efree(cmd);
2678-
efree(z_args);
26792670
RETURN_FALSE;
26802671
}
26812672

2682-
/* Clean up command array */
2683-
efree(z_args);
2684-
26852673
/* Execute our command */
26862674
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
26872675
if (IS_ATOMIC(redis_sock)) {

0 commit comments

Comments
 (0)
0