@@ -727,13 +727,13 @@ 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
739
if (is_agg ) {
@@ -742,14 +742,7 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
742
742
743
743
fake_argc = argc + is_agg ;
744
744
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
745
/* build up the params */
752
-
753
746
if (fake_argc ) {
754
747
zargs = (zval * )safe_emalloc (fake_argc , sizeof (zval ), 0 );
755
748
}
@@ -791,24 +784,17 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
791
784
}
792
785
}
793
786
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
- }
787
+ zend_call_known_fcc (fcc , & retval , fake_argc , zargs , /* named_params */ NULL );
799
788
789
+ /* clean up the params */
800
790
if (is_agg ) {
801
791
zval_ptr_dtor (& zargs [0 ]);
792
+ zval_ptr_dtor (& zargs [1 ]);
802
793
}
803
-
804
- /* clean up the params */
805
794
if (fake_argc ) {
806
795
for (i = is_agg ; i < argc + is_agg ; i ++ ) {
807
796
zval_ptr_dtor (& zargs [i ]);
808
797
}
809
- if (is_agg ) {
810
- zval_ptr_dtor (& zargs [1 ]);
811
- }
812
798
efree (zargs );
813
799
}
814
800
@@ -872,7 +858,7 @@ static void php_sqlite3_callback_func(sqlite3_context *context, int argc, sqlite
872
858
{
873
859
php_sqlite3_func * func = (php_sqlite3_func * )sqlite3_user_data (context );
874
860
875
- sqlite3_do_callback (& func -> afunc , & func -> func , argc , argv , context , 0 );
861
+ sqlite3_do_callback (& func -> func , argc , argv , context , 0 );
876
862
}
877
863
/* }}}*/
878
864
@@ -883,7 +869,7 @@ static void php_sqlite3_callback_step(sqlite3_context *context, int argc, sqlite
883
869
884
870
agg_context -> row_count ++ ;
885
871
886
- sqlite3_do_callback (& func -> astep , & func -> step , argc , argv , context , 1 );
872
+ sqlite3_do_callback (& func -> step , argc , argv , context , 1 );
887
873
}
888
874
/* }}} */
889
875
@@ -894,7 +880,7 @@ static void php_sqlite3_callback_final(sqlite3_context *context) /* {{{ */
894
880
895
881
agg_context -> row_count = 0 ;
896
882
897
- sqlite3_do_callback (& func -> afini , & func -> fini , 0 , NULL , context , 1 );
883
+ sqlite3_do_callback (& func -> fini , 0 , NULL , context , 1 );
898
884
}
899
885
/* }}} */
900
886
@@ -974,7 +960,7 @@ PHP_METHOD(SQLite3, createFunction)
974
960
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
961
func -> func_name = estrdup (sql_func );
976
962
977
- ZVAL_COPY (& func -> func , & fci . function_name );
963
+ zend_fcc_dup (& func -> func , & fcc );
978
964
979
965
func -> argc = sql_func_num_args ;
980
966
func -> next = db_obj -> funcs ;
@@ -1016,8 +1002,8 @@ PHP_METHOD(SQLite3, createAggregate)
1016
1002
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
1003
func -> func_name = estrdup (sql_func );
1018
1004
1019
- ZVAL_COPY (& func -> step , & step_fci . function_name );
1020
- ZVAL_COPY (& func -> fini , & fini_fci . function_name );
1005
+ zend_fcc_dup (& func -> step , & step_fcc );
1006
+ zend_fcc_dup (& func -> fini , & fini_fcc );
1021
1007
1022
1008
func -> argc = sql_func_num_args ;
1023
1009
func -> next = db_obj -> funcs ;
@@ -2202,14 +2188,14 @@ static void php_sqlite3_object_free_storage(zend_object *object) /* {{{ */
2202
2188
2203
2189
efree ((char * )func -> func_name );
2204
2190
2205
- if (! Z_ISUNDEF (func -> func )) {
2206
- zval_ptr_dtor (& func -> func );
2191
+ if (ZEND_FCC_INITIALIZED (func -> func )) {
2192
+ zend_fcc_dtor (& func -> func );
2207
2193
}
2208
- if (! Z_ISUNDEF (func -> step )) {
2209
- zval_ptr_dtor (& func -> step );
2194
+ if (ZEND_FCC_INITIALIZED (func -> step )) {
2195
+ zend_fcc_dtor (& func -> step );
2210
2196
}
2211
- if (! Z_ISUNDEF (func -> fini )) {
2212
- zval_ptr_dtor (& func -> fini );
2197
+ if (ZEND_FCC_INITIALIZED (func -> fini )) {
2198
+ zend_fcc_dtor (& func -> fini );
2213
2199
}
2214
2200
efree (func );
2215
2201
}
0 commit comments