@@ -506,7 +506,7 @@ protocol_binary_response_status s_stat_handler (const void *cookie, const void *
506
506
{
507
507
zval params [3 ];
508
508
protocol_binary_response_status retval = PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND ;
509
- zval zcookie , zkey , zbody ;
509
+ zval zcookie , zkey , zstats ;
510
510
511
511
if (!MEMC_HAS_CB (MEMC_SERVER_ON_STAT )) {
512
512
return retval ;
@@ -519,24 +519,38 @@ protocol_binary_response_status s_stat_handler (const void *cookie, const void *
519
519
} else {
520
520
ZVAL_NULL (& zkey );
521
521
}
522
- ZVAL_NULL (& zbody );
523
- ZVAL_MAKE_REF (& zbody );
522
+ ZVAL_NULL (& zstats );
523
+ ZVAL_MAKE_REF (& zstats );
524
524
525
525
ZVAL_COPY (& params [0 ], & zcookie );
526
526
ZVAL_COPY (& params [1 ], & zkey );
527
- ZVAL_COPY (& params [2 ], & zbody );
527
+ ZVAL_COPY (& params [2 ], & zstats );
528
528
529
529
retval = s_invoke_php_callback (& MEMC_GET_CB (MEMC_SERVER_ON_STAT ), params , 3 );
530
530
531
531
if (retval == PROTOCOL_BINARY_RESPONSE_SUCCESS ) {
532
- if (Z_TYPE ( zbody ) == IS_NULL ) {
532
+ if (Z_ISNULL ( zstats ) ) {
533
533
retval = response_handler (cookie , NULL , 0 , NULL , 0 );
534
- }
535
- else {
536
- if (Z_TYPE (zbody ) != IS_STRING ) {
537
- convert_to_string (& zbody );
534
+ } else {
535
+ zval * zarray = & zstats ;
536
+ zend_string * key ;
537
+ zval * val ;
538
+
539
+ ZVAL_DEREF (zarray );
540
+ if (Z_TYPE_P (zarray ) != IS_ARRAY ) {
541
+ convert_to_array (zarray );
542
+ }
543
+
544
+ ZEND_HASH_FOREACH_STR_KEY_VAL (Z_ARRVAL_P (zarray ), key , val )
545
+ {
546
+ zend_string * val_str = zval_get_string (val );
547
+ retval = response_handler (cookie , key -> val , key -> len , val_str -> val , val_str -> len );
548
+ if (retval != PROTOCOL_BINARY_RESPONSE_SUCCESS ) {
549
+ break ;
550
+ }
551
+ zend_string_release (val_str );
538
552
}
539
- retval = response_handler ( cookie , key , key_len , Z_STRVAL ( zbody ), ( uint32_t ) Z_STRLEN ( zbody ) );
553
+ ZEND_HASH_FOREACH_END ( );
540
554
}
541
555
}
542
556
@@ -545,7 +559,7 @@ protocol_binary_response_status s_stat_handler (const void *cookie, const void *
545
559
zval_ptr_dtor (& params [2 ]);
546
560
zval_ptr_dtor (& zcookie );
547
561
zval_ptr_dtor (& zkey );
548
- zval_ptr_dtor (& zbody );
562
+ zval_ptr_dtor (& zstats );
549
563
return retval ;
550
564
}
551
565
0 commit comments