2323#include <arpa/inet.h>
2424#endif
2525
26- static zend_result lexbor_init_parser (void );
2726static void * lexbor_parse_uri (const zend_string * uri_str , const void * base_url , zval * errors );
2827static void lexbor_create_invalid_uri_exception (zval * exception_zv , zval * errors );
2928static void * lexbor_clone_uri (void * uri );
3029static zend_string * lexbor_uri_to_string (void * uri , uri_recomposition_mode_t recomposition_mode , bool exclude_fragment );
3130static void lexbor_free_uri (void * uri );
32- static zend_result lexbor_destroy_parser (void );
3331
3432static HashTable lexbor_property_handlers ;
3533
@@ -38,13 +36,11 @@ ZEND_TLS int lexbor_urls;
3836
3937const uri_handler_t lexbor_uri_handler = {
4038 URI_PARSER_WHATWG ,
41- lexbor_init_parser ,
4239 lexbor_parse_uri ,
4340 lexbor_create_invalid_uri_exception ,
4441 lexbor_clone_uri ,
4542 lexbor_uri_to_string ,
4643 lexbor_free_uri ,
47- lexbor_destroy_parser ,
4844 & lexbor_property_handlers
4945};
5046
@@ -67,14 +63,6 @@ const uri_handler_t lexbor_uri_handler = {
6763 } \
6864} while (0)
6965
70- #define CHECK_WRITE_RESULT (status , errors ) do { \
71- if (status != LXB_STATUS_OK) { \
72- fill_errors(errors); \
73- return FAILURE; \
74- } \
75- return SUCCESS; \
76- } while (0)
77-
7866#define LEXBOR_READ_ASCII_URI_COMPONENT (start , len , read_mode , retval ) do { \
7967 ZVAL_STRINGL(retval, (const char *) start, len); \
8068} while (0)
@@ -528,7 +516,26 @@ static zend_result lexbor_write_fragment(uri_internal_t *internal_uri, zval *val
528516 return SUCCESS ;
529517}
530518
531- static zend_result lexbor_init_parser (void )
519+ void lexbor_module_init (void )
520+ {
521+ zend_hash_init (& lexbor_property_handlers , 8 , NULL , NULL , true);
522+
523+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_SCHEME ), lexbor_read_scheme , lexbor_write_scheme );
524+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_USERNAME ), lexbor_read_username , lexbor_write_username );
525+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PASSWORD ), lexbor_read_password , lexbor_write_password );
526+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_HOST ), lexbor_read_host , lexbor_write_host );
527+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PORT ), lexbor_read_port , lexbor_write_port );
528+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PATH ), lexbor_read_path , lexbor_write_path );
529+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_QUERY ), lexbor_read_query , lexbor_write_query );
530+ URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_FRAGMENT ), lexbor_read_fragment , lexbor_write_fragment );
531+ }
532+
533+ void lexbor_module_shutdown (void )
534+ {
535+ zend_hash_destroy (& lexbor_property_handlers );
536+ }
537+
538+ zend_result lexbor_request_init (void )
532539{
533540 lexbor_mraw_t * mraw = lexbor_mraw_create ();
534541 lxb_status_t status = lexbor_mraw_init (mraw , 4096 * 2 );
@@ -548,18 +555,16 @@ static zend_result lexbor_init_parser(void)
548555
549556 lexbor_urls = 0 ;
550557
551- zend_hash_init (& lexbor_property_handlers , 8 , NULL , NULL , true);
558+ return SUCCESS ;
559+ }
552560
553- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_SCHEME ), lexbor_read_scheme , lexbor_write_scheme );
554- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_USERNAME ), lexbor_read_username , lexbor_write_username );
555- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PASSWORD ), lexbor_read_password , lexbor_write_password );
556- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_HOST ), lexbor_read_host , lexbor_write_host );
557- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PORT ), lexbor_read_port , lexbor_write_port );
558- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_PATH ), lexbor_read_path , lexbor_write_path );
559- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_QUERY ), lexbor_read_query , lexbor_write_query );
560- URI_REGISTER_PROPERTY_READ_WRITE_HANDLER (& lexbor_property_handlers , ZSTR_KNOWN (ZEND_STR_FRAGMENT ), lexbor_read_fragment , lexbor_write_fragment );
561+ void lexbor_request_shutdown (void )
562+ {
563+ lxb_url_parser_memory_destroy (lexbor_parser );
564+ lxb_url_parser_destroy (lexbor_parser , true);
561565
562- return SUCCESS ;
566+ lexbor_parser = NULL ;
567+ lexbor_urls = 0 ;
563568}
564569
565570static void * lexbor_parse_uri (const zend_string * uri_str , const void * base_url , zval * errors )
@@ -621,16 +626,3 @@ static zend_string *lexbor_uri_to_string(void *uri, uri_recomposition_mode_t rec
621626static void lexbor_free_uri (void * uri )
622627{
623628}
624-
625- static zend_result lexbor_destroy_parser (void )
626- {
627- lxb_url_parser_memory_destroy (lexbor_parser );
628- lxb_url_parser_destroy (lexbor_parser , true);
629-
630- lexbor_parser = NULL ;
631- lexbor_urls = 0 ;
632-
633- zend_hash_destroy (& lexbor_property_handlers );
634-
635- return SUCCESS ;
636- }
0 commit comments