@@ -375,10 +375,10 @@ ra_make_array(HashTable *hosts, zval *z_fun, zval *z_dist, HashTable *hosts_prev
375
375
376
376
/* call userland key extraction function */
377
377
char *
378
- ra_call_extractor (RedisArray * ra , const char * key , int key_len , int * out_len TSRMLS_DC ) {
379
-
380
- char * out ;
381
- zval z_ret , z_argv [ 1 ] ;
378
+ ra_call_extractor (RedisArray * ra , const char * key , int key_len , int * out_len TSRMLS_DC )
379
+ {
380
+ char * out = NULL ;
381
+ zval z_ret , z_argv ;
382
382
383
383
/* check that we can call the extractor function */
384
384
#if (PHP_MAJOR_VERSION < 7 )
@@ -391,19 +391,15 @@ ra_call_extractor(RedisArray *ra, const char *key, int key_len, int *out_len TSR
391
391
}
392
392
393
393
/* call extraction function */
394
- ZVAL_STRINGL (& z_argv [0 ], key , key_len );
395
- call_user_function (EG (function_table ), NULL , & ra -> z_fun , & z_ret , 1 , z_argv );
396
-
397
- if (Z_TYPE (z_ret ) != IS_STRING ) {
398
- zval_dtor (& z_argv [0 ]);
399
- zval_dtor (& z_ret );
400
- return NULL ;
401
- }
394
+ ZVAL_STRINGL (& z_argv , key , key_len );
395
+ call_user_function (EG (function_table ), NULL , & ra -> z_fun , & z_ret , 1 , & z_argv );
402
396
403
- * out_len = Z_STRLEN (z_ret );
404
- out = estrndup (Z_STRVAL (z_ret ), * out_len );
397
+ if (Z_TYPE (z_ret ) == IS_STRING ) {
398
+ * out_len = Z_STRLEN (z_ret );
399
+ out = estrndup (Z_STRVAL (z_ret ), * out_len );
400
+ }
405
401
406
- zval_dtor (& z_argv [ 0 ] );
402
+ zval_dtor (& z_argv );
407
403
zval_dtor (& z_ret );
408
404
return out ;
409
405
}
@@ -426,10 +422,10 @@ ra_extract_key(RedisArray *ra, const char *key, int key_len, int *out_len TSRMLS
426
422
427
423
/* call userland key distributor function */
428
424
zend_bool
429
- ra_call_distributor (RedisArray * ra , const char * key , int key_len , int * pos TSRMLS_DC ) {
430
-
431
- zval z_ret ;
432
- zval z_argv [ 1 ] ;
425
+ ra_call_distributor (RedisArray * ra , const char * key , int key_len , int * pos TSRMLS_DC )
426
+ {
427
+ zend_bool ret = 0 ;
428
+ zval z_ret , z_argv ;
433
429
434
430
/* check that we can call the extractor function */
435
431
#if (PHP_MAJOR_VERSION < 7 )
@@ -442,19 +438,17 @@ ra_call_distributor(RedisArray *ra, const char *key, int key_len, int *pos TSRML
442
438
}
443
439
444
440
/* call extraction function */
445
- ZVAL_STRINGL (& z_argv [ 0 ] , key , key_len );
446
- call_user_function (EG (function_table ), NULL , & ra -> z_dist , & z_ret , 1 , z_argv );
441
+ ZVAL_STRINGL (& z_argv , key , key_len );
442
+ call_user_function (EG (function_table ), NULL , & ra -> z_dist , & z_ret , 1 , & z_argv );
447
443
448
- if (Z_TYPE (z_ret ) != IS_LONG ) {
449
- zval_dtor (& z_argv [0 ]);
450
- zval_dtor (& z_ret );
451
- return 0 ;
452
- }
444
+ if (Z_TYPE (z_ret ) == IS_LONG ) {
445
+ * pos = Z_LVAL (z_ret );
446
+ ret = 1 ;
447
+ }
453
448
454
- * pos = Z_LVAL (z_ret );
455
- zval_dtor (& z_argv [0 ]);
449
+ zval_dtor (& z_argv );
456
450
zval_dtor (& z_ret );
457
- return 1 ;
451
+ return ret ;
458
452
}
459
453
460
454
zval *
0 commit comments