@@ -917,61 +917,55 @@ static PHPDBG_COMMAND(list) /* {{{ */
917
917
return SUCCESS ;
918
918
} /* }}} */
919
919
920
- static inline int phpdbg_call_register (phpdbg_input_t * input TSRMLS_DC ) /* {{{ */
920
+ int phpdbg_call_register (phpdbg_input_t * input TSRMLS_DC ) /* {{{ */
921
921
{
922
922
phpdbg_input_t * function = input -> argv [0 ];
923
923
924
924
if (zend_hash_exists (
925
925
& PHPDBG_G (registered ), function -> string , function -> length + 1 )) {
926
926
927
927
zval fname , * fretval ;
928
- zend_fcall_info fci ;
928
+ zend_fcall_info * fci = emalloc ( sizeof ( zend_fcall_info )) ;
929
929
930
930
ZVAL_STRINGL (& fname , function -> string , function -> length , 1 );
931
931
932
- fci . size = sizeof (fci );
933
- fci . function_table = & PHPDBG_G (registered );
934
- fci . function_name = & fname ;
935
- fci . symbol_table = EG (active_symbol_table );
936
- fci . object_ptr = NULL ;
937
- fci . retval_ptr_ptr = & fretval ;
938
- fci . no_separation = 1 ;
932
+ fci -> size = sizeof (zend_fcall_info );
933
+ fci -> function_table = & PHPDBG_G (registered );
934
+ fci -> function_name = & fname ;
935
+ fci -> symbol_table = EG (active_symbol_table );
936
+ fci -> object_ptr = NULL ;
937
+ fci -> retval_ptr_ptr = & fretval ;
938
+ fci -> no_separation = 1 ;
939
939
940
940
if (input -> argc > 1 ) {
941
- int arg ;
942
- zval * * * params ;
943
- zval * zparam ;
941
+ int param ;
942
+ zval params ;
944
943
945
- fci .param_count = (input -> argc > 1 ) ? (input -> argc - 1 ) : 0 ;
946
- fci .params = (zval * * * ) emalloc (fci .param_count * sizeof (zval * * ));
944
+ array_init (& params );
947
945
948
- params = fci .params ;
946
+ for (param = 0 ; param < (input -> argc - 1 ); param ++ ) {
947
+ add_next_index_stringl (
948
+ & params ,
949
+ input -> argv [param + 1 ]-> string ,
950
+ input -> argv [param + 1 ]-> length , 1 );
949
951
950
- for (arg = 1 ; arg <= (input -> argc - 1 ); arg ++ ) {
951
- MAKE_STD_ZVAL (zparam );
952
- ZVAL_STRINGL (
953
- zparam ,
954
- input -> argv [arg ]-> string ,
955
- input -> argv [arg ]-> length , 1 );
956
-
957
- * params ++ = & zparam ;
952
+ phpdbg_debug (
953
+ "created param[%d] from argv[%d]: %s" ,
954
+ param , param + 1 , input -> argv [param + 1 ]-> string );
958
955
}
959
- } else {
960
- fci .params = NULL ;
961
- fci .param_count = 0 ;
962
- }
963
-
964
- zend_call_function (& fci , NULL TSRMLS_CC );
965
-
966
- if (input -> argc > 1 ) {
967
- int param ;
968
956
969
- for ( param = 0 ; param < fci . param_count ; param ++ ) {
970
- zval_ptr_dtor ( fci . params [ param ]);
971
- }
972
- efree ( fci . params ) ;
957
+ zend_fcall_info_args ( fci , & params TSRMLS_CC );
958
+ } else {
959
+ fci -> params = NULL ;
960
+ fci -> param_count = 0 ;
973
961
}
974
962
963
+ phpdbg_debug (
964
+ "created %d params from %d argvuments" ,
965
+ fci -> param_count , input -> argc );
966
+
967
+ zend_call_function (fci , NULL TSRMLS_CC );
968
+
975
969
if (fretval ) {
976
970
zend_print_zval_r (
977
971
fretval , 0 TSRMLS_CC );
@@ -980,6 +974,12 @@ static inline int phpdbg_call_register(phpdbg_input_t *input TSRMLS_DC) /* {{{ *
980
974
981
975
zval_dtor (& fname );
982
976
977
+ if (fci -> params ) {
978
+ efree (fci -> params );
979
+ }
980
+
981
+ efree (fci );
982
+
983
983
return SUCCESS ;
984
984
}
985
985
0 commit comments