@@ -727,29 +727,23 @@ PHP_METHOD(SQLite3, querySingle)
727
727
}
728
728
/* }}} */
729
729
730
- static int sqlite3_do_callback (struct php_sqlite3_fci * fc , zval * cb , int argc , sqlite3_value * * argv , sqlite3_context * context , int is_agg ) /* {{{ */
730
+ static int sqlite3_do_callback (zend_fcall_info_cache * fcc , uint32_t argc , sqlite3_value * * argv , sqlite3_context * context , int is_agg ) /* {{{ */
731
731
{
732
732
zval * zargs = NULL ;
733
733
zval retval ;
734
- int i ;
735
- int ret ;
736
- int fake_argc ;
734
+ uint32_t i ;
735
+ uint32_t fake_argc ;
736
+ zend_result ret = SUCCESS ;
737
737
php_sqlite3_agg_context * agg_context = NULL ;
738
738
739
+ // TODO Check where this arg is used
739
740
if (is_agg ) {
740
741
is_agg = 2 ;
741
742
}
742
743
743
744
fake_argc = argc + is_agg ;
744
745
745
- fc -> fci .size = sizeof (fc -> fci );
746
- ZVAL_COPY_VALUE (& fc -> fci .function_name , cb );
747
- fc -> fci .object = NULL ;
748
- fc -> fci .retval = & retval ;
749
- fc -> fci .param_count = fake_argc ;
750
-
751
746
/* build up the params */
752
-
753
747
if (fake_argc ) {
754
748
zargs = (zval * )safe_emalloc (fake_argc , sizeof (zval ), 0 );
755
749
}
@@ -791,11 +785,7 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
791
785
}
792
786
}
793
787
794
- fc -> fci .params = zargs ;
795
-
796
- if ((ret = zend_call_function (& fc -> fci , & fc -> fcc )) == FAILURE ) {
797
- php_error_docref (NULL , E_WARNING , "An error occurred while invoking the callback" );
798
- }
788
+ zend_call_known_fcc (fcc , & retval , fake_argc , zargs , /* named_params */ NULL );
799
789
800
790
if (is_agg ) {
801
791
zval_ptr_dtor (& zargs [0 ]);
@@ -872,7 +862,7 @@ static void php_sqlite3_callback_func(sqlite3_context *context, int argc, sqlite
872
862
{
873
863
php_sqlite3_func * func = (php_sqlite3_func * )sqlite3_user_data (context );
874
864
875
- sqlite3_do_callback (& func -> afunc , & func -> func , argc , argv , context , 0 );
865
+ sqlite3_do_callback (& func -> func , argc , argv , context , 0 );
876
866
}
877
867
/* }}}*/
878
868
@@ -883,7 +873,7 @@ static void php_sqlite3_callback_step(sqlite3_context *context, int argc, sqlite
883
873
884
874
agg_context -> row_count ++ ;
885
875
886
- sqlite3_do_callback (& func -> astep , & func -> step , argc , argv , context , 1 );
876
+ sqlite3_do_callback (& func -> step , argc , argv , context , 1 );
887
877
}
888
878
/* }}} */
889
879
@@ -894,7 +884,7 @@ static void php_sqlite3_callback_final(sqlite3_context *context) /* {{{ */
894
884
895
885
agg_context -> row_count = 0 ;
896
886
897
- sqlite3_do_callback (& func -> afini , & func -> fini , 0 , NULL , context , 1 );
887
+ sqlite3_do_callback (& func -> fini , 0 , NULL , context , 1 );
898
888
}
899
889
/* }}} */
900
890
@@ -974,7 +964,8 @@ PHP_METHOD(SQLite3, createFunction)
974
964
if (sqlite3_create_function (db_obj -> db , sql_func , sql_func_num_args , flags | SQLITE_UTF8 , func , php_sqlite3_callback_func , NULL , NULL ) == SQLITE_OK ) {
975
965
func -> func_name = estrdup (sql_func );
976
966
977
- ZVAL_COPY (& func -> func , & fci .function_name );
967
+ zend_fcc_addref (& fcc );
968
+ memcpy (& func -> func , & fcc , sizeof (zend_fcall_info_cache ));
978
969
979
970
func -> argc = sql_func_num_args ;
980
971
func -> next = db_obj -> funcs ;
@@ -1016,8 +1007,10 @@ PHP_METHOD(SQLite3, createAggregate)
1016
1007
if (sqlite3_create_function (db_obj -> db , sql_func , sql_func_num_args , SQLITE_UTF8 , func , NULL , php_sqlite3_callback_step , php_sqlite3_callback_final ) == SQLITE_OK ) {
1017
1008
func -> func_name = estrdup (sql_func );
1018
1009
1019
- ZVAL_COPY (& func -> step , & step_fci .function_name );
1020
- ZVAL_COPY (& func -> fini , & fini_fci .function_name );
1010
+ zend_fcc_addref (& step_fcc );
1011
+ zend_fcc_addref (& fini_fcc );
1012
+ memcpy (& func -> step , & step_fcc , sizeof (zend_fcall_info_cache ));
1013
+ memcpy (& func -> fini , & fini_fcc , sizeof (zend_fcall_info_cache ));
1021
1014
1022
1015
func -> argc = sql_func_num_args ;
1023
1016
func -> next = db_obj -> funcs ;
@@ -2202,14 +2195,17 @@ static void php_sqlite3_object_free_storage(zend_object *object) /* {{{ */
2202
2195
2203
2196
efree ((char * )func -> func_name );
2204
2197
2205
- if (!Z_ISUNDEF (func -> func )) {
2206
- zval_ptr_dtor (& func -> func );
2198
+ if (ZEND_FCC_INITIALIZED (func -> func )) {
2199
+ zend_fcc_dtor (& func -> func );
2200
+ memcpy (& func -> func , & empty_fcall_info_cache , sizeof (zend_fcall_info_cache ));
2207
2201
}
2208
- if (!Z_ISUNDEF (func -> step )) {
2209
- zval_ptr_dtor (& func -> step );
2202
+ if (ZEND_FCC_INITIALIZED (func -> step )) {
2203
+ zend_fcc_dtor (& func -> step );
2204
+ memcpy (& func -> step , & empty_fcall_info_cache , sizeof (zend_fcall_info_cache ));
2210
2205
}
2211
- if (!Z_ISUNDEF (func -> fini )) {
2212
- zval_ptr_dtor (& func -> fini );
2206
+ if (ZEND_FCC_INITIALIZED (func -> fini )) {
2207
+ zend_fcc_dtor (& func -> fini );
2208
+ memcpy (& func -> fini , & empty_fcall_info_cache , sizeof (zend_fcall_info_cache ));
2213
2209
}
2214
2210
efree (func );
2215
2211
}
0 commit comments