@@ -923,54 +923,50 @@ PHP_REDIS_API void redis_info_response(INTERNAL_FUNCTION_PARAMETERS, RedisSock *
923
923
PHP_REDIS_API void
924
924
redis_parse_info_response (char * response , zval * z_ret )
925
925
{
926
- char * key , * value , * p , * cur , * pos ;
927
- int is_numeric ;
926
+ char * cur , * pos ;
928
927
929
928
array_init (z_ret );
930
929
931
930
cur = response ;
932
931
while (1 ) {
933
932
/* skip comments and empty lines */
934
- if (* cur == '#' || * cur == '\r' ) {
935
- if (! (cur = strchr (cur , '\n' )))
933
+ if (* cur == '#' || * cur == '\r' ) {
934
+ if ( (cur = strstr (cur , _NL )) == NULL ) {
936
935
break ;
937
- cur ++ ;
936
+ }
937
+ cur += 2 ;
938
938
continue ;
939
939
}
940
940
941
941
/* key */
942
- pos = strchr (cur , ':' );
943
- if (pos == NULL ) {
942
+ if ((pos = strchr (cur , ':' )) == NULL ) {
944
943
break ;
945
944
}
946
- key = estrndup (cur , pos - cur );
945
+ char * key = cur ;
946
+ int key_len = pos - cur ;
947
+ key [key_len ] = '\0' ;
947
948
948
949
/* value */
949
950
cur = pos + 1 ;
950
- pos = strchr (cur , '\r' );
951
- if (pos == NULL ) {
952
- efree (key );
951
+ if ((pos = strstr (cur , _NL )) == NULL ) {
953
952
break ;
954
953
}
955
- value = estrndup (cur , pos - cur );
956
- pos += 2 ; /* \r, \n */
957
- cur = pos ;
958
-
959
- is_numeric = 1 ;
960
- for (p = value ; * p ; ++ p ) {
961
- if (* p < '0' || * p > '9' ) {
962
- is_numeric = 0 ;
963
- break ;
964
- }
965
- }
966
-
967
- if (is_numeric == 1 ) {
968
- add_assoc_long (z_ret , key , atol (value ));
954
+ char * value = cur ;
955
+ int value_len = pos - cur ;
956
+ value [value_len ] = '\0' ;
957
+
958
+ double dval ;
959
+ zend_long lval ;
960
+ zend_uchar type = is_numeric_string (value , value_len , & lval , & dval , 0 );
961
+ if (type == IS_LONG ) {
962
+ add_assoc_long_ex (z_ret , key , key_len , lval );
963
+ } else if (type == IS_DOUBLE ) {
964
+ add_assoc_double_ex (z_ret , key , key_len , dval );
969
965
} else {
970
- add_assoc_string (z_ret , key , value );
966
+ add_assoc_stringl_ex (z_ret , key , key_len , value , value_len );
971
967
}
972
- efree ( value );
973
- efree ( key );
968
+
969
+ cur = pos + 2 ; /* \r, \n */
974
970
}
975
971
}
976
972
0 commit comments