@@ -900,20 +900,10 @@ static int php_sqlite3_callback_compare(void *coll, int a_len, const void *a, in
900
900
return 0 ;
901
901
}
902
902
903
- collation -> fci .fci .size = (sizeof (collation -> fci .fci ));
904
- ZVAL_COPY_VALUE (& collation -> fci .fci .function_name , & collation -> cmp_func );
905
- collation -> fci .fci .object = NULL ;
906
- collation -> fci .fci .retval = & retval ;
907
- collation -> fci .fci .param_count = 2 ;
908
-
909
903
ZVAL_STRINGL (& zargs [0 ], a , a_len );
910
904
ZVAL_STRINGL (& zargs [1 ], b , b_len );
911
905
912
- collation -> fci .fci .params = zargs ;
913
-
914
- if ((ret = zend_call_function (& collation -> fci .fci , & collation -> fci .fcc )) == FAILURE ) {
915
- php_error_docref (NULL , E_WARNING , "An error occurred while invoking the compare callback" );
916
- }
906
+ zend_call_known_fcc (& collation -> cmp_func , & retval , /* argc */ 2 , zargs , /* named_params */ NULL );
917
907
918
908
zval_ptr_dtor (& zargs [0 ]);
919
909
zval_ptr_dtor (& zargs [1 ]);
@@ -1050,7 +1040,8 @@ PHP_METHOD(SQLite3, createCollation)
1050
1040
if (sqlite3_create_collation (db_obj -> db , collation_name , SQLITE_UTF8 , collation , php_sqlite3_callback_compare ) == SQLITE_OK ) {
1051
1041
collation -> collation_name = estrdup (collation_name );
1052
1042
1053
- ZVAL_COPY (& collation -> cmp_func , & fci .function_name );
1043
+ zend_fcc_addref (& fcc );
1044
+ memcpy (& collation -> cmp_func , & fcc , sizeof (zend_fcall_info_cache ));
1054
1045
1055
1046
collation -> next = db_obj -> collations ;
1056
1047
db_obj -> collations = collation ;
@@ -2217,8 +2208,8 @@ static void php_sqlite3_object_free_storage(zend_object *object) /* {{{ */
2217
2208
sqlite3_create_collation (intern -> db , collation -> collation_name , SQLITE_UTF8 , NULL , NULL );
2218
2209
}
2219
2210
efree ((char * )collation -> collation_name );
2220
- if (! Z_ISUNDEF (collation -> cmp_func )) {
2221
- zval_ptr_dtor (& collation -> cmp_func );
2211
+ if (ZEND_FCC_INITIALIZED (collation -> cmp_func )) {
2212
+ zend_fcc_dtor (& collation -> cmp_func );
2222
2213
}
2223
2214
efree (collation );
2224
2215
}
0 commit comments