@@ -3447,54 +3447,48 @@ int redis_hset_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
34473447{
34483448 int i , argc ;
34493449 smart_string cmdstr = {0 };
3450- zend_string * zkey ;
3451- zval * z_args , * z_ele ;
3452-
3453- if ((argc = ZEND_NUM_ARGS ()) < 2 ) {
3454- return FAILURE ;
3455- }
3450+ zend_string * key , * zkey ;
3451+ zval * args , * z_ele ;
34563452
3457- z_args = ecalloc (argc , sizeof (* z_args ));
3458- if (zend_get_parameters_array (ht , argc , z_args ) == FAILURE ) {
3459- efree (z_args );
3460- return FAILURE ;
3461- }
3453+ ZEND_PARSE_PARAMETERS_START (2 , -1 )
3454+ Z_PARAM_STR (key )
3455+ Z_PARAM_VARIADIC ('*' , args , argc )
3456+ ZEND_PARSE_PARAMETERS_END_EX (return FAILURE );
34623457
3463- if (argc == 2 ) {
3464- if (Z_TYPE (z_args [1 ]) != IS_ARRAY || zend_hash_num_elements (Z_ARRVAL (z_args [1 ])) == 0 ) {
3465- efree (z_args );
3458+ if (argc == 1 ) {
3459+ if (Z_TYPE_P (args ) != IS_ARRAY || zend_hash_num_elements (Z_ARRVAL_P (args )) == 0 ) {
34663460 return FAILURE ;
34673461 }
34683462
34693463 /* Initialize our command */
3470- redis_cmd_init_sstr (& cmdstr , 1 + zend_hash_num_elements (Z_ARRVAL ( z_args [ 1 ] )) * 2 , ZEND_STRL ("HSET" ));
3464+ redis_cmd_init_sstr (& cmdstr , 1 + zend_hash_num_elements (Z_ARRVAL_P ( args )) * 2 , ZEND_STRL ("HSET" ));
34713465
34723466 /* Append key */
3473- redis_cmd_append_sstr_key_zval (& cmdstr , & z_args [ 0 ] , redis_sock , slot );
3467+ redis_cmd_append_sstr_key_zstr (& cmdstr , key , redis_sock , slot );
34743468
3475- ZEND_HASH_FOREACH_STR_KEY_VAL (Z_ARRVAL ( z_args [ 1 ] ), zkey , z_ele ) {
3469+ ZEND_HASH_FOREACH_STR_KEY_VAL (Z_ARRVAL_P ( args ), zkey , z_ele ) {
34763470 if (zkey != NULL ) {
34773471 ZVAL_DEREF (z_ele );
34783472 redis_cmd_append_sstr (& cmdstr , ZSTR_VAL (zkey ), ZSTR_LEN (zkey ));
34793473 redis_cmd_append_sstr_zval (& cmdstr , z_ele , redis_sock );
34803474 }
34813475 } ZEND_HASH_FOREACH_END ();
34823476 } else {
3483- if (argc % 2 == 0 ) {
3484- efree (z_args );
3477+ if (argc % 2 != 0 ) {
34853478 return FAILURE ;
34863479 }
3480+
34873481 /* Initialize our command */
3488- redis_cmd_init_sstr (& cmdstr , argc , ZEND_STRL ("HSET" ));
3482+ redis_cmd_init_sstr (& cmdstr , argc + 1 , ZEND_STRL ("HSET" ));
34893483
34903484 /* Append key */
3491- redis_cmd_append_sstr_key_zval (& cmdstr , & z_args [ 0 ] , redis_sock , slot );
3485+ redis_cmd_append_sstr_key_zstr (& cmdstr , key , redis_sock , slot );
34923486
3493- for (i = 1 ; i < argc ; ++ i ) {
3487+ for (i = 0 ; i < argc ; ++ i ) {
34943488 if (i % 2 ) {
3495- redis_cmd_append_sstr_zval (& cmdstr , & z_args [i ], NULL );
3489+ redis_cmd_append_sstr_zval (& cmdstr , & args [i ], redis_sock );
34963490 } else {
3497- redis_cmd_append_sstr_zval (& cmdstr , & z_args [i ], redis_sock );
3491+ redis_cmd_append_sstr_zval (& cmdstr , & args [i ], NULL );
34983492 }
34993493 }
35003494 }
@@ -3503,9 +3497,6 @@ int redis_hset_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
35033497 * cmd = cmdstr .c ;
35043498 * cmd_len = cmdstr .len ;
35053499
3506- // Cleanup arg array
3507- efree (z_args );
3508-
35093500 return SUCCESS ;
35103501}
35113502
0 commit comments