@@ -34,6 +34,7 @@ ZEND_BEGIN_MODULE_GLOBALS(zend_test)
34
34
int observer_observe_all ;
35
35
int observer_observe_includes ;
36
36
int observer_observe_functions ;
37
+ zend_array * observer_observe_function_names ;
37
38
int observer_show_return_type ;
38
39
int observer_show_return_value ;
39
40
int observer_show_init_backtrace ;
@@ -329,12 +330,33 @@ static ZEND_METHOD(ZendTestNS2_Foo, method) {
329
330
ZEND_PARSE_PARAMETERS_NONE ();
330
331
}
331
332
333
+ static ZEND_INI_MH (zend_test_observer_OnUpdateCommaList )
334
+ {
335
+ zend_array * * p = (zend_array * * ) ZEND_INI_GET_ADDR ();
336
+ if (* p ) {
337
+ zend_hash_release (* p );
338
+ }
339
+ * p = NULL ;
340
+ if (new_value && ZSTR_LEN (new_value )) {
341
+ * p = malloc (sizeof (HashTable ));
342
+ _zend_hash_init (* p , 8 , ZVAL_PTR_DTOR , 1 );
343
+ const char * start = ZSTR_VAL (new_value ), * ptr ;
344
+ while ((ptr = strchr (start , ',' ))) {
345
+ zend_hash_str_add_empty_element (* p , start , ptr - start );
346
+ start = ptr + 1 ;
347
+ }
348
+ zend_hash_str_add_empty_element (* p , start , ZSTR_VAL (new_value ) + ZSTR_LEN (new_value ) - start );
349
+ }
350
+ return SUCCESS ;
351
+ }
352
+
332
353
PHP_INI_BEGIN ()
333
354
STD_PHP_INI_BOOLEAN ("zend_test.observer.enabled" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_enabled , zend_zend_test_globals , zend_test_globals )
334
355
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_output" , "1" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_output , zend_zend_test_globals , zend_test_globals )
335
356
STD_PHP_INI_BOOLEAN ("zend_test.observer.observe_all" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_observe_all , zend_zend_test_globals , zend_test_globals )
336
357
STD_PHP_INI_BOOLEAN ("zend_test.observer.observe_includes" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_observe_includes , zend_zend_test_globals , zend_test_globals )
337
358
STD_PHP_INI_BOOLEAN ("zend_test.observer.observe_functions" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_observe_functions , zend_zend_test_globals , zend_test_globals )
359
+ STD_PHP_INI_ENTRY ("zend_test.observer.observe_function_names" , "" , PHP_INI_SYSTEM , zend_test_observer_OnUpdateCommaList , observer_observe_function_names , zend_zend_test_globals , zend_test_globals )
338
360
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_return_type" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_return_type , zend_zend_test_globals , zend_test_globals )
339
361
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_return_value" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_return_value , zend_zend_test_globals , zend_test_globals )
340
362
STD_PHP_INI_BOOLEAN ("zend_test.observer.show_init_backtrace" , "0" , PHP_INI_SYSTEM , OnUpdateBool , observer_show_init_backtrace , zend_zend_test_globals , zend_test_globals )
@@ -584,10 +606,16 @@ static zend_observer_fcall_handlers observer_fcall_init(zend_execute_data *execu
584
606
585
607
if (ZT_G (observer_observe_all )) {
586
608
return (zend_observer_fcall_handlers ){observer_begin , observer_end };
587
- } else if (ZT_G (observer_observe_includes ) && !fbc -> common .function_name ) {
588
- return (zend_observer_fcall_handlers ){observer_begin , observer_end };
589
- } else if (ZT_G (observer_observe_functions ) && fbc -> common .function_name ) {
590
- return (zend_observer_fcall_handlers ){observer_begin , observer_end };
609
+ } else if (fbc -> common .function_name ) {
610
+ if (ZT_G (observer_observe_functions )) {
611
+ return (zend_observer_fcall_handlers ){observer_begin , observer_end };
612
+ } else if (ZT_G (observer_observe_function_names ) && zend_hash_exists (ZT_G (observer_observe_function_names ), fbc -> common .function_name )) {
613
+ return (zend_observer_fcall_handlers ){observer_begin , observer_end };
614
+ }
615
+ } else {
616
+ if (ZT_G (observer_observe_includes )) {
617
+ return (zend_observer_fcall_handlers ){observer_begin , observer_end };
618
+ }
591
619
}
592
620
return (zend_observer_fcall_handlers ){NULL , NULL };
593
621
}
0 commit comments