@@ -506,7 +506,7 @@ protocol_binary_response_status s_stat_handler (const void *cookie, const void *
506506{
507507 zval params [3 ];
508508 protocol_binary_response_status retval = PROTOCOL_BINARY_RESPONSE_UNKNOWN_COMMAND ;
509- zval zcookie , zkey , zbody ;
509+ zval zcookie , zkey , zstats ;
510510
511511 if (!MEMC_HAS_CB (MEMC_SERVER_ON_STAT )) {
512512 return retval ;
@@ -519,24 +519,38 @@ protocol_binary_response_status s_stat_handler (const void *cookie, const void *
519519 } else {
520520 ZVAL_NULL (& zkey );
521521 }
522- ZVAL_NULL (& zbody );
523- ZVAL_MAKE_REF (& zbody );
522+ ZVAL_NULL (& zstats );
523+ ZVAL_MAKE_REF (& zstats );
524524
525525 ZVAL_COPY (& params [0 ], & zcookie );
526526 ZVAL_COPY (& params [1 ], & zkey );
527- ZVAL_COPY (& params [2 ], & zbody );
527+ ZVAL_COPY (& params [2 ], & zstats );
528528
529529 retval = s_invoke_php_callback (& MEMC_GET_CB (MEMC_SERVER_ON_STAT ), params , 3 );
530530
531531 if (retval == PROTOCOL_BINARY_RESPONSE_SUCCESS ) {
532- if (Z_TYPE ( zbody ) == IS_NULL ) {
532+ if (Z_ISNULL ( zstats ) ) {
533533 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 );
538552 }
539- retval = response_handler ( cookie , key , key_len , Z_STRVAL ( zbody ), ( uint32_t ) Z_STRLEN ( zbody ) );
553+ ZEND_HASH_FOREACH_END ( );
540554 }
541555 }
542556
@@ -545,7 +559,7 @@ protocol_binary_response_status s_stat_handler (const void *cookie, const void *
545559 zval_ptr_dtor (& params [2 ]);
546560 zval_ptr_dtor (& zcookie );
547561 zval_ptr_dtor (& zkey );
548- zval_ptr_dtor (& zbody );
562+ zval_ptr_dtor (& zstats );
549563 return retval ;
550564}
551565
0 commit comments